icmppingとnodata関数を組み合わせたトリガー条件式について
いつもおせわになっております
標題の件について、ご教示いただけないでしょうか。
※バージョンは、2.2.11を利用
icmpping監視とsnmp監視(nodata関数)を組み合わせて以下のようなトリガー条件作成したところ、
icmp復旧後にsnmp監視(nodata)のトリガー条件式で想定外な評価がおこなわれるため、
想定しないイベントが生成され悩んでおります。
※設定トリガー③は30分間データが生成されない場合に評価されると想定して作成しました。
nodata(データが生成されない時間)の場合、icmpの状態によって障害を切り分け検知させたいのがやりたいことです
以下にトリガーの設定内容、及び発生したイベント、その時取得された履歴データを記載いたします
設定トリガー
①[Major]_[0]_I/F UP/DOWN異常を検知しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].last(0)}=1 =1
②[Major]_[0]_I/F UP/DOWN異常を検知しました。[EVENT]
→{a:icmpping[ipaddress,,,100,].last(0)}=0 =1
③[Critical]_[30]_I/F UP/DOWN異常を検知しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].last(0)}=1 =1
④[Critical]_[30]_I/F UP/DOWN異常を検知しました。[EVENT]
→{a:icmpping[ipaddress,,,100,].last(0)}=0 =1
⑤[Clear]_ICMP未応答が回復しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].last(#2)}=0 =1
⑥[Major]_[0]_ICMP未応答を検知しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].max(#1)}=0
「障害イベントを継続して生成」はチェックなし
[発生したイベント]
①2016/10/07 19:21:45 [Major]_[0]_I/F UP/DOWN異常を検知しました。[MAIL] 障害
②2016/10/07 19:21:45 [Major]_[0]_I/F UP/DOWN異常を検知しました。[EVENT] 正常
③2016/10/07 19:21:45 [Critical]_[30]_I/F UP/DOWN異常を検知しました。[MAIL] 障害 ← 30分nodataを検知したときに発生すると考えていたが、このタイミングで評価されイベントが生成されてしまった。
④2016/10/07 19:21:45 [Critical]_[30]_I/F UP/DOWN異常を検知しました。[EVENT] 正常
⑤2016/10/07 19:21:45 [Clear]_ICMP未応答が回復しました。[MAIL] 障害
⑥2016/10/07 19:21:45 [Major]_[0]_ICMP未応答を検知しました。[MAIL] 正常
[ICMPPINGの取得データ履歴]
2016/10/07 19:31:45 1
2016/10/07 19:26:45 1
2016/10/07 19:21:45 1
2016/10/07 19:16:45 0
上記のようなトリガー条件式の場合、③のイベントはなぜ生成されてしまうのでしょうか。
また、回避策あればご教示いただけないでしょうか。
どうぞよろしくお願いします
wakaba - 投稿数: 228
広瀬です
提示頂いたトリガー条件式ですが、おそらく本フォームの仕様上で一部記号の関係で、
消えてしまっていると見られます。現時点では正式なトリガー条件式が判断できません
ので、お答え出来ない状況です。
http://www.zabbix.jp/filter/tips
私も往々にしてミスしてしまいますが、上記書式オプションをご確認頂き再度ご投稿願います。
ご存じの通り、「&」「<」「>」「;」はLinuxに関わらず、HTMLでも文字として認識させるには
処置の必要な特殊記号扱いです
@kaz373 - 投稿数: 34
広瀬さん
お世話になります
大変失礼いたしました。すっかり失念しておりました。
トリガーは以下のとおりとなります。
設定トリガー
①[Major]_[0]_I/F UP/DOWN異常を検知しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].last(0)}=1 and {a:b.nodata(330)}=1
②[Major]_[0]_I/F UP/DOWN異常を検知しました。[EVENT]
→{a:icmpping[ipaddress,,,100,].last(0)}=0 and {a:b.nodata(330)}=1
③[Critical]_[30]_I/F UP/DOWN異常を検知しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].last(0)}=1 and {a:b.nodata(2130)}=1
④[Critical]_[30]_I/F UP/DOWN異常を検知しました。[EVENT]
→{a:icmpping[ipaddress,,,100,].last(0)}=0 and {a:b.nodata(2130)}=1
⑤[Clear]_ICMP未応答が回復しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].last(#2)}=0 and {a:icmpping[ipaddress,,,100,].last(0)}=1
⑥[Major]_[0]_ICMP未応答を検知しました。[MAIL]
→{a:icmpping[ipaddress,,,100,].max(#1)}=0
「障害イベントを継続して生成」はチェックなし
記載して思ったのですが、発生イベントの④、②の順番でイベントが生成しているということは、
同じtrigger.valueの値の見て評価しているのでしょうか。
どうぞよろしくお願いします。
wakaba - 投稿数: 228
広瀬です
設定されているトリガー条件式を式ではなく、日本語に置き換え且つ『条件成立』<不成立では無い>の演算を
明示的にしてみました。
①ホストaのPINGの値が『1』(=正常)で、且つ同ホストのbアイテムが330秒間、値が検知されなかった場合
⇒ 1=1 & 1=1
②ホストaのPINGの値が『0』(=異常)で、且つ同ホストのbアイテムが330秒間、値が検知されなかった場合
⇒ 0=0 & 1=1
③ホストaのPINGの値が『1』(=正常)で、且つ同ホストのbアイテムが2130秒間、値が検知されなかった場合
⇒ 1=1 & 1=1 ※19:21:45の段階では、本来的には1=1 & 0=1となるはずなので、条件不一致のはず
④ホストaのPINGの値が『0』(=異常)で、且つ同ホストのbアイテムが2130秒間、値が検知されなかった場合
⇒ 0=0 & 1=1 ※こちらも③に同様で、1=0 & 0=1のはず
⑤ホストaのPINGの2番目に新しい値が『0』(=異常)で、且つ最新のPINGの値が『1』(=正常)の場合
⇒ 0=0 & 1=1
⑥ホストaのPINGの最大値の収集した値の数が『0』であった場合
⇒ 0=0
と言った具合になろうかと思います。⑥はそもそもicmppingは0/1しかありえない返り値なので、表現がイマイチ
ですが・・・・それはともかくとして、演算結果は①~⑥がそれぞれに合致した結果でなければならないはずです。
頂けている情報からすると、③、④は少なくともbアイテム側が2130秒間、値の受信がなかった場合なので挙動
としてはご質問通り不自然かもしれません。
①、②は19:16:45から330秒間では無いので、アイテム監視間隔+トリガー内部処理周期のずれにより条件が
成立する可能性は否めません。
Ping側のヒストリーのみなので何とも言いきれませんが、上記をもとに対象時間帯のPing監視と、bアイテムの
計算結果とa/bアイテムの評価時間ずれを含め、実際にはどうであったか、比べてみていただく必要があるかと
思います。
@kaz373 - 投稿数: 34
広瀬さん
お世話になります
度々不手際あり申し訳ありません。
日本語への置き換えで分かり易くご説明いただきありがとうございます。
改めて、「bの取得データ」をお伝えさせていただきます。
[bの取得データ履歴]
2016/10/07 19:31:38 1
2016/10/07 19:26:38 1
2016/10/07 19:25:57 1
2016/10/07 18:16:38 1
[ICMPPINGの取得データ履歴]
2016/10/07 19:31:45 1
2016/10/07 19:26:45 1
2016/10/07 19:21:45 1
2016/10/07 19:16:45 0
ご指摘のとおり、①、②については成立するかと考えておりますが、
③④については上記の取得データの履歴より条件不一致となるかと考えております。
※やりたいことは、ICMP監視とSNMPステータス監視(タイムアウト時)の複合条件時の検知判定となります。
お手数をおかけして申し訳ありませんが、なにかヒントになることでもご教示頂ければ大変助かります。
どうぞよろしくお願いします。
wakaba - 投稿数: 228
広瀬です
bアイテム側のデータ履歴ですが記載ミスでなければ、以下の部分が50分ほど欠損してます
2016/10/07 19:25:57 1
2016/10/07 18:16:38 1 ←50分前です
③のトリガーだと、1=1 & 1=1が成立すると思います。2130秒は35分30秒なので、19:21:45
時点から35分30秒前は18時46分頃は値がありませんから、トリガー条件としては正しい動き
をしていると思います。
他の条件式も同様です。
@kaz373 - 投稿数: 34
広瀬さん
お世話になります。
ご指摘いただいたとおり、データが取得されていないため、nodata(2130)のトリガー条件式が評価されたと思います。
※19:21:45にICMPのデータが取得されたのでbの取得データも取得されていると勘違いしたようです。
そもそものところ19:21:45のタイミングでbのデータが取得出来ているべきなのか、もう一度整理したいと思います。
いろいろご足労かけ申し訳ありませんでした。
ありがとうございました。