下記は、https://github.com/fluent/fluentd/pull/775 で2016/01/18にマージされたました!
Fluentd Advent Calendar 2015 - Qiita の10日目がまだ空いていたので、入れさせてもらいました!
今、in_tailに関して下記PRを出させてもらっています。
fluentd v0.12.18 が出ましたが、これはまだ取り込まれていません(想定内)。
な状況です。
in_tailのmultilineモードでは、Fluentdのin_tailプラグインで複数行のログをよむ方法 - Boost Your Programming! で説明されているように
つまり、メッセージがログに出力されてもすぐにそのログがFluentdのメッセージとして送信されるわけではなく、次のログが出てくるまで遅延することになります。
という問題があります。
頻繁にログが流れるような状況であると問題にはならないのですが、ログをfluentdでとりあえず集めているとそんなに頻繁に出力されるないようなログも対象としいたりして、その際にmultilineで取り込んでいるとこの仕様では困ることがあります。
そこで、上記PRを出している感じです。
とりあえず、同じことができるものを in_tail_multiex.rb · GitHub に起きました。
これを /etc/td-agent/plugin 配下に置いて conf に
<source> type tail_multiex path /path/to/logfile tag my.tag pos_file /var/log/td-agent/my.log.pos format multiline format_firstline /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d / format1 /^(?<time>\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d) (?<message>.*)$/ multiline_flush_interval 1s </source>
のようにmultiline_flush_interval
を指定してもらえればよいです。この指定した期間、ログに出力がないと、fluentdのメッセージとして送信されます。
問題や、コメントなどありましたら、上記PRなり、そもそもの issue
などにご意見をいただければ幸いです。
実際問題としてはとりあえず、gistにあげたような独自プラグインで当面のニーズは満たしていますが、本体に取り込まれるとより嬉しいかな、ということで。