読者です 読者をやめる 読者になる 読者になる

kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

fluentdのプルリク#696へのフィードバックを求めています

下記は、https://github.com/fluent/fluentd/pull/775 で2016/01/18にマージされたました!


Fluentd Advent Calendar 2015 - Qiita の10日目がまだ空いていたので、入れさせてもらいました!

今、in_tailに関して下記PRを出させてもらっています。

github.com

fluentd v0.12.18 が出ましたが、これはまだ取り込まれていません(想定内)。

f:id:kikumoto:20151210231949p:plain

な状況です。

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

github.com

などにご意見をいただければ幸いです。

実際問題としてはとりあえず、gistにあげたような独自プラグインで当面のニーズは満たしていますが、本体に取り込まれるとより嬉しいかな、ということで。