障害判定が数回継続した場合にアラートを実行するトリガーの記述方法について

お世話になります。

Nagios でいうところの max_check_attempts の実装をどのように
行えば良いか、アドバイスいただけますでしょうか。

【条件】
異常判定が N 回分継続した場合にアラート通知を行う
異常後は 1回でも正常判定したら復旧通知を行う

【トリガー】(回数=<N>)
({TRIGGER.VALUE}=0&{host:item.key.last(#<N>)}>50)|({TRIGGER.VALUE}=1&{host:item.key.last()}>50)

【ケース1】継続回数を 3回で定義
#|値|判定|メモ
1|10|N/A|
2|10|N/A|
3|10|OK|参照行 1
4|60|OK|参照行 2
5|60|OK|参照行 3
6|60|NG|参照行 4 異常通知
7|60|NG|参照行 7
8|10|OK|参照行 8 復旧通知

【ケース2】継続回数を 3回で定義
#|値|判定|メモ
1|10|N/A|
2|10|N/A|
3|10|OK|参照行 1
4|60|OK|参照行 2
5|10|OK|参照行 3
6|60|NG|参照行 4 異常通知
7|10|OK|参照行 7 復旧通知
8|60|NG|参照行 8 異常通知

ケース1では、4~6 で継続 3回の異常のため、意図した通知とな
りますが、ケース2では、4~6 の間に 5 で、正常値があるにも関
わらず、6 の段階で異常判定となってしまいます。

べた書きで or 条件を回数分記述ということは、マクロの値で N
を定義したく、避けたい意向です。

また、アラート側設定のエスカレーション機能は、時間記述のため、
監視回数で制御したいことと外れることや、監視対象毎に可変とさ
せるにはそぐわないと判断しました。

良い実現方法はありますでしょうか?

コメント表示オプション

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

こんにちは。

min や count を使うといいでしょう。
({TRIGGER.VALUE}=0&{host:item.key.min(#N)}>50)|({TRIGGER.VALUE}=1&{host:item.key.last()}<50)
({TRIGGER.VALUE}=0&{host:item.key.count(#N,50,gt)}=N)|({TRIGGER.VALUE}=1&{host:item.key.last()}<50)

一応確認ですが、回復条件は>50ではなく<50ですよね?
そして、もし≦50としたいなら、Zabbix 2.4.x なら <=50 が使えるようですが、2.2.x なら {...count(#1,50,le)}=1 のようにする必要があります(整数限定なら <51 でも可)。

ユーザー yuuhi の写真

heya 様

遅くなりまして、申し訳ありません。
また、アドバイスをありがとうございます。

> 一応確認ですが、回復条件は>50ではなく<50ですよね?
ご指摘の通りです。失礼いたしました。

当方の認識で count の解釈に誤りがあったようです。
提示いただきましたサンプルから、どうやらこれが見ため的にもシンプルに表せられるような気がしてきました。

大変参考となりました。

バージョンによる比較演算の結果差異につきましてもご教示ありがとうございました。