ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

fluentdでltsvのログを出力したい

メモ

普通のパターン

各エージェントから送られてきたログを単純に集約してコレクター側でファイルに吐くのであればコレで十分なはずです。

エージェント側

<source>
  type        tail
  tag         http.access
  path        /var/log/nginx/access.log
  pos_file    /var/log/td-agent/nginx.access.log.pos
  format      none
</source>

<match *.**>
  type               forward
  <server>
    name   active
    host   log.local
    port   24224
  </server>
</match>

コレクター側

<source>
  type forward
  port 24224
  bind 0.0.0.0
</source>

<match http.access>
  type file_alternative
  output_include_time false
  output_include_tag false
  path /var/log/td-agent/http/access.*.log
  symlink_path /var/log/td-agent/http/access.log
</match>

コレクター側でごにょごにょしたいとき

以下の例では何もしてないですが、recordの中身を見てファイル振り分けたいときとかrecordの中身を書き換えたいときとかのパターンです。

エージェント側は同じ

コレクター側

output_data_typeがltsvのとき、timeとtagは別扱いで、recordの部分しかltsvの形式になってくれないので、record_reformerでrecordの中にtimeを包含させてしまって、timeとtagをfile_alternativeで出力しないようにしてます。

output_include_time false、 output_include_tag falseしてあげてrecordのみ出力するようにしているのがミソです。

<source>
  type forward
  port 24224
  bind 0.0.0.0
</source>

<match http.access>
  type            parser
  add_prefix      parsed
  format          ltsv
  key_name        message
</match>

<match parsed.http.access>
  type              record_reformer
  renew_record      false
  tag               local_store.http.access
  <record>
    time            ${time}
  </record>
</match>

<match local_store.http.access>
  type               file_alternative
  path /var/log/td-agent/http/access.*.log
  symlink_path /var/log/td-agent/http/access.log
  output_include_time false
  output_include_tag  false
  output_data_type    ltsv
</match>

plugin書けば良いという話もありますが、もう少しすっきり書きたいところ。