発生事象
ZabbixにてWeb監視の設定を行っていましたが、
HPからの応答がなくなったにもかかわらず、Zabbixの通知が発生しませんでした。
問題の原因
HP が正常に閲覧できる場合は レスポンスコード 200 が返却されます。
しかしサーバーダウンが発生したケースでは、レスポンスコード自体が返ってこない状態になります。
今回の監視設定では、
「レスポンスコードが 200 以外の場合のみ通知」
という条件しか設定しておらず、
「応答が返ってこない場合(nodata)」の監視ができていなかったことが原因でした。
対処方法
既存のトリガーに加えて、
「一定時間レスポンスが取得できなかった場合にも通知する設定」を追加します。
例えば、[nodata(300)=1]を追加することで、5分間レスポンスコードが返ってこなかった場合にも、通知することができる。
前提条件
レスポンスコードが200以外の場合に通知を行うトリガー設定は画像のようにしている。
回復したときに通知するため、「復旧条件式」としてこちらも追加する必要がある。

画像のように、条件式でレスポンスコードが200で返ってきたときの条件式が設定されていれば前提条件は満たしています。

手順
① トリガー編集画面を開く
② 条件式ビルダーを開く
③ nodata 条件を追加
障害の条件式の右にある「追加」ボタンを押す。
下記の画像の通りに設定する。
| 項目 | 設定値 |
|---|---|
| アイテム | レスポンス |
| 関数 | nodata |
| 最新の (T) | 300 |
| 結果 | =1 |
④テスト実行
テストを行うことができる。条件式の下の「テスト」ボタンを押す。
テストを行いたい任意の値を入れてテストを行う。
障害発生の条件式の場合はTRUEの場合に通知が来る。

⑤ 作成される障害条件式
条件式ビルダーを閉じると、下記のような式ができている。
last(/TEST/web.test.rspcode[TEST,TEST])<>200 or nodata(/TEST/web.test.rspcode[TEST,TEST],300)=1
⑥ 復旧条件式も同様に設定
復旧条件式も同様に設定する。
last(/TEST/web.test.rspcode[TEST,TEST])=200 or nodata(/TEST/web.test.rspcode[TEST,TEST],300)=0
これで、5分間レスポンスコードが返ってこなかった場合に通知を行う設定が完了です。
まとめ
今回は、HPからの応答がないのにも関わらず、Zabbix通知が発生しなかった問題について、参考の記事が見つからず、自分で作成しました。
基本的な設定につきましては、Zabbix公式サイトや、下記の記事が詳細まで丁寧に記載されていて参考になります。
https://www.site24x7.jp/blog/zabbix-web-monitoring/






