Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

fluentd の filter_record_transformer プラグイン便利っぽい

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