Fluentdのレコードにホスト名を付与する最良の方法
Fluentdでログを集める時にそのサーバのホスト名(hostname)をレコードに追加したい。 そういう時に便利な設定サンプルを紹介します。
ユースケース
Filterを用いた手法(オススメ)
td-agent2環境(fluentd v0.12以降のバージョン)を利用していれば、Filterプラグインが使えます。
手間の掛かるタグ書き換えは必要ありません。
次の方法が標準付属のプラグインで実現できるため、最もシンプルです。
<source> @type forward </source> <filter debug.*> @type record_transformer <record> host ${hostname} </record> </filter> # @type forwardなど、どこに送りたいか適宜指定する <match debug.*> @type stdout </match>
動作サンプル
$ echo '{"message":"test"}' | /opt/td-agent/embedded/bin/fluent-cat debug.test $ tail -1 /var/log/td-agent/td-agent.log 2015-10-09 17:03:59 +0900 debug.test: {"message":"test","host":"tk2-***-***.vs.sakura.ne.jp"}
タグ書き換えを伴う手法
どのバージョンのFluentdでも利用できます。 但しプラグインの事前インストールが必要です。
# プラグインのインストール(td-agent1) $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-record-reformer # プラグインのインストール(td-agent2) $ sudo /usr/sbin/td-agent-gem install fluent-plugin-record-reformer
td-agent1環境(fluentd v0.10系のバージョン)向けの設定例
<match record_reformer.debug.*> type record_reformer output_tag stdout.${tag_suffix[1]} <record> hostname ${hostname} </record> </match> # type forwardなど、どこに送りたいか適宜指定する <match stdout.debug.*> type stdout </match>
td-agent2環境(fluentd v0.12以降のバージョン)向けの設定例
<match record_reformer.debug.*> @type record_reformer output_tag stdout.${tag_suffix[1]} <record> hostname ${hostname} </record> </match> # @type forwardなど、どこに送りたいか適宜指定する <match stdout.debug.*> @type stdout </match>
output_tagのプレースホルダの書き方についてはプラグインのREADMEが参考になります。
https://github.com/sonots/fluent-plugin-record-reformer#placeholders
forward_with_hostname というプラグインを使う手法
どのバージョンのFluentdでも利用できます。
若干トリッキーですが、標準のout_forwardプラグインをオーバーライドしたものです。
そちらを /etc/td-agent/plugin/out_forward_with_hostname.rb
に配置して利用します。
参考: http://qiita.com/catatsuy/items/6755a796423067a77acd
hostname プラグインを使う方法
タグ書き換えがadd_prefixのみですが、こういったものもあるようです。 http://fukata.org/2013/05/16/release-fluent-plugin-hostname-v0-0-2/
その他
tailプラグインで取り込む時にタグにホスト名を付与し、そのまま使う方法もあります。 http://www.fluentd.org/guides/recipes/apache-add-hostname