Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

Fluentdのレコードにホスト名を付与する最良の方法

Fluentdでログを集める時にそのサーバのホスト名(hostname)をレコードに追加したい。 そういう時に便利な設定サンプルを紹介します。

ユースケース

  • tailプラグインで収集したApacheのエラーログに、ホスト情報を付与する
  • その他、ございましたら教えてください

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