PythonとcronでURLの死活監視
指定したURLが生きているかどうか監視する必要に迫られたため、なるべく手軽に導入・管理できるものを探したところ、以下の方法に行き着きました。
環境は Ubuntu-12.04 です。
要件
- 監視対象のURLリストを外部ファイルで入力したい
- ステータスコードが 200->404 に変化した時と 404->200 に変化したとき、両方でアラートを出したい
- アラートはメール送信で
- できればpythonがいい
- チェック間隔は1時間ぐらい
Site-Monitor
上記の要件で良いツールがないか探していたところ、githubに良さそうなスクリプトがありました。これを使うことにします。
sanbornm/Site-Monitor - github
https://github.com/sanbornm/Site-Monitor
構築
ということで構築を始めます。
Site-Monitorをclone
上記のリポジトリを任意のディレクトリにcloneします。 今回の例ではホームディレクトリに
$ cd /home/my-name $ git clone https://github.com/sanbornm/Site-Monitor.git
cloneしてきたディレクトリ内のsitemonitor.pyが実行するスクリプトです。
実行用のディレクトリを作る
実行用のシェルスクリプトや設定ファイル等を置くディレクトリを作りました。
$ cd /home/my-name $ mkdir site-monitor-worker
監視対象のURLリストを作る
監視対象とするURLのリストを書いたリストのファイルを作ります。改行区切りでURLを一つずつ書くフォーマットになっています。
$ cd /home/my-name/site-monitor-worker $ touch checklist.txt
checklist.txtの中身
http://example.com/ https://example.com/ http://example.com/blog/110 http://example.com/blog/999999999
実行用のシェルスクリプトを作る
sitemonitor.py は引数が多いスクリプトなので、sitemonitor.pyを叩くシェルスクリプトを別に作って同じディレクトリに置きました。
$ cd /home/my-name/site-monitor-worker $ touch check-urls.sh
check-urls.shの中身
/home/my-name/Site-Monitor/sitemonitor.py \ -g \ -s 'from-user@gmail.com' \ -u 'from-user@gmail.com' \ -p 'password' \ -d 'to-user@example.com' \ -f '/home/my-name/site-monitor-worker/checklist.txt'
設定内容
アラートのメールをgmailから送るように設定しました。
- -g アラートメールをgmailから送るフラグ
- -s アラートメールメールの送信主
- -u gmailのログインID
- -p gmailのログインパスワード
- -d アラートメールの送り先
- -f 監視対象URLリストへのパス
cronの設定
毎時15分に死活チェックをするよう設定しました。
$ crontab -e
crontabの設定内容
15 * * * * /home/my-name/site-monitor-worker/check_urls.sh > /dev/null 2>&1
通知のロジック
1時間毎にチェックを行い、前回チェック時のステータスと違っていたらアラートメールが飛びます。