wgetで死活監視


Photo by Christie Digital

プロダクトのHTTPステータスを監視するためにbashwgetコマンドでこしらえた。

使い方は簡単で以下に記載してあるhttp_monitor.shをnohup(バックグラウンド)で実行しておくだけ。
あとは永久にループし続けるので簡易だが死活監視はこれでできる。

難点はこのプロセス自体は監視していないので監視ツール自体の信頼性が低いっということ。

時間があるならhobbitとか入れてちゃんと監視することをおすすめします。


http_monitor.sh

#!/bin/bash

# locale依存を排除
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"

# --spiderでファイルに書き出さない
# --server-responseでHTTPのレスポンスを出力する
# --timeoutでタイムアウトの時間を指定する
# --triesで何回tryするのか定義する
wget_options=' --spider --server-response --timeout=30 --tries=1 '

# メールを送信する場合のヘッダー
head="`echo -e HTTP 200が返って来なかったURLの一覧です。`"

while true; do
    # 動的に対象のサービスを読み込み
    . urls.sh
    for i in ${urls[@]}; do
        result=`/usr/bin/wget $i $wget_options 2>&1`
        exit_status=$?
        if [[ ${exit_status} -ne 0 ]]; then
            body="${body}\n\n${result}"
        fi
    done


    # 結果をmailで送信
    if [ "$body" != "" ]; then
        echo -e ${head}\\n${body} | iconv -t ISO-2022-JP | mail -s "Abnormal response" "yourname@example.com"
    fi

    # 永久ループの中にあるので一旦bodyを空にする
    body=""
    sleep 60
done


urls.shはループの中で都度呼び出されるためプロセス実行中にurls.shが変更されても即時反映される。


urls.sh

# チェック対象のURLなど
urls=(
"example.com"
"example.jp"
)

お試しあれ。