トリガー設定:60分間継続して直近10分間のICMP lossが3%を下回っていた場合に復旧とする条件式

トリガー設定のうち、掲題のような復旧条件式が書けず、困っています。
やりたいことは次のとおりです。

(障害条件)直近10分間のICMP lossが3%を超えた場合
(復旧条件)60分間継続して直近10分間のICMP lossが3%を下回っていた場合

実は、現在は以下のように設定しているのですが、障害→復旧を異様に繰り返してしまっています。

(障害条件式){Template ICMP Ping:icmppingloss[,1,,,1000].avg(10m)}>3
(復旧条件式){Template ICMP Ping:icmppingloss[,1,,,1000].avg(60m)}<3 and {Template ICMP Ping:icmppingloss[,1,,,1000].avg(10m)}<3

なぜ間違っているのかは、理解できています。
“and”より前が、直近60分間のlossが3%を下回ったとき、ということになり、分母が10→60に大きくなった分、閾値が緩くなってしまうんですよね。
なので“and”以降を付け加えてみたのですが、うまくいきません... 理由は分かっているのですが、一体どうしたらよいのでしょうか?(T_T)

もし条件式ではできないようでしたら、アイテムの設定を工夫したらよいのでしょうか。
(やりたいこと)5秒毎に1回ずつping
(現在のアイテム設定)キー:icmppingloss[,1,,,1000]  更新間隔:5秒

どなたか、お知恵を貸していただきたく、よろしくお願いいたします。

コメント表示オプション

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

avgは「指定時間内の平均値」という意味で、「継続し続けている」かどうかを見ていないです。
そのため、10分間平均では3を超えるが、60分平均では3未満のため障害→復旧を繰り返していると思われます。

ICMP lossを監視に採用した経験がないため正しく指定の条件を満たすかは分かりませんが、
この場合はcountを使うことをおすすめします。

(障害条件)ICMP lossが10分(600秒)で3を超える回数がX回を超えれば障害
{Template ICMP Ping:icmppingloss[,1,,,1000].count(600,3,"gt")}>X

(復旧条件)ICMP lossが60分(3600秒)で3未満になる回数がX回を超えれば復旧
{Template ICMP Ping:icmppingloss[,1,,,1000].count(3600,3,"lt")}>X

※あとはアイテム更新間隔に従ってXの値を適正なものにすればと思います
 アイテム更新間隔が60秒なら、障害Xは9、復旧Xは59になる。

※count時間が長いと、Zabbix3.xの場合はtimerプロセス、
 4.xの場合はhistory syncerプロセスに負荷をかけるので留意

ユーザー sumile1229 の写真

Yasumi さん、コメントありがとうございます。
ですが、countでも、結果は同じです...

タイムシフトを利用し、以下のように、AND条件で書き連ねていけば、可能な気がします。

{Template ICMP Ping:icmppingloss[,1,,,1100].avg(10m,0)}<3
and
{Template ICMP Ping:icmppingloss[,1,,,1100].avg(10m,10m)}<3
and
{Template ICMP Ping:icmppingloss[,1,,,1100].avg(10m,20m)}<3
and
{Template ICMP Ping:icmppingloss[,1,,,1100].avg(10m,30m)}<3
and
{Template ICMP Ping:icmppingloss[,1,,,1100].avg(10m,40m)}<3
and
{Template ICMP Ping:icmppingloss[,1,,,1100].avg(10m,50m)}<3

でも、これだと文字数制限で60分間は書き連ねられませんでした...

ユーザー Yasumi の写真

今気づきましたが、私の提案「復旧案」が良くないですね。ミスしました。

解決したようで、良かったです。