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"}