このプラグインではtd-agentのmonitor_agentを使ってtd-agentのbufferを監視します。
事前準備
blackbird-td-agentを入れる前にmonitor_agent
の準備をしておきましょう。
Fluentd monitor_agent
monitor_agent
はfluentdのpluginでbufferの状態をHTTPで取得できるようになるものです。defaultでinstallされているので特にgemを新規にインストールする必要はありません。
<source>
type monitor_agent
bind 0.0.0.0
port 24220
</source>
上記のようにconfigを書いてfluentdを再起動すれば、monitor_agent
が有効になります。monitor_agent
のエンドポイントはhttp://localhost:24220/api/plugins.json
です。このURLに対してGETするとbufferのbyte sizeやbuffer queueのlengthが取得でき、blackbird-td-agent pluginではこの値をparseして値を取得しています。
Architecture
monitor_agent
はその特性上、複数のoutputプラグインが存在すれば複数のjson outputが存在します。そこで、zabbixのLaw Level Discovery Itemを使って動的にアイテムを増やしたり減らしたりすることにしました。
output系のpluginで且つ、json内にbuffer_queue_length
が存在している場合にzabbixのtemplateにひもづくHOSTに対して対象のアイテムをふやしていきます。アイテムの名前には、plugin_id
が割り振られます。(plugin_idは各プラグインに対して固有のpluginが割り振られるもので、{"plugin_id": "object:XXXXXXXXXX"}
のような形式のjsonがoutputされるものです。)
Zabbix Template
Items(Normal)
通常のアイテムは以下のものが取得できます
- fluentd Processが使用しているmemory量
- fluentdのProcess数
Law Level Discovery Items(Dynamic)
Law Level Discoveryで動的に変化するアイテムは以下の通り
- buffer queue accumulate rate
- queue内のアイテムの使用率で
現在のqueue length ÷ configに指定したbuffer_queue_limit
で算出されます
- queue内のアイテムの使用率で
- buffer queue bytes
-
http://MONITOR_AGENT_HOST:24420/api/plugins.json
からbuffer_total_queued_size
の値を抽出
-
- buffer queue length
-
http://MONITOR_AGENT_HOST:24420/api/plugins.json
からbuffer_queue_length
の値を抽出
-
- current retry count
- 外部ソースにoutputできなくてretryしている回数
-
http://MONITOR_AGENT_HOST:24420/api/plugins.json
からretry_count
の値を抽出
- buffer queue increase amount of buffer queue bytes per-seconds
- queueにつまれるアイテムのbyte数の秒間増加量、増加量の差分値を取得間隔(blackbird config内のinterval)で割ったもので算出
- buffer queue increase amount of buffer queue length per-seconds
- 上とおんなじっす(こっちはqueueにつまれるアイテムの量、queue_lengthの増加量)
- buffer queue buffer_queue_limit
- fluentdのconfigに設定されたbuffer_queue_limitの値
Triggers
Triggerとしては以下のものを実装しています
- fluentd プロセスがいない
-
retry_count
が一定回数以上- 一定回数はMacroで指定できます。defualtは1
- queueのたまってる率が一定数以上
- Info, Average, Highの三段階でそれぞれMacroで指定できます。
Graphs
- buffer queue bytes
- buffer queue length
- buffer queue increase amount of buffer queue bytes per-seconds
- buffer queue increase amount of buffer queue length per-seconds
の値をそれぞれ、単一のグラフにしたものです。
fluentdってqueueたまってきてやばいとか、送り先がおかしくて送信できないって時に他のホストORミドルウェアの監視と合わせた複合監視になったり、そもそもretry_count検知するにはlog監視するしかなかったりして、監視するのが微妙に難しかったり、難しいせいでめんどくせーから後でいいやみたいなのになりがちな気がしますw
monitor_agentでfluentd自体をしっかり監視ですね。