Posted on

PHPでサーバーを監視するプログラムを作ってみました。

最近サーバーの調子が悪いので、サーバーにトラブルがあったら連絡くれるようにしてみました。

有料の監視ツールを使うほどでもないので、簡単に無料でできるか調べると、
アシアルさんでいいのを発見!これを使ってDBも監視するようにしました。
以下監視プログラムです。

move_check_server.php (外部のサーバーに設置cronで定期実行)

mb_language("ja");
mb_internal_encoding("UTF-8");
define('SERVER_IP', 'xxx.xxx.xxx.xxx');
define('SERVER_NAME', 'xxx.jp');
define('MYSQL_URL', 'http://xxxx.jp/move_check_db.php');
define('MAIL_TO', 'xxx@xxx.jp');
define('MAIL_FROM', 'error@xxx.jp');
$result = '';
//pingチェック
$ping_command_str = "ping -c 3 -w 5 ". SERVER_IP;
if (strstr(`$ping_command_str`, '100% packet loss')) {
$result .= "サーバー(ping)が停止しています。\n";
}
//webアクセスチェック
if ($res = file_get_contents(MYSQL_URL)) {
// DB(MySQL)アクセスチェック
if ($res == 'error') {
$result .= "DB(MySQL)が停止しています。\n";
}
} else {
$result .= "httpdが停止しています。\n";
}
//停止していればをメール送信
if ($result != '') {
$subject = SERVER_NAME. "(". SERVER_IP. ")が停止しています。";
mb_send_mail(MAIL_TO, $subject, $result, 'From: '. MAIL_FROM);
}

move_check_db.php (監視するサーバーに設置)

define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'xxx');
define('MYSQL_PASS', 'xxx');
$link = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die("error");
if ($link) {
mysql_close($link);
echo 'ok';
}

良かったら使ってください!