はじめに
サーバの監視にzabbixを使います。
そこで話にあがってくるのが、「監視サーバー自体が落ちてたらどうするの?」という問題です。
監視サーバが動いていなかったらアラートを出すのがベストですが、今回はそこまで手間をかけずに
毎日AM 9:00に監視サーバが動いていることをメールでお知らせする方法で対処することにします。
外部チェックや、監視サーバ内のcronでシェルを書いて定期的にメール送信させるなど色々な方法があるようですが、今回は手っ取り早くZabbixのアイテム → トリガー → アクションで完結させる方法を紹介します。
環境
- RHEL 7.7
- Zabbix 4.0.18
ホスト
まずは監視サーバのホストを作成します。
デフォルトのZabbix serverを使うでも良いです。
アイテム
基本的に動けばなんでも良いです。pingを実行させます。
Zabbix-serverのプロセス確認でも良いですが、今回の要件は
メールが送れない=Zabbixが動いていない
を検知させるだけですので、プロセス監視は必須ではないです。
監視間隔のカスタマイズ
何時にメールを送信させるかを監視間隔のカスタマイズで調整します。
h9m0,1
09:00、09:01に監視アイテムが実行されます。
2回実行させるのがミソです。(後述)
監視間隔のフォーマットについてはこちらが分かりやすかったです。
トリガー
トリガーでは現在時刻を返す time
関数を使います。
この条件式で障害イベントと復旧イベントの発生を制御します。
- 9:00にアイテム監視が実行され、トリガー条件式がtrueで障害イベント発生。
- 9:01にアイテム監視が実行され、トリガー条件式がfalseで復旧イベント発生。
復旧イベントを発生させないとダッシュボードにずっと表示されていてなんだか気持ち悪いので、
アイテム監視を2回行うようにしています。
サポートされているトリガー関数 [Zabbix Documentation 2.2]
time | 現在の時刻をHHMMSS形式で返します。例:123055
アクション
あとはアクション設定に先ほど作成したトリガーを割り当てれば完了です。
終わりに
アイテム実行からトリガーのtime()
が発動するまでに1秒以上のラグがあったら
トリガー判定でfalseにならないかな?とも思ったのですが、今のところ動いているようなので様子見といったところです。
クリティカルな実装かもしれない。