Fluetdでタグを動的に変更してやる

23日目は私@Altsencturelyが担当させていただきます。

 

さて, 今回はタイトル通りFluentdのタグを動的に変更する方法を紹介します。
この方法, なんとプラグインを使うだけで自分で何かを作る必要は全くありません。
既存のもののみで変更可能です!!
実際どの場面で使うのかはわかりませんが(笑)
準備するプラグインは以下のとおりです

 

このプラグインをインストールしておきます
# gem install fluent-plugin-record-reformaer fluent-plugin-rewrite-tag-filter
あとはtd-agentのconfigに設定を書くだけ
<match tagA>
  type type record_reformer
  output_tag temp_rewrite

  newtag hogehoge.log
</match>

<match temp_rewrite>
  type rewrite_tag_filter
  rewriterule1 newtag hogehoge rewrited_tag
</match>

<match rewrited_tag>
  type file
  path /var/log/td-agent/test.log
</match>
こんなかんじで書きます
上から[tagA]でマッチしたらデータにというを追加します
それを2つ目のmatchでヒットさせてrewrited_tagというタグ名で再度emitします
あとは書き換え先のtagでやりたいことをやるというかんじです

 

これを応用するとタグの記号を他のものに代用させることが出来ます。
例えば, Redshiftのpuginを使用するとして, tag名とテーブル名で対応させたいときってあると思います。
もしtagに[/, .]等が入っている場合Redshiftにそのままテーブル名として使うことが出来ません。
そこでそれらの記号を[_]で書き換えたいと思います。
先ほど使用したpluginと合わせてもう一つ次のpluginを使います
configは次のとおりです。
<match tagA>
  type type record_reformer
  output_tag rw_first

  newtag hogehoge.log
</match>

<match rw_first>
  type rewrite
  add_prefix rw_second
  <rule>
    key     newtag
    pattern (\.|\/)$
    replace _
  </rule>
</match>

<match rw_second>
  type rewrite_tag_filter
  rewriterule1 newtag hogehoge rewrited_tag
</match>

<match rewrited_tag>
  type forest
  subtype redshift
  <template>
    table_name ${tag}
  </template>
</match>
こうすることで動的にタグ名からテーブル名を作ることが出来ます
Fluentdはpluginも多く組み合わせるとかなりなんでも出来ます
みなさんも色々試してみてください