Zabbix busy alerter processes, in %が100%にはりついてアクション実行が遅延する(Zabbix alerter processes more than 75% busy)

いつもお世話になっております。

【環境】CentOS6.6
     zabbix 2.4.3

他のシステムからzabbix_senderで障害ログを受信した場合、他のzabbixサーバにzabbix_senderにて単純にログの
転送(受信したログをそのまま転送)を行っております。

このログを転送しているZabbixサーバが40秒間隔でログを受信した場合、「Zabbix busy alerter processes, in %」
が100%にはりついてアクション実行が徐々に遅延し、5時間後には転送するzabbix_senderコマンド発行のアクショ
ンが1時間ほど遅延する結果になっております。
ちなみに「Zabbix busy trapper processes, in %」の値は、一桁で推移し、Busyにはなっておりません。

40秒に1回のzabbix_senderアクション実行でリソース不足になるとは考えにくく、何かzabbix_sender.confなどの
設定値が不適切なのではないかと想像しています。

以下に、関係しそうなzabbix_server.confで設定している値を記載しますので、何か解決方法などあればご教授お願い
致します。

 StartPollers=15
 StartTrappers=15
 StartPingers=10
 StartSNMPTrapper=1
 CacheSize=64M

その他の設定は、デフォルト値です。
(固有な情報設定は除く)

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

現時点のZabbixでは、Alerterプロセスと呼ばれるアクションを実行
するプロセスは、1プロセスしか起動することができません。

障害を検知して他のZabbixサーバにzabbix_senderで送る際にアクシ
ョンを利用されていると思いますが、その部分の処理が詰まってし
まうのだと思われます。

40秒に1回とのことですが、その時にzabbix_senderの実行は1回だけ
ですか?
そうでないならば、そこで40秒では処理しきれない数のログの行数
分のzabbix_senderの処理を行っているのではありませんか?

送信先のTrapperプロセス数が少なくてzabbix_senderの処理に時間が
かかっているのであれば、送信先のZabbixサーバのTrapperプロセス
の数を増やしてみてください。
それでもだめならば、zabbix_senderで連携する以外の方法を検討し
た方がよいかもしれません。

ユーザー misaki の写真

TNKさん

お忙しいところありがとうございます。
【環境修正します】 zabbix 2.4.6

>40秒に1回とのことですが、その時にzabbix_senderの実行は1回だけですか?
>そうでないならば、そこで40秒では処理しきれない数のログの行数分の
>zabbix_senderの処理を行っているのではありませんか?

⇒実行は1回のみです。
⇒ログは1行ずつ受信してアクション(zabbix_sender)実行しています。

>送信先のTrapperプロセス数が少なくてzabbix_senderの処理に時間が
>かかっているのであれば、送信先のZabbixサーバのTrapperプロセス
>の数を増やしてみてください。

⇒転送される側のzabbixサーバの「StartTrappers」も「15」に設定していて、
 「Zabbix busy trapper processes, in %」の値も1%未満で推移しております。

「Timeout」の値はデフォルトの「3」のままなんですが、この値の拡大で解消する
可能性は考えられすか?
これはzabbix_agentに対するタイムアウト値で関係がないのかと思ってデフォルトの
ままで運用しています。

ユーザー fripper の写真

アクションの実行履歴情報が WebUI の「監視データ」→「イベント」等で確認できるかと思います

転送の対象となるログ行数が多いと、1回あたり1行としても、sender を呼び出すためのアクションを
複数回実行しないといけないはずですので、行数のぶんだけ増えてくるはずです

アクションの実行1回あたりに所要している時間よりも短い間隔で
新しいログ情報が届いてしまっているようだと、その分だけ、転送対象情報が
滞留してしまうことになります

alerter プロセスは、アクションの実行キューに1つでも処理対象が残っていると
100% になってしまったのではないかと思います

ある程度の滞留が起きてしまうだけの行数が新規に追加発生してしまう状況下では
alerter が 100% となってしまうのは不可避なのではないかと

ユーザー misaki の写真

fripperさん

ありがとうございます。

トラッパーで1行を受信したら、アクション1回でzabbix_senderで送信しています。
このアクションはzabbix_senderを呼び出すスクリプトをメディアに登録して、この
メディアを実行しています。
また、今回40秒ごとに発生しているログの文字列は日本語で、見る限り300バイト以内の
文字列でした。

>alerter プロセスは、アクションの実行キューに1つでも処理対象が残っていると
>100% になってしまったのではないかと思います

 アクション1回の実行時間がどれくらいかかっているかを確認してみましたが、イベント詳細
 の時間から、メッセージアクションのところに表示されている時間の差は+4~5秒となって
 おります。
 これがアクション実行にかかる時間(アクション実行プロセスが処理にかかっている時間)と
 したら、次の40秒後のアクションには影響ないように思いますが、内部処理に時間がかかって
 いるのでしょうか?

 zabbix_senderの処理時間を確認する方法などありませんでしょうか?