LoginSignup
1

More than 5 years have passed since last update.

posted at

[blackbird-td-agent] Monitoring td-agent

このプラグインでは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で算出されます
  • 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自体をしっかり監視ですね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1