ステートタイプ
イントロダクション
サービスやホストの現在の状態は2つのコンポーネント:サービスやホストの状態(例:OK,WARNING,UP,DOWNなど)とそれら状態のステートタイプによって決定されます。Nagiosのステートタイプには2つの種類のものがあります。その一つは"ソフト"ステートでもう一つは"ハード"ステートです。 ステートタイプはNagiosの監視ロジックの重要な部分です。 それらはいつイベントハンドラを実行し、いつ警告を発するか決定しています。
サービスとホストチェックの再試行
Nagiosは誤報を防ぐために、サービスやホストが本当に問題があると思う前に何度サービスやホストチェックを再試行するか定義できます。本当に問題と判断する前の再試行の最大回数はサービス、ホスト定義の中の <max_check)attempts>オプションでそれぞれ制御できます。サービスまたはホストのチェックがどの再施行に依存しているかということはそれらが現在どのステートタイプであるかということで決定されます。サービス・モニタリング・ロジックには少数の例外があります。しかし、今のところそれらを無視するでしょう。ではサーボスステートのタイプを見ていきましょう・・・
ソフトステート
ホストやサービスのソフトステートは以下の状況で発生します・・・
- サービス、ホストチェックの結果がnon-OK状態でサービス、ホスト定義の中の<max_check_attempts>で指定した(再)試行数に達していないとき。これをソフトエラーステートと称します。
- サービスやホストがソフトエラーステートから復旧したとき。これをソフトリカバリーと称します。
ソフトステートイベント
サービスやホストのソフトエラーステートやソフトリカバリーが発生した際に何が起こるのでしょう?
- ソフトエラー、リカバリーはメイン設定ファイルのlog_service_retries or log_host_retriesで有効にしていればログに記録されます。
- イベントハンドラが(定義していれば)サービスやホストのソフトエラー、リカバリにハンドルされます。(どんなイベントハンドラが実行される前でも、 $STATETYPE$ マクロは"SOFT"にセットされます)
- Nagiosはどんな通知先にも通知しません。なぜなら、それらはサービスやホストが"実際に"問題ではないからです。
これから分かるようにソフトステート時に発生する重要項目はイベントハンドラの実行の1点です。もしその問題がハードステートになる前に解決しようと試みたいのであればイベントハンドラを使用することが非常に役立つでしょう。イベントハンドラに関する詳しい情報はこちらです。
ハードステート
サービスのハードステートは以下の状況で発生します(ホストのハードステートは後述します)・・・
- サービスチェックの結果がnon-OK状態でかつサービス定義の中の<max_check_attempts>で指定した(再)試行数に達した時。これはハードエラーステートと言っています。
- サービスがハードエラーステートから復旧した時。これをハードリカバリーと称します。
- サービスチェックの結果がnon-OK状態で、それに対応するホストがDOWNもしくはUNREACHABLEな状態の時。これは一般的な監視ロジックでの例外ですが、完全に意味をなします。ホストが稼働していない時に、どうしてサービスの再チェックを試みなくてはならないのでしょう?
ホストのハードステートは以下の状況で発生します・・・
- ホストチェックの結果がnon-OK状態でホスト定義の中の<max_check_attempts>で指定した(再)試行数に達した時。これはハードエラーステートと言っています。
- ホストがハードエラーステートから復旧したとき。これをハードリカバリーと称します。
ハードステートチェンジ
ホスト、サービスがハードステートになったときに何が起こるのかを議論する前に、ハードステートチェンについて知る必要があります。ハードステートチェンジはサービスやホストが以下のようになった際に発生します・・・
- ハードOKステートからハードnon-OKステートに変化したとき
- ハードnon-OKステートからハードOKステートに変化したとき
- なんらかのハードnon-OKステートからなんらかの異なるハードnon-OKステートに変化したとき(例:ハードWARNINGステートからハードUNKNOWNステート)
ハードステートイベント
サービスやホストがハードエラーステートやハードリカバリになった際になにが起こるのでしょう? それはハードステートチェンジ(上述)が発生したかどうかに依存します。
もしハードステートチェンジが発生し、かつサービスやホストがnon-OK状態の時は以下の事が起こります・・・
- そのハードサービス、ホストエラーがログに記録されます。
- イベントハンドラが(定義していれば)サービスやホストのソフトエラー、リカバリにハンドルされます。(どんなイベントハンドラが実行される前でも、 $STATETYPE$ マクロは"HARD"にセットされます)
- 通知先にサービスやホストの問題を通知します。(もし通知ロジックでそれが許可されていた場合)
ハードステートチェンジが発生し、かつサービスやホストがOK状態になった場合、以下のことが起こります・・・
- そのハードサービス、ホストリカバリーがログに記録されます。
- イベントハンドラが(定義していれば)サービスやホストのソフトエラー、リカバリにハンドルされます。(どんなイベントハンドラが実行される前でも、 $STATETYPE$ マクロは"HARD"にセットされます)
- 通知先にサービスやホストの問題を通知します。(もし通知ロジックでそれが許可されていた場合)
もしハードステートチェンジが発生せず、かつサービスやホストがnon-OK状態の時は以下のことが起こります・・・
- 通知先にサービスやホストの問題を再通知します。。(もし通知ロジックでそれが許可されていた場合)
もしハードステートチェンジが発生せず、かつサービスやホストがOK状態の場合はなにも起こりません。なぜならこれはサービスやホストがOK状態で依然チェックしたときと変わってないと言うことだからです。