Go ahead!

Memoization for Everything

Release fluent-plugin-multi-format-parser

| Comments

fluent-plugin-multi-format-parser

一つのログファイルの中に複数のフォーマットがある時に利用可能なパーサプラグイン書きました.

使い方

fluent-gemでインストール.

1
$ fluent-gem install fluent-plugin-multi-format-parser

インストールすると,TextParserを利用しているin_tailin_udpなどでmulti_formatが使えるようになります. そこで<pattern>を複数並べてください.<pattern>内の各設定は,利用するパーサにそのまま渡されます.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<source>
  type udp
  tag logs.multi

  format multi_format
  <pattern>
    format apache
  </pattern>
  <pattern>
    format json
  </pattern>
  <pattern>
    format none
  </pattern>
</match>

<pattern>を上から順番に試し,パース出来たらその結果を返します.上の設定例だと,最初にapache,次にjson,最後にnoneになります. たとえば,以下のようなログ群をin_udpに流すと

192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777
{"k1":"v", "k2":123456}
foobar

以下のように処理されます.

2013-02-28 12:00:00 +0900 test.**: {"host":"192.168.0.1","user":"-","method":"GET","path":"/","code":"200","size":"777"}
2014-07-13 20:56:55 +0900 test.**: {"k":"v","k1":123456}
2014-07-13 20:56:55 +0900 test.**: {"message":"foobar"}

まとめ

ログファイルの中に複数のフォーマットが混じるのは望ましいことではないのですが,どうしてもそういう状況が起きるときには,使ってみてください.

あと,実装はかなり単純なので,パーサプラグインのサンプルにでもしてもらえればと思います.

何か要望があればissue/pull requestに投げてもらえれば対応します.

Comments