fluentd使っていて、入力データの特定フィールドの値をごにょごにょして出力したい(次の工程に渡したい)っていう需要がありました。それでどうやるんだろうとググっていたら filter_record_transformer というプラグインが使えそうだ、ということで使ってみました。fluentdバージョンは 0.12.x です。
record_transformer Filter Plugin | Fluentd
fluentd に内包されているのでプラグインのインストールは必要ありません😄
書き方はこのようになります。 <record> ディレクティブの中にフィールド名とその値を書きます。NEW_FIELD と言っていますが、入力に同名のフィールドがあればその値が NEW_VALUE にマップされる動作になっています。
<filter foo.bar>
@type record_transformer
<record>
NEW_FIELD NEW_VALUE
</record>
</filter>
また enable_ruby というオプションを有効にすると Ruby 式の評価結果を値にできるようです。計算処理や文字列操作なんかで使えそうな感じですね。便利。
自分のやりたかったこととしては、以下のように値に含まれる特定の文字列を取り除きたかったので、 gsub メソッドを使いました。
<filter foo.bar>
@type record_transformer
enable_ruby
<record>
hoge ${record["hoge"].gsub("P-", "")}
</record>
</filter>
{"hoge":"P-1234A567890"}
このような入力があると、出力は以下になります。map関数を適用した感じになって便利だなあと思ったのでした。
{"hoge":"1234A567890"}