たごもりすメモ

コードとかその他の話とか。

fluent-plugin-parser released!

Fluentd上に流れる任意のフィールドをparseするための out_parser および任意のフィールドを結合するための out_deparser を含むプラグイン fluent-plugin-parser v0.1.0 をリリースしました。

tagomoris/fluent-plugin-parser · GitHub
fluent-plugin-parser | RubyGems.org | your community gem host

out_parser

これにより「アプリケーションログが投げられてくるんだけど、このフィールドが微妙に複数の情報を結合した文字列になってて惜しい!!!!」みたいなケースについて、そいつを分解してそれぞれのフィールドに収める、というようなことができるようになります。

また in_tail が使っているのと同じ Fluent::TextParser をそのまま使っているので、フォーマットとして 'apache' を設定することで Apache combined をそのままparseすることもできます。このため fluent-agent-lite が拾って送ってきたログメッセージを、一方では生ログとしてそのまま保存し、一方ではこいつでparseしてあれこれの解析に役立てる、といったような使いかたができるようになります。

parseするのに out_exec_filter を通さなくてよくなるので、単純なparseしか要求しないようなケースでは便利に使えるんじゃないでしょうか。

out_deparser

out_parser と対称の役割をするプラグインも作っておきたいな、というアイデア先行的な感はあります。ただし、以下のようなケースで便利かもしれません。

  • いくつかのサービスで Apache は似たような情報をログに書き出してるんだけど、微妙にフィールドの順番が違う!
  • のを、まとめてどこかに生ログとして書き出しておきたい!

こんなケースで、parse はin_tailなりout_parserなりでそれぞれのフォーマットでやっておきます。で、その構造化されたデータを相手に out_deparser で統一された順序で整列させてやってディスクに書く、そうするとフィールド順序の違う複数のホストから集めたログ(生ログ)で、しかもフィールド順序を揃えられた! やった! みたいな嬉しいことが、もしかしたらあるかもしれません。

ちなみに 昨日の4/1エントリ で公開した fluent-plugin-deparser はyankして、こちらに統合しました。実は 'tag april.fool' すると同じ動作が再現できます*1

*1:いらない……