LoginSignup
15
15

More than 5 years have passed since last update.

fluentd+elasticsearchの構成でミリ秒単位のタイムスタンプを有効にする方法

Last updated at Posted at 2014-11-17

以下は2014年末での情報です。fluentd-0.12.xでの利用方法については追記2をご確認ください。

背景

Fluentd+Elasticsearch+Kibanaの構成でミリ秒単位のタイムスタンプを扱いたい。

fluentd

内部でレコードに対して付与されるtimeはunixtimeである。
そのため、ミリ秒単位でのタイムスタンプを標準でサポートしていない。
(内部データをfloatにする方法が検討されているらしい。)

fluent-plugin-elasticsearch

  • fluentdの内部で渡されるtimeを@timestampに変換してelasticsearchへ渡している。
  • レコードに@timestampが予め用意されている場合はそれをelasticsearchへ投げる。
  • この段階で@timestampがミリ秒のデータを含み、適切なフォーマット"%Y-%m-%dT%H:%M:%S.%L%z"の場合、elasticsearchに適切な状態で保存されKibanaで取り扱い可能となる。

実装

以下の二つの方法を用意した。

  1. fluent-plugin-elasticsearchの修正版(フォーク) https://github.com/shivaken/fluent-plugin-elasticsearch
  2. fluentd用フィルタプラグイン https://github.com/shivaken/fluent-plugin-better-timestamp

1はmsecをレコードに用意するだけで動作する。
2はフィルタなので以下の様な設定を追加する必要がある。

 <source>
  type tail
  format
  format /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).(?<msec>\d{3}) .....
  ...
  tag log
 </source>
 <match log>
  type better_timestamp
  tag log.with_msec
 </match>
 <match tag log.with_msec>
  type elasticsearch
  ...
 </match

1をgit経由で利用するか2のgemをインストールしてフィルタを一段追加するかは事情に合わせて選ぶのが吉。

1については別途issueを通じて本体へのマージを目指してます。
issueで意見言ってからプルリク出したほうがいいのかな。。

追記: プルリクエスト出しました。
https://github.com/uken/fluent-plugin-elasticsearch/pull/82

追記2: fluentd 0.12.xでの設定方法について出てました。
https://github.com/uken/fluent-plugin-elasticsearch/issues/39#issuecomment-171642223

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15