トリガーの条件式
いつも勉強させて頂きありがとうございます。
今回は、POSのデータを収集するプログラムの監視を行う必要があり、テストを行っております。
【フロー】
POSのデータがたまるフォルダのファイル数をチェックし、zabbex_senderで送信
送信値:ファイルが有る場合、”Warning” ファイルがない場合、"Normal"
上記をPOSサーバー側のタスクで、1時間ごとに送信してます。
そして、「監視データ」・「最新データ」で正常に更新されている事までは確認できましたが、”Warning”が2回連続して発生した場合、致命的な障害として、私の携帯にメールを送信したいと考えております。
※メール設定等は完了しております。
障害としての条件
”Warning”発生1回目 → 正常
”Warning”発生2回目 → 障害
"Normal"が1回発生で → 正常へ復帰
【アイテムの設定】
名前:POS集配信監視
タイプ:zabbixトラッパー
キー:PosMonier
データ型:文字列
ヒストリ保存期間:90日
値のマッピング:なし
◎現在の設定
{POS:PosMoniter.str(Warning)}<>0 or {POS:PosMoniter.str(Normal)}=0
※この場合、1回目の"Warning"で、障害としてしまう為、出来れば2回目で障害として判断出来ればと考えております。
過去ログ”http://www.zabbix.jp/node/2573”を確認しましたが、理解できませんでしたので、アドバイス頂けましたら幸いです。
sogaoh - 投稿数: 9
>”Warning”が2回連続して発生した場合、致命的な障害として、私の携帯にメールを送信したいと考えております。
そのような場合、count 関数を利用し、以下のように設定するのが良いと思います。
( POS:PosMoniter.str(Warning) が期待動作している前提)
{POS:PosMoniter.str(Warning).count(#2, 0, "ne")}>1
簡単にネット検索した限りですが、使用されている Zabbix のバージョンが 1.8 以降であれば
count 関数は利用可能そうです。
[参考情報]
http://dekokun.github.io/posts/2014-01-30.html
http://www.zabbix.jp/node/3375
https://www.zabbix.com/documentation/1.8/jp/manual/config/triggers
https://www.zabbix.com/documentation/2.0/jp/manual/appendix/triggers/fun...
Sujinosuke - 投稿数: 17
sogaoh 様
早速のアドバイス有難うございます。
条件式にお教え頂いた[.count(#2, 0, "ne")]を追加して、下記へ変更した所、更新時に”トリガー条件式が正しくありません”で更新できませんでした。
◎更新できなかった条件式
{POS:PosMoniter.str(Warning).count(#2,0,"ne")}<>0
私の想像では、「POS:PosMoniter」に対して「str(Warning)」と「.count(#2,0,"ne")」2つ入っているからでは無いかと思い、お教え頂いたURLを参考に、下記へ変更してみましたが、すべて異常で上がるようになってしまいました。
POS:PosMoniter.count(#2,"Warning",eq)}
私の勝手な解釈ですが、str(Warning)を使わずに、count関数だけで判定が出来るのではと考えておりますが、その場合どう記述すればよいのでしょうか?
重ね重ね恐縮ですが、アドバイス頂けましたら幸いです。
書き忘れました、Zabbixのバージョンは、2.4.6です。
◎追記
https://www.zabbix.com/documentation/2.0/jp/manual/appendix/triggers/fun...
↑を読んで、私なりに解釈してみまいたが、
countを使う場合、「.count(#2,"Warning",eq)」
strを使う場合、.str("Warning",#2)
で、障害発生となりませんでしょうか?
両方試してみましたが、1回目で障害と条件付けされてしまいました。
sogaoh - 投稿数: 9
>条件式にお教え頂いた[.count(#2, 0, "ne")]を追加して、下記へ変更した所、更新時に”トリガー条件式が正しくありません”で更新できませんでした。
不正な情報を伝えてしまい、申し訳ありません。
以下はどうでしょうか?
{POS:PosMoniter.count(#2,"Warning")}>1
意図は、「"Warning" という文字列値を、 #2 回 検査したときに 2 回(>1) Hit することを検出する」というものです。
括弧({ })の位置は調整の必要があるかもしれません。
Sujinosuke - 投稿数: 17
sogaoh様
>不正な情報を伝えてしまい、申し訳ありません。
気になさらないで下さい、"count()"関数の事を教えて頂き感謝しております。
>{POS:PosMoniter.count(#2,"Warning")}>1
↑これで、期待通りの結果が得られました。
今回は、トリガー条件式の事を知るきっかけになり、今後のシステム構築に大いに役に立つと思います。
有難うございました。