Fluentd (td-agent) で日時フォーマット (datetime) を変更する方法
もし Fluentd (td-agent) で列値の日時フォーマット (datetime) を変更する必要がある場合、"record_transformer" プラグインを使います。このプラグインは td-agent3 では既にインストールされています。ここでは "2017-12-19 16:09:31" というフォーマットを "2017-12-19T16:09:31+09:00" という ISO 8601 形式のフォーマットに変更します。私の知る限り、いくつかの NoSQL データベース等は ISO 8601 形式の日時フォーマットしか解釈できないものもあるようです。もし ISO 8601 形式と異なる日時情報がログファイルなどにある場合には、ここで紹介する方法で変換しておくと良いでしょう。
Fluentd (td-agent) で任意の日時フォーマットを ISO 8601 形式に変換する
Fluentd (td-agent) の中では Ruby 言語を利用することが出来ますので、Ruby 言語を使って日時情報を ISO 8601 形式に変換してみましょう。以下の設定では、"datetime_received" という列値を ISO 8601 形式に変換します。Ruby 言語には "iso8601" というメソッド(関数)がありますので、その関数を呼び出します。その結果として日時データを ISO 8601 形式に簡単に変更することが出来ます。
<filter tail_ex.linelog> @type record_transformer enable_ruby true auto_typecast true <record> datetime_received ${require 'time'; Time.parse(record["datetime_received"].to_s).iso8601.to_s} </record> </filter>
以下のような日時情報が与えられた場合、
[Before convert] "2017-12-19 16:09:31"
次のように ISO 8601 形式の日付データを得ることが出来ます。
[After converted] "2017-12-19T16:09:31+09:00"