しばらくぶりに 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_head
を true
にすると初回はファイルの先頭から読んでくれます。
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_tag
をfalse
にすることで出力させないこともできます。include_time_key
,include_tag_key
をtrue
にすることでtime
とtag
を JSON に含められます - json
- JSON 出力ですが out_file で代用できそうな気もする。でも json って明示してある方がわかりやすいですね。
out_file
と違って1行がまるっと JSON なので Parse がより楽ちんですね。time や tag
を出力するにはinclude_time_key
,include_tag_key
をtrue
にする必要があります - 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 の名前はどちらもデフォルトが
message
でmessage_key
パラメータで指定可能です。
out_file の format はまだ GitHub の code を眺めただけで試してない。
out_file 関連では daemon モードでの umask 0
をなんとかしてほしいなぁ。
Fluentd も Ansible みたいにドキュメントが code に入ってると嬉しいなぁと思いました。
「このオプションはバージョンxxで追加されました」とか入っているし、ansible-doc
コマンドも便利ですよね。それでも Ansible も code 読まないとわからないことも沢山あるけど。