AWSではオートスケールの都合などもあり、ログをfluentd(td-agent)を用いてAmazon S3へ置く事が流行っていますね。
しかし、AWSと同じ手順でtd-agentをインストールしても、ニフティクラウドストレージでは利用できません。
原因はtd-agentにaws-sdkが同梱されており、保存先にAmazonS3が指定してある為に他クラウドではエラーになってしまいます。
そこで、本記事ではこの対策方法について記載したいと思います。
OS
CentOS6.4
Apache2.2 td-agent1.1.24
Apacheのログ形式は標準のcombined
ログ保存領域は/var/www_logs/[バーチャルホスト名]-access_log.%Y%m%d
td-agentインストール方法
本手順ではtd-agent1系をインストールします。
リポジトリの追加
以下の内容をターミナルにそのまま貼りつけ
1 2 3 4 5 6 7 8 | cat > /etc/yum.repos.d/td.repo <<EOF [treasuredata] name=TreasureData baseurl=http://packages.treasuredata.com.s3.amazonaws.com/redhat/$basearch gpgcheck=0 enable=0 EOF |
yumコマンドにてインストール
以下の内容をターミナルにそのまま貼りつけ
1 | yum -y --enablerepo=treasuredata install td-agent |
conf設定
標準では不要なconfファイルが含まれるので、こちらの削除とAPIキー等の記載をします
confの変更
以下の内容をターミナルにそのまま貼りつけ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | mkdir /tmp/td-agent chown td-agent:td-agent /tmp/td-agent mkdir /var/log/td-agent/buffer chown td-agent:td-agent /var/log/td-agent/buffer cp -pi /etc/td-agent/td-agent.conf /etc/td-agent/td-agent.conf.org cat > /etc/td-agent/td-agent.conf <<EOF # File input ## read apache logs continuously and tags td.apache.access type tail format apache path /var/www_logs/!!!バーチャルホスト名!!!-access_log.%Y%m%d tag apache.access.!!!バーチャルホスト名!!! pos_file /tmp/td-agent/!!!バーチャルホスト名!!!.pos type s3 aws_key_id !!!NiftyCloudAccessKey!!! aws_sec_key !!!NiftyCloudSecretAccessKey!!! s3_bucket !!!NiftyCloudバケット名!!! s3_endpoint ncss.nifty.com check_apikey_on_start false s3_object_key_format %{path}%{time_slice}%{hostname}_apachelog_%{index}.%{file_extension} path www_logs/ time_slice_format %Y/%m/%d/ buffer_path /var/log/td-agent/buffer/CloudStorage flush_interval 60s EOF |
サーバ固有の設定変更
1 | vi /etc/td-agent/td-agent.conf |
以下の個所を変更(置換)
!!!バーチャルホスト名!!! → サーバーで稼働しているバーチャルホスト名。複数ある場合は要conf編集
!!!NiftyCloudAccessKey!!! →該当アカウントのアクセスキーを記載
!!!NiftyCloudSecretAccessKey!!! →該当アカウントのシークレットキーを記載
!!!NiftyCloudバケット名!!! →作成するバケット名を設定
aws-sdkのS3固定設定の変更
以下の内容をターミナルにそのまま貼りつけ、実行
1 | sed -i -e 's/ @endpoint = config.send(:"#{service_ruby_name}_endpoint")/ #@endpoint = config.send(:"#{service_ruby_name}_endpoint")n @endpoint = "ncss.nifty.com"/g' /etc/td-agent/td-agent.conf |
td-agent起動
以下の内容をターミナルにそのまま貼りつけ、実行
1 | /etc/init.d/td-agent start |
動作確認
以下のコマンドでログを確認し、
下記ログがある事を確認
1 | tail /var/log/td-agent/td-agent.log |
例:
2015-03-12 11:28:55 +0900 [info]: following tail of /var/www_logs/fluentdtest.xxx.xxx-access_log.20150312
以上になります。
ストレージに入ったログを各種ログ解析ツールに入れて確認したりすることができるはずです!
なお、手順途中のバケット名を変更することで、IDCFクラウドのオブジェクトストレージや、さくらのBASE Storageにも対応できます!
興味のある人は一度トライしてみてください!
なにかあればコメント等ばんばん頂ければ嬉しいです!
投稿者プロフィール
-
2013年入社の平成生まれです。
初めて触ったコンピュータはPC9821でダイヤルアップでした。
その時に鯖落ちや人大杉の対応をしてくださる鯖缶になりたいと憧れ、
みなさんのお役に立てればと思っております!
#今では個人所有のパソコン・サーバだけで20台ほどあります…。
サーバー大好き!