fluentd > 複数行のログを処理する方法

更新日 2014-09-07
広告
通常、fluentdは、ログファイルを一行ずづ処理します。 しかし、複数行をまとめて処理したい場合があります。

PostgreSQLの例

PostgreSQLで、実行されたクエリをログ出力すると、以下のように、複数行で出力されます。
2014-04-10 10:30:00 JST LOG:  statement: SELECT d.datname as "Name",
	       pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
                   (中略)
	       pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
	FROM pg_catalog.pg_database d
	ORDER BY 1;
これを、1つのログとみなしてfluentdで処理するには、専用のプラグインが必要です。
$ sudo /usr/lib/fluent/ruby/bin/fluent-gem install fluent-plugin-tail-multiline
fluentdの設定は、例えば、以下のようにします。
<source>
   type tail_multiline
   tag postgres.multi.log
   path /var/log/postgresql.log
   format /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) (.*)$/
   time_format %Y-%m-%d %H:%M:%S
</source>
ちなみに、以下の方法でプラグインをインストールしても、fluentd (td-agent)に認識されませんでした。
$ sudo gem install fluent-plugin-tail-multiline
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system