弊社でもWebサーバをたくさん運用しています。ただ、サーバを監視するサービスは申し込んでいません。サーバといっても、やはり固まることはあります。その際、Webサーバのチェックツールを自分で作ることができますので、簡単なチェックツールの作り方と設置方法を書きたいと思います。まずは、サーバが何台あるかを考えて、相互に監視するように構成します。
- サーバA
- サーバB
- サーバC
上記のように3台ある場合は、AがBを監視、BがCを監視、CがAを監視とすると、3台同時に落ちない限りチェックは可能です。例えば、サーバAでhttpdのチェック機能を作ったとしてもサーバ自体が固まるとチェックすることができなくなりますので、相互監視が必要です。
下記のようなスクリプトを作り、サーバBに設置します。
<?php if ($_SERVER["REMOTE_ADDR"] == "サーバAのIPアドレス") echo 'UP'; else { header ("HTTP/1.1 301 Moved Permanently"); header ("Location: http://www.poitan.net/"); exit; } ?>
これでAからBのチェックURL(例:http://サーバB/check.php)にアクセスするスクリプトを実行し、”UP”が返ってきた場合は正常、返って来ない場合はダウンしている可能性があるということです。下記のスクリプトをサーバAに設置し、cronで定期的に実行します。
<?php $domain = "サーバB"; $str = trim (file_get_contents ("http://" . $domain . "/check.php")); if ($str != "UP") { $to = "メールアドレス"; $subject = $domain . "停止"; $body = $domain . "が停止した可能性があります。 チェックして下さい。 http://" . $domain . "/"; mb_send_mail ($to, $subject, $body, "From: \"ServerChecker\" <postmaster@" . $domain . ">\r\nReply-To: \"ServerChecker\" <postmaster@" . $domain . ">", "-ferror@" . $domain); } ?>
30分毎にチェックする場合は下記のようなcronを設定します。
*/30 * * * * /usr/local/bin/php -q /PATH/check.php > /dev/null 2>&1
これでダウンしているかどうかのチェックができますので、$toに携帯電話等のアドレスを入れておくと素早く対応できると思います。