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にそのままテーブル名として使うことが出来ません。
そこでそれらの記号を[_]で書き換えたいと思います。
例えば, 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も多く組み合わせるとかなりなんでも出来ます
みなさんも色々試してみてください