インフラ

[fluentd]s3にログを出力するとき、パスにホスト名を含める(プラグイン不要)

fluentd

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で手間取ったので、書いてみました。
同じところで、悩んでる人の参考になれば嬉しいです。