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

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

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

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

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

Linux環境でCPU/メモリ/ディスクの使用率をCron+シェルスクリプトで監視する方法
ここでは、CentOS7を例に、CPU/メモリ/ディスクそれぞれの使用率を定期的に取得し、指定したしきい値を上回った(or下回った)ときにメール通知させる処理を、シェルスクリプトとcronを使って実現する方法を紹介します。

動作環境

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

ソフトウェアバージョン
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宛メールを外部のメールアドレスなどに転送するよう設定しておけば、何かあったときにいち早く気づくことができるでしょう。

あとがき

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

記事が役立ったらシェアしてくれるとうれしいです。