Carpe Diem

備忘録

fluentdでアクセスログをS3へ送信

概要

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

S3上で確認

f:id:quoll00:20150707215339p:plain

ソース