簡易ウェブサイト死活監視スクリプト

投稿日:

更新日:

カテゴリ:

ウェブサイトの死活監視したいんだけど、大掛かりなものは触りたくない。そんなあなたにピッタリのスクリプトです。

前提

一つだけ前提があります。

  1. 監視スクリプト実行しているサーバからメールが送れること

※このスクリプトはさくらインターネットの共用サーバで確認してます。

ウェブサイト死活監視スクリプト

早速シェルスクリプトです。

website-monitoring.sh

#!/bin/sh

if [ -z $1 ]; then
  echo "usage $0 [host]"
  exit
fi

SITE=$1
SITE_URL=https://$SITE
MAX_TIME=6 # タイムアウト値、6秒待っても反応しないならタイムアウト
ERROR_LOG=$HOME/script/log/$SITE-error.log # エラーメッセージの格納場所
NOTIFICATION_EMAIL=<通知用メールアドレス>

curl -IsSf -m $MAX_TIME -o /dev/null $SITE_URL 2> $ERROR_LOG || cat $ERROR_LOG |
 mail -s "ALARM: $SITE is down" $NOTIFICATION_EMAIL

cron設定

crontab -e(もしくは各サーバプロバイダが提供する管理画面)で次のようなcronを追加します。

*/1 * * * * <スクリプト配置パス>/website-monitoring.sh <ウェブサイトのFQDN> >/dev/null 2>&1
# 例:
*/1 * * * * $HOME/script/cron/website-monitoring.sh www.example.com >/dev/null 2>&1

これで1分おきに監視が行われます。エラーが起きた場合、ALART: www.example.com is downというような件名と、エラー内容が本文のメールが届きます。

工夫したポイント

調べると、curlのレスポンス見て死活を知らせる書き方はすぐ出てきます。
しかし、タイムアウトならもう少し様子見でもいいし、そうじゃなければちょっと深刻かもね!といったような判断ができるように、エラー内容をメール本文に載せたかったです。
そこで、結果を一時的にファイルに書き出してmailコマンドにパイプで渡すようにしてます。

この一時的にファイルはエラー発生する度、上書きにしてますが、もう少し丁寧にやると、例えばファイルの存在を判定して、存在しているならタイムスタンプを付けてリネームするとかで、障害の履歴として保存することも考えられます。

 

スクリプトのバリエーション

cronの設定が分からない・できない場合、次のようにシェル自体を無限ループにするやり方も考えられます。(※動作未検証)

website-monitoring.sh

#!/bin/sh

if [ -z $1 ]; then
  echo "usage $0 [host]"
  exit
fi

SITE=$1
SITE_URL=https://$SITE
MAX_TIME=6 # タイムアウト値、6秒待っても反応しないならタイムアウト
ERROR_LOG=$HOME/script/log/$SITE-error.log # エラーメッセージの格納場所
NOTIFICATION_EMAIL=<通知用メールアドレス>

while true; do
  curl -IsSf -m $MAX_TIME -o /dev/null $SITE_URL 2> $ERROR_LOG || cat $ERROR_LOG |
    mail -s "ALARM: $SITE is down" $NOTIFICATION_EMAIL
  sleep 60
done

参考


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です