前置き
mackerel-plugin-fluentd を使うと,Fluentd のメトリクス(バッファサイズ/リトライカウントなど)を Mackerel のカスタムメトリックにポストすることができる.ログの流量が多い場合など,バッファサイズを監視できていると運用しやすいし,是非使っておきたいところ.
ちなみに Fluentd のメトリクスを取得するなら事前に monitor_agent を conf に含めておく必要がある.詳しくは Monitoring Fluentd | Fluentd に書いてある.
<source> @type monitor_agent bind 0.0.0.0 port 24220 </source>
plugin_id のデフォルト値は Ruby の object_id になる
普通に match ディレクティブを書いた状態でメトリクスを取得すると,以下のように plugin_id に object:3fedbb59bfa8
といった値が入る.これは Ruby の object_id で,Fluentd を再起動してしまうと,別の object_id になってしまう.
$ curl http://localhost:24220/api/plugins plugin_id:object:3fedbaffaae0 plugin_category:input type:monitor_agent output_plugin:false retry_count: plugin_id:object:3fedbaffac34 plugin_category:input type:forward output_plugin:false retry_count: plugin_id:object:3fedbaff8a88 plugin_category:input type:debug_agent output_plugin:false retry_count: plugin_id:object:3fedbb59bfa8 plugin_category:output type:aws-elasticsearch-service output_plugin:true buffer_queue_length:0 buffer_total_queued_size:0 retry_count:0 plugin_id:object:3fedbb579cdc plugin_category:output type:aws-elasticsearch-service output_plugin:true buffer_queue_length:0 buffer_total_queued_size:0 retry_count:0 plugin_id:object:3fedbaea404c plugin_category:output type:tdlog output_plugin:true buffer_queue_length:0 buffer_total_queued_size:0 retry_count:0 plugin_id:object:3fedbd16e1cc plugin_category:output type:stdout output_plugin:true retry_count:
この状態で Mackerel のカスタムメトリックを見ると,以下のようになる.object_id を見ても,具体的にどの Output Plugin なのか判別できないし,Fluentd を再起動してしまうと,メトリクスを継続的に監視できないし,これじゃ運用に耐えない.
match ディレクティブに @id
を指定する
公式ドキュメントを読んでいたら @id
という設定があることに気付き,探していたのはこれだ!!!となった.今まで知らなかった...!
Common plugin parameter @id: Specify plugin id. in_monitor_agent uses this value for plugin_id field http://docs.fluentd.org/articles/config-file
で,以下のように @id
に任意の名前を設定してあげるだけで良い.
<match nginx.error> @id out_nginx_error @type aws-elasticsearch-service (中略) </match>
この設定を適用してから Mackerel のカスタムメトリックを見ると,ちゃんと判別できるようになっていた.
(画像の例はシステムに関係するログの match ディレクティブだけに @id を指定しているので,まだ一部 object_id が残っているけど,実際に全てに設定すれば object_id は撲滅できる)
参考
@id
に気付いてから調べてみると,結構 @id
を紹介した記事が見つかった.うおー!
まとめ
タイトル通りだけど,mackerel-plugin-fluentd を使うなら @id
を指定して,plugin_id を識別できるようにしよう!