fluentd / td-agent がいろいろ便利になってた

しばらくぶりに fluentd / td-agent 案件の対応をしたら、いろいろ機能追加されてたりして便利になっていたのでメモ。(2014/7/19 出力フォーマット指定のところに追記しました)

td-agent 1.1.18 で rewrite-tag-filter が同梱されるようになった

これまで追加で

$ sudo fluent-gem install fluent-plugin-rewrite-tag-filter

してたけど不要になりました。install しようと思って実行したらもう入ってるよって言われた…

td-agent 1.1.19 で tail-ex が不要になった

td-agent 1.1.19 で fluentd v0.10.45 となったので tail-ex の merge が反映されました。

Release 0.10.45 – 2014/03/28

  • in_tail: Merge in_tail_ex and in_tail_multiline features

in_tail の path におもむろに strftime の%記号を入れてあげれば動作します。
read_from_headtrue にすると初回はファイルの先頭から読んでくれます。

td-agent 1.1.20 で out_file が format 指定可能になった

fluentd v0.10.49 で out_file が TextFormatter を使って出力フォーマットを指定できるようになりました。

  • out_file: Add format option to support various output data format

format で指定可能なのはいまのところ

out_file
これまで通りのフォーマットです。time, tag の出力を停止することも可能で、json に含めることも可能。デフォルトでは TIME<TAB>TAG<TAB>JSON となりますが output_time, output_tagfalse にすることで出力させないこともできます。include_time_key, include_tag_keytrue にすることで timetag を JSON に含められます
json
JSON 出力ですが out_file で代用できそうな気もする。でも json って明示してある方がわかりやすいですね。out_file と違って1行がまるっと JSON なので Parse がより楽ちんですね。time や tag を出力するには include_time_key, include_tag_keytrue にする必要があります
ltsv
LTSV で書き出せます。include_tag_key, tag_key, include_time_key, time_key オプションで tag と time を含めるようにも指定できます。time は出力のフォーマットを指定可能です。


  type tail
  path /path/to/ltsv_log.%Y%m%d
  time_format %Y-%m-%d %H:%M:%S
  tag ltsv.test
  format ltsv
  time_key time



  type file
  path /apps/tmp/ltsv_test_file
  format ltsv
  include_time_key true
  time_format %Y-%m-%dT%H:%M:%S%z

このようにすることで、LTSV を LTSV のまま書き出すことができます。次の single_value と違い、各項目でフィルタリングやルーティングが行いやすいですね

single_value
fluent-plugin-file-alternative の代わりに使えるようです。in_tail で format none として読みだしたデータを書き出すのに適しています。ログファイルの1行1行をそのまま集めたい場合ですね


  type tail
  path /path/to/log.%Y%m%d
  format none
  #message_key message
  tag test.access



  type file
  file /path/to/out_file
  format single_value
  #message_key message

key の名前はどちらもデフォルトが messagemessage_key パラメータで指定可能です。

out_file の format はまだ GitHub の code を眺めただけで試してない。

out_file 関連では daemon モードでの umask 0 をなんとかしてほしいなぁ。

Fluentd も Ansible みたいにドキュメントが code に入ってると嬉しいなぁと思いました。
「このオプションはバージョンxxで追加されました」とか入っているし、ansible-doc コマンドも便利ですよね。それでも Ansible も code 読まないとわからないことも沢山あるけど。