ようへいの日々精進XP

よかろうもん

Apache アクセスログを fluentd で S3 に保存する(修正版)

更新情報

  • S3 プラグインは別途インストールが必要と記載しておりましたが、@repeatedly さんのご指摘により S3 プラグインは標準で同梱されていることを確認致しました。誤った情報を記載してしまい申し訳ございませんでした...。また、@repeatedly さんご指摘有難う御座いました。

要件

  • Apache のアクセスログを fluentd を使って Amazon S3 に放り込んでみる

メモ

環境

手順

yum のリポジトリを設定する
vim /etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
td-agent のインストール
yum install td-agent
fluentd の S3 プラグインをインストール

※td-agent にはデフォルトで S3 プラグインは同梱されていますので、下記の手順は不要です。

/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-s3
td-agent.conf を設定す

ログファイルをサーバーごとに書き出す為に td-agent.conf をテンプレートから書き出すようにテンプレートファイルにて設定する。

vim td-agent.conf.tmpl
<source>
        type tail
        format apache
        path /log/apache/xxx.xxxx.xxxx.log
        tag apache.access
        pos_file /tmp/td-agent/apache.pos
</source>

<match apache.access>
        type s3
        aws_key_id xxxxxxxxxxxxxxxxxxxx
        aws_sec_key yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
        s3_bucket zzzzzzzzzzzzzz
        s3_endpoint xyzxyzxyz.amazonaws.com
        path logs/
        buffer_path /var/log/fluent/s3
        time_slice_format %Y%m%d/${hostname}-%H
        time_slice_wait 10m
        #flush_interval 5s
</match>

/etc/init.d/td-agent に 前述の tmpl ファイルをサーバーごとに書き換える処理をする。(. /etc/init.d/functions 直後に記載する)

sed -e "s/\${hostname}/`hostname`/g" /etc/td-agent/td-agent.conf.tmpl > /etc/td-agent/td-agent.conf

を td-agent を自動起動するように設定して、td-agent を起動する。

chkconfig td-agent on
/sbin/service td-agent start

ハマった点

  • source ディレクティブにてログの path が不適切だった
  • pos_file の設定が未設定だったので warning が /var/log/td-agent.log に出力されていた
  • s3_endpoint の設定が不適切だったので EC2 から S3 にアクセス出来ない
  • そもそも fluentd の S3 プラグインがインストールされていなかった

すったもんだがあったが...サイトに適当にアクセスして暫くすると下記の通り S3 に圧縮されたログが保存されている。
f:id:inokara:20130421164259p:plain