サーバーの死活をチェックする方法を考える
SNMPでやりたかったけど、死活だけを調べるだけなんだよなぁ…
ってできたのがpingのレスポンスで判断する方法w
servers.txt
サーバーのIPアドレスとそのサーバーが死んでるときに知らせるメールアドレスのリスト。IPアドレスとメール送信先とはタブで区切って、複数のメール送信先がある場合はカンマ区切りでOK。
- 192.168.0.1 aaa@bbb.ccc,xxx@yyy.zzz
- 192.168.0.2 aaa@bbb.ccc,xxx@yyy.zzz
- 192.168.0.3 xxx@yyy.zzz
- 192.168.0.4 aaa@bbb.ccc
ping.php
servers.txtを読んでリストを取得。pingで2秒以内にレスポンスがなかったサーバーは死亡扱い。
$servers = null;
if ($fp=fopen("servers.txt","r")) {
while (!feof($fp)) {
$l = trim(fgets($fp,2048));
if ( strpos($l,"\t")===FALSE || strpos($l,'#')!==FALSE ) continue;
list($ip,$mails) = explode("\t",$l);
system("ping -c 1 -w 2 $ip",$status);
if ($status==1) {
$mails = explode(',',$mails);
foreach ($mails as $mail) $servers[$mail][] = $ip;
}
}
fclose($fp);
}
if ($servers==null) die;
foreach ($servers as $mail => $ips) {
$subject = "Servers are down!";
$body = "Servers are down.\nCheck them right now.\n\n ".implode("\n ",$ips);
mail($mail,$subject,$body);
}
2012/07/03 19:59