zabbix discoverer processes more than 75% busy
Zabbixを導入したはいいんですが、こんなエラーが頻発しています。
前回の投稿で「調べたい!」と言っていたのが実はこれです。
Zabbixのログに関するあれこれ | Linuxサーバより愛をこめて
「軽度の障害」と表示されていますが、1時間ごとに発生して数分でおさまりまた1時間経過すると現れて…と同じサイクルで発生しているようですので原因を調べるとともに対策を打ちます。
Discoverer Processとは?
使い始めたばかりで勝手がよくわからないんですが、まずは「Discoverer Process」について調査します。
これはZabbixの機能の一つであるディスカバリを司るプロセスのようです。
大まかに言えば「ネットワーク内のホストやサービスを監視し、新しい対象を探す」といったところでしょうか。
設定→ディスカバリを見るとデフォルトで1件のディスカバリが登録されており1時間毎に指定範囲のIPで検索を掛けているのが判ります。
膨大なログから必要な情報を抽出
前回設定変更したことで最大1GBまで膨れ上がるログファイル。中を見ると秒単位で処理が行われているのが全て記録されているため、とても目で見て必要な情報を探すのは無理。というか面倒。
なので必要な情報だけを抽出してみます。
※ログの抽出に必要なDiscoverer ProcessesのPIDを調べる # ps -ef | grep zabbix_server zabbix 2941 2921 0 ~ ※「discoverer #1」の行のPID(左から2番目、上の場合2941)を使ってログから抽出 # grep " 2941: " /var/log/zebbix-server/zabbix_server.log
出てきたログを眺めてみるとディスカバリに登録されたIPを順番に検索していく様子がつぶさに見て取れます。
警告が出た時間とその時の処理内容
抽出したログと警告の発生時刻を照らし合わせて見てみるのですが、別段変わったログは出力されていない様子。
ということは処理を続けているうちに自然と負荷が掛かってエラーが出ているだけ?
ここで手詰まりとなり色々ググってみますが有効な情報には巡り合えず。
一番知りたい「なぜこうなるのか?」という記事には出会えませんでした。
とりあえずの回避策
原因は分からないものの対策は見つけることができました。
予めフォークしておくDiscoverer Processesを増やして1つ当たりの負荷を下げればOKという対症療法的なものではありますが、ひとまず実施してエラーを止めます。
# vi /etc/zabbix/zabbix_server.conf ↓追記 StartDiscoverers = 3 「:wq」で保存して終了 ※Zabbixを再起動 # service zabbix-server restart
Zabbix Discoverer Processesに関するまとめ
一夜明けて確認すると、あれだけ定期的に出ていたエラー警告が見事に止まっておりました。
原因が分からないのはなんとも気持ち悪いのですが、今回の処理内容を纏めておきます。
- ネットワーク内の新しいホスト・サービスを探すディスカバリ
- 定刻にディスカバリ関係のプロセスで負荷が増加している様子
- プリフォークしておくプロセスを増やす。StartDiscoverers=3へ変更。
- 原因は不明…
個人的には原因が一番知りたいのですが…。今の自分のスキルではとても解明できそうにありません。またいつかチャレンジしてみたいと思っております。