ログをS3に保存する際にサーバーのIP毎に管理する方法
こういうことがしたい!
S3 Bucket / logs / 20140707 / [サーバーA] / access.log
S3 Bucket / logs / 20140707 / [サーバーB] / access.log
S3 Bucket / logs / 20140707 / [サーバーC] / access.log
fluentdでログをS3に流していますが、frontサーバーにオートスケールを設定していると、サーバー毎の設定を動的に行う必要があります。
そこで、td-agentが起動されるタイミングで、設定ファイルを動的に生成する方式を採ってみました。
まずは動的に生成する基となる設定ファイルを用意します。
$ vim /etc/td-agent/td-agent.conf.tpl # ad access log <source> type tail format json path XXXXXXXXXXXXX pos_file /var/log/td-agent/access.pos tag xxx.access </source> # S3 Output <match xxx.access> type copy <store> type s3 aws_key_id YYYYYYYYYY aws_sec_key ZZZZZZZZZZZZ s3_bucket AAAAAAAAAAA s3_endpoint s3-ap-northeast-1.amazonaws.com path logs # S3に格納するディレクトリ先 buffer_path /var/log/fluent/s3/deliver # S3にflushするまでのbufferファイル格納先 buffer_chunk_limit 1g #リミット値を変更 time_slice_format %Y%m%d/${hostname}/%H/%M #分単位でファイル作成 time_slice_wait 1m # flushまでの待ち時間 flush_interval 30s #これを書くと、timesliceを無視して指定したインターバルごとにs3にflushされる。 </store> </match>
こんな感じに。
${hostname} に動的にサーバーのローカルIPが入ればOKです。
続いて、td-agentの起動スクリプトに以下を追加します。
$ vim /etc/init.d/td-agent sed -e "s/\${hostname}/`hostname`/g" /etc/td-agent/td-agent.conf.tpl > /etc/td-agent/td-agent.conf
これで起動するタイミングで、設定ファイルに動的にIPを取得、置換して生成することができます。