s3にログを吐くとき、ホスト名をパスに含めたいときがありました。
今までは、ホスト名をtd-agent.confにベタがきしていました。
しかし、ホスト名が違うサーバごとにtd-agent.confを書き換えるのが面倒です。
そこで、楽な方法を探してみました。
結果としては、pathに以下のように書きました。
%{hostname}/<パス>
具体的に、やっていきます。
環境構築
FluentdでS3にログを収集してみる、こちらの手順がわかりやすいです。
td-agent.confの編集
ホスト名をベタがきするパターン
<source>
type tail
path /var/log/messages
pos_file /var/log/messages.pos
format none
tag sys.system.messages
</source>
<match sys.system.messages>
type s3
s3_bucket <バケット名>
s3_region ap-northeast-1
path server1/logs/ #「server1」ベタがきしている
buffer_path /var/log/fluent/s3/messages
time_slice_format %Y%m%d/messages
time_slice_wait 10m
flush_interval 60s
</match>
こちらの方法だと、同一のログを取得する場合でも、confの書き換えが必要になります
%{hostname}とするパターン
<source>
type tail
path /var/log/messages
pos_file /var/log/messages.pos
format none
tag sys.system.messages
</source>
<match sys.system.messages>
type s3
s3_bucket <バケット名>
s3_region ap-northeast-1
path %{hostname}/logs/ #%{hostname}にしている
buffer_path /var/log/fluent/s3/messages
time_slice_format %Y%m%d/messages
time_slice_wait 10m
flush_interval 60s
</match>
まとめ
初fluentdで手間取ったので、書いてみました。
同じところで、悩んでる人の参考になれば嬉しいです。