👻

mackerel-plugin-fluentd-monitor を作った

2020/10/01に公開

mackerel-plugin-fluentd-monitorを作りました。

https://github.com/najeira/mackerel-plugin-fluentd-monitor

背景

Fluentdのoutputプラグインはバッファを持っており、inputから受け取ったデータを保持しています。このデータは設定された間隔や量に達することなどで送信されます。

設定がよくなかったり、あるいはoutput先への送信が失敗したりすると、このバッファはどんどん溜まることになります。

そこで、バッファの状態をモニタリングできると便利です。

使い方

Build

GitHubからソースを取得し、go buildしてください。
現時点ではリポジトリにはリリース用のバイナリは用意していません。

Fluentd

monitor_agentを有効にします。

<source>
  type monitor_agent
  bind 0.0.0.0
  port 24220
</source>

outputのプラグインにidを設定します。

<match *>
  id    your_plugin_id
  type  forward
  ...
</match>

mackerel-plugin-fluentd-monitor は「outputプラグインである」かつ「idが設定されている」という両方の条件を満たすプラグインのメトリックをMackerelに送信するようになっています。

よって、監視したいプラグインにはidを設定する必要があります。

Mackerel

mackerel-agent.conf への記述例:

[plugin.metrics.fluentd-monitor]
command = "/usr/local/bin/mackerel-plugin-fluentd-monitor"

mkrを使ってサービスメトリックに登録する例:

/usr/local/bin/mackerel-plugin-fluentd-monitor | /usr/local/bin/mkr throw -service=yourservice

これをシェルスクリプトにしてcronに設定するなど。

解説

monitor_agent

Fluentdはmonitor_agentというプラグインを内蔵しています。
http://docs.fluentd.org/articles/monitoring

以下の例のように、バッファに関連する buffer_queue_length, buffer_total_queued_size, retry_count といった値を取得することが出来ます。

{
  "plugins":[
    {
      "plugin_id":"your_plugin_id",
      "type":"forward",
      "output_plugin":true,
      "buffer_queue_length":27746,
      "buffer_total_queued_size":1,
      "retry_count":0,
      "config":{ ... }
    },
    ...
]

設定の詳細はfluentdのドキュメントを読んでください。

本プラグインは上記のJSONを取得したあと、Mackerelに送信できる以下の形式を出力します。

fluentd.buffer.retry.your_plugin_id	0	1436424545
fluentd.buffer.queue.your_plugin_id	1	1436424545
fluentd.buffer.size.your_plugin_id	27746	1436424545

この記事はQiitaの記事をエクスポートしたものです

Discussion