運用を支える監視システムを構築する
障害検知の技(1) 監視ポイントの設置
ここまで、障害の検知方法やしきい値について簡単に説明してきました。実は、ここまで説明してきた監視方法では検知できない障害もたくさんあります。以下では、こうした障害を検知する術を解説します。
例として、ブログ・サイトが収容されているサーバーの障害を想定してみます。ブログ・サイトでは、WebページはPHP言語やCGI連携機構、あるいはJava言語/機構などで構成されており、ApacheやMicrosoft IISに代表されるWebサーバーが、記事コンテンツをアクセス者のWebブラウザに送って表示させています。
このブログ・サイトを監視するシステムでは、先述した一般的な3つの監視項目が備わっているとします。つまり、ping/ポート/ロード・アベレージを監視できるとします。
- ping監視: ネットワーク的な疎通確認で正常性を確認できる
- port監視: サービスのプロセスが生きていることを確認できる
- ロード・アベレージ監視: OS全体にわたる高負荷状態を確認できる
pingで障害を検知した場合、ネットワーク断を含むサービス・ダウンが考えられます。pingが通り、ポート監視で障害を検知した場合は、Webサーバーを含むプログラム的な異常が発生していることが考えられます。ロード・アベレージ監視で障害を検知した場合は、サーバーOSの負荷によって表示速度が遅い(重い)など、別の原因が発生していることが考えられます。
実は、この3つの監視方法による限られた情報では検知できない障害もあります。例えば、アプリケーション・エラーが発生していてもWebサーバーが生きていてポートを開いている場合があります。また、誤ってエンドユーザーがコンテンツを削除してしまったことなどは検知できません。
障害検知の技(2) コマンドで監視を自動化
では、具体的にどうやって障害を検知すればよいのか。この答えは、「人間が確認することと同じ方法を自動化して監視する」、となります。狭い意味でのPort監視がポートの生き死にだけを調べるのに対して、以下に示す方法では、アプリケーションが返すメッセージの内容を判断します。
ブログ・サイトの監視のため、一般的なLinuxにインストールされている「wget」コマンドで監視してみましょう。wgetは、Webアクセスを行ってWebコンテンツを取得できる、コマンドライン型のWebブラウザと考えていただいていいと思います。
以下のコマンド・ラインは、シェル(bash)のコマンド・ライン上で、wgetコマンドとnkf(日本語文字コード変換)がインストールされている環境での例です。
--------------------------------------------------------------------------------
$ wget -q --no-check-certificate --tries=6 --timeout=4 -O - http://boowy.jp | nkf
--------------------------------------------------------------------------------
このコマンド・ラインは、「http://boowy.jp」へアクセスし、ページを閲覧する(保存はしない)オプションとなります。SSL接続時にサーバー証明書を確認せず、タイム・アウトまでの時間は4秒、リトライを6回まで行います。正常に取得できればHTMLのソースが画面に表示されると思います。
--------------------------------------------------------------------------------
$ wget -q --no-check-certificate --tries=2 --timeout=5 -O - http://boowy.jp/ --user-agent="DoCoMo/1.0/SO506iC/c20/TB/W40H21" | nkf
--------------------------------------------------------------------------------
上記は、応用になります。wgetコマンドでユーザー・エージェント(Webブラウザ環境の種類)を指定しています。これにより、疑似的に携帯電話端末であることを申告し、コンテンツを取得できます。
次ページでは、wgetで得られるHTMLコンテンツの中身を自動的に判断して監視に役立てる方法を解説します。