インターネットに公開しているWebサーバーを運営している場合、Webサーバーが正常に稼働していてWebサイトをユーザーが閲覧可能な状態かを定期的にチェックしておきたいですが、本格的な監視環境を用意するほど費用や手間をかけられないことも多いでしょう。
そのようなときは、Linuxマシンでコマンドやシェルスクリプトとcronを組み合わせることで、簡単に監視することができます。
そこでここではRedHat系Linuxを例に、リモートのWebサイトの死活をcronとシェルスクリプトで監視する方法を紹介します。
目次
ネットワークレベルで監視する場合
ネットワークレベルで死活監視したい場合は、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サイトに実際にアクセスしてHTTPレスポンスコードをチェックするのがおすすめです。
可能であれば、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宛にメール送信されます。
cronで処理が実行された時に標準出力や標準エラーに表示されたメッセージは、実行ユーザー(ここではroot)宛にメール送信されます。
あとはroot宛メールを外部のメールアドレスなどに転送するよう設定しておけば、何かあったときにいち早く気づくことができるでしょう。
あとがき
ここで紹介した方法はてもシンプルですが、何も監視しないよりはずっと安心できますよ。