LinuxでWebサイトの状態をcronとシェルスクリプトで監視する方法

LinuxでWebサイトの状態をcronとシェルスクリプトで監視する方法

インターネットに公開しているWebサーバーを運営している場合、Webサーバーが正常に稼働していてWebサイトをユーザーが閲覧可能な状態かを定期的にチェックしておきたいですが、本格的な監視環境を用意するほど費用や手間をかけられないことも多いでしょう。

そのようなときは、Linuxマシンでコマンドやシェルスクリプトとcronを組み合わせることで、簡単に監視することができます。

そこでここでは、CentOS 7でWebサイトの状態を監視する方法を紹介します。

LinuxでCPU/メモリ/ディスクの使用率をCronとシェルスクリプトで監視する方法
ここでは、RedHat互換のLinux(CentOS 7)を例に、シェルスクリプトとcronを使ってCPU/メモリ/ディスクそれぞれの使用率を定期的に監視/通知する方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.9.2009

Webサイトの状態を監視する

ネットワークレベルで監視する場合

ネットワークレベルで死活監視したい場合は、Pingコマンドを使った方法が簡単です。

たとえば、対象サーバーに5分おきにPingコマンドを発行して、応答がない場合に標準出力にその旨を出力したい場合は、cronの設定に以下のコマンドを追記するだけで実現できます。

なお、標準出力のメッセージは、シェルスクリプトの実行ユーザーであるroot宛にメール送信されます。

# vi /etc/crontab
*/5 * * * * root bash ping -c 1 <対象のホスト名やIPアドレス> > > /dev/null 2>&1 || echo "no response from <対象のホスト名やIPアドレス>"

アプリケーションレベルで監視する場合

インターネットに公開しているWebサイトの状態を監視したい場合、定期的にWebサイトに実際にアクセスしてHTTPレスポンスコードをチェックするのがおすすめです。

Memo

可能であれば、Webサイトを閲覧する利用者と同じネットワーク経路で監視するのが良いでしょう。

手順は、次のとおりです。

シェルスクリプトの作成

まずは、curlコマンドを使って監視したいWebサイトにアクセスし、HTTPレスポンスコードに問題がないか確認するシェルスクリプトを作成します。

シェルスクリプトの保存先は、管理しやすい場所でOKです。

# vi /usr/local/bin/web_check.sh

#!/bin/bash

#チェックするURLを指定します。
target_url="https://4thsight.xyz"

#target_urlへアクセスし、HTTPレスポンスコードを取得します。
message=`curl -o /dev/null -s -w %{http_code} $target_url`

#HTTPレスポンスコードが200以外のときは標準出力にメッセージを表示します。
if [ "$message" != 200 ]; then
 echo "$target_url is down!! HTTP_code is $message"
fi

cronの設定

次に、作成したシェルスクリプトをcronで5分おきに実行するよう設定します。

# vi /etc/crontab

*/5 * * * * root bash /usr/local/bin/web_check.sh

以上で、WebサイトへアクセスしたときにHTTPレスポンスコートが200以外だったときは、標準出力にメッセージが表示され、メッセージはシェルスクリプトの実行ユーザーであるroot宛にメール送信されます。

Memo

cronで処理が実行された時に標準出力や標準エラーに表示されたメッセージは、実行ユーザー(ここではroot)宛にメール送信されます。

あとはroot宛メールを外部のメールアドレスなどに転送するよう設定しておけば、何かあったときにいち早く気づくことができるでしょう。

あとがき

ここで紹介した方法はてもシンプルですが、何も監視しないよりはずっと安心できますよ。