大量に発生したトリガーイベントにて、単位時間発生回数でアクション実行を抑制したい

以前よりお世話になっております。
ZABBIX2.0の正式リリースを心待ちにしているユーザの一人です。

本題です。
会社でZABBIXを利用しているのですが、大量にトリガーイベントが上がってしまい、メール通知アクション実行によってメールサーバに大変な負荷を与えてしまうようなことがありました。
そこで、アクションの実行を単位時間回数などで抑止できればと考えているのですが、そういう作り込みをされている事例などはありますでしょうか。

理想的には、あるホストグループに属するホストのイベントが1分間に100件以上発生した場合、100件目以降のアクションを行わない、などを
アクションごとに設定できればいいのになぁと思っています。
そうすればログ用のアクションとそれ以外のアクションに分離し、ログ関連は件数制御をするといったことで影響を少なくできるのではないでしょうか。

今のところZABBIXの設定上で実現する方法が思い付けないので、
メール送信用のシェルスクリプトに宛先やグループ毎の通知回数の計算を仕込み、場合によっては棄却~などして制限するしかないかと考えています。
(またはメールサーバにて同様の仕組みを仕込む)

何かより良い方法、事例、お知恵はありますでしょうか。
よろしくおねがいします。

コメント表示オプション

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

初めまして、理想とされるホスト単位のリミッターは難しいですね。
ただし、アイテム単位ならば以下の方法はいかがでしょう?

{template:item.count(60)}<101

とする事でアイテム単位の瞬間的なバーストを停止出来ると思います。
さらに、以下トリガーを入れる事でバーストによる抑制がかかった事を検知出来ると思います。

{template:item.count(60)}=101

とは言え、複数のアイテムが火を吹く事があるのが常ですので、
上限値の定義、サンプリングする時間については運用設計踏まえてご留意ください。

サンプリングする時間が短いほど、反応が早くなります。
閾値が大きいほど、反応が鈍くなります。

ユーザー Cuturn の写真

間が空いてしまって恐縮です。

なるほど、単位時間内のアイテムが大量になった場合にトリガーのイベント条件から外す、ということですね。
アイデアありがとうございます。

正直、ログ監視のトリガー条件式はどうしても煩雑になるので、
トリガー外でどうにかできればと思ったのですがやはり難しいですね。
この案を出来る限りいれて設定しておこうと思います。
ありがとうございました。

ユーザー halchiyo の写真

自己フォローです。

> さらに、以下トリガーを入れる事でバーストによる抑制がかかった事を検知出来ると思います。
> {template:item.count(60)}=101

抑制がかかったことだけでなくそれが復帰したことを通知するならば、

{template:item.count(60)}>101

とすれば超えたら規定以上のペースになると障害、規定以下のペースに戻れば復旧と通知
するように設定できたはずです。

なお、検知が瞬間的な場合、通知処理が前後し、閾値越えの通知が先行することがあります。