サーバーの死活をチェックする方法を考える

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
タグ