Adwaysエンジニアブログスマートフォン用の表示で見るAdwaysエンジニアブログ2012-10-19Nagiosのイベントハンドラで障害の自動回復?インフラこんにちは、インフラ担当のszkです。正確には回復措置機能は無いのですが、障害発生時に自動的に回復措置を促すことができる「イベントハンドラ」という機能があります。障害は発生時に、人間の目で確認して回復措置を行わないと監視の誤検知などがあって不安というのが実際本音ではあります。「じゃ、紹介すんなよ!」と突っ込まれそうですが、障害発生のパターンや原因がはっきりしていて、回復措置が確立している場合には結構有効ではないかと思っています。今回はあえてWindowsのサンプルと、私なりの使用方法を紹介したいと思います。イベントハンドラ以外のNagiosやNRPEの設定の詳細は割愛させて頂きます。監視の仕様としては同じサーバに対して2種類の監視設定を行います。休日や深夜~早朝など、人が対応出来ない時間帯は自動でサーバを再起動するようにします。監視サイクルを長めにする、監視リトライ回数を多めにするのは誤検知を防ぐ狙いです。今回は監視サーバ(Nagios)のイベントハンドラが、回復措置として行うコマンドをNRPE経由で実行します。監視されるWindowsサーバが高負荷で、リモートからのコマンドを受け付けられない状態ではイベントハンドラの意味を成しません。Windowsのイベントハンドラのスクリプトはこちらを参考にしていますが、環境によって動作しない場合があります。⇒監視結果が"CRITICAL"でリトライが2回以内。上記スクリプトはサンプルなので、わざと"HARD"と"SOFT"の条件を書いていますが、max_check_attempts=3の場合は、リトライ回数が3でサーバの強制再起動が発生します。(監視リトライの4回は理論的には発生しない)監視サーバ(Nagios)側でイベントハンドラのコマンドを定義します。$SERVICEATTEMPT$}引数の内容は$SERVICESTATE$:監視結果のステータス("OK"、"WARNING"、"UNKNOWN"、"CRITICAL")$SERVICESTATETYPE$:CRITICAL時の状態("HARD"、"SOFT")$SERVICEATTEMPT$:監視リトライ回数イベントハンドラに関わる設定はこんな感じです。実運用の前に十分なテストが必要なことは言うまでもありません。興味のある方はお試し下さい。