概要
fluentdを用いてアクセスログをS3に保存する方法です。
今回はApacheのログをS3に送信します。
環境
事前準備
バケットの用意
fluentd-log01
という名前で作成します。
注意としてS3のバケット名は他の利用者と重複できないので自分独自のものになるようにしてください。
Apacheログのアクセス権変更
apacheのデフォルト設定だと読み取るログにアクセス出来ないので、権限を付与します。
$ sudo chmod o+rx /var/log/apache2/ $ sudo chmod o+r /var/log/apache2/access.log
fluentdの設定
fluentdのインストール
$ curl -L https://td-toolbelt.herokuapp.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
S3 outputプラグインインストール
$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-s3
td-agent.confの編集
/etc/td-agent/td-agent.conf
に以下を追記します。
<source> @type tail format apache2 path /var/log/apache2/access.log pos_file /var/log/td-agent/apache2.access.log.pos tag s3.apache.access </source> <match s3.*.*> @type s3 aws_key_id YOUR_AWS_KEY_ID aws_sec_key YOUR_AWS_SECRET/KEY s3_bucket fluentd-log01 s3_region ap-northeast-1 path log_ buffer_path /var/log/td-agent/s3 time_slice_format %Y%m%d%H time_slice_wait 10m utc # flush_interval 1s buffer_chunk_limit 256m </match>
設定の説明
プロパティ | 意味 |
---|---|
aws_key_id | AWSのKeyID |
aws_sec_key | AWSのSecretKey |
s3_bucket | バケット名 |
s3_region | S3のリージョン |
s3_object_key_format | デフォルトは%{path}%{time_slice}_%{index}.%{file_extension} 複数サーバであるなら %{path}%{time_slice}_%{index}-%{hostname}.%{file_extension} |
path | 生成するログファイルのprefix |
buffer_path | ローカルのbufferのpathかつprefix |
time_slice_format | ファイル名のフォーマット。 また最小単位でファイルを分割。 上記なら%Hなので1時間毎にファイル生成 |
time_slice_wait | time_slice_formatでは毎時00分00秒のタイミングで出力する。 しかしログデータの転送が遅れて漏れる可能性がある。 漏れないよう少しの間待つための時間。 デフォルト10minなので、設定していれば毎時10分00秒に出力。 出力は10分後だが、00分を超えた新しいログは書き込まれないので重複しない。 |
time_slice_format
の時間毎にファイルが生成されますが、それだとデバッグがしにくいので検証時はflush_interval
を使うといいです。これを短い時間にすると即座にファイルが生成されてS3にちゃんと送信されるか確認できます。逆に言うとflush_interval
があるとその時間毎にファイルが生成されるので、短いとファイルが大量に作られるので注意。
設定したら再起動します
$ sudo service td-agent restart
td-agent自体のログがエラーをはいていなければOKです。
$ tail -n2 /var/log/td-agent/td-agent.log 2015-07-07 12:29:27 +0000 [info]: listening dRuby uri="druby://127.0.0.1:24230" object="Engine" 2015-07-07 12:29:27 +0000 [info]: following tail of /var/log/apache2/access.log