fluentdとrewrite-tag-filterプラグインで任意のmongoDBコレクションにログを保存

fluentdでログの内容によって保存先のmongoDBコレクションを変えたくなったので調べてみた。

  • mongoプラグインにはタグをコレクション名とするtag_mappedオプションがある
  • rewrite-tag-filterプラグインはログ内容によってタグを変更できる

求めているものはまさしくこれ。

fluent.confに以下の設定を行う。

<source>
  type forward
  id forward_input
</source>

<match myapp>
  type rewrite_tag_filter
  rewriterule1 col ^(.+)$ mongo.$1
</match>

<match mongo.**>
  type mongo
  host localhost
  port 27017
  database AppLog
  tag_mapped
  remove_tag_prefix mongo
</match>

colキーで指定した値をコレクション名とするようにした。fluent-catコマンドでログを送ってみる…

$ echo '{"a": 1,"b": 2,"col":"Hoge"}' | fluent-cat myapp 

fluentdはデータをバッファするので、しばらく待った後にmongoDBをfindしてみると…、

$ mongo AppLog
MongoDB shell version: 2.4.12
connecting to: AppLog
> db.Hoge.find();
{ "_id" : ObjectId("54fc3d37bb54fe1669000002"), "a" : 1, "b" : 2, "col" : "Hoge", "time" : ISODate("2015-03-08T12:13:58Z") }

Hogeコレクションに入った!