アシアルの中の人が技術と思いのたけをつづるブログ

PHPスクリプト1つでできる簡単サーバ監視

タグ [  Tech  サーバ監視  ]
こんばんは、牧野です。最近急に寒くなったせいか、風邪を引きかけています。。。アシアル社内はつい最近までTシャツ一枚で過ごせるくらい暑かったのですが、この前の金曜日から急に寒くなりました。皆さんも風邪には十分お気をつけ下さい。

さて、今日はサーバ監視のTIPSです。以前紹介したcactiや、nagiosのようなソフトを使わなくても、php(とunixコマンド)だけで簡単に監視プログラムを作ることができます。(ただしunixサーバ限定です。)
今回は、監視対象サーバへのping、ウェブページへのアクセス、スクリプト設置サーバのハードディスク、メモリの使用量をチェックすることにします。プログラムは次のような感じです。

check_server.php
  1. <?php
  2. $SERVER_IP = 'xxx.xxx.xxx.xxx';
  3. $URL = 'http://www.asial.co.jp';
  4. $MAIL_TO = 'hogehoge@fugafuga';
  5. $MAIL_FROM = 'systeminfo@fugafuga';
  6.  
  7. //pingチェック
  8. $ping_command_str = "ping -c 3 -w 5 $SERVER_IP";
  9. if (!strstr(`$ping_command_str`, '100% packet loss')) {
  10.     $result = "$SERVER_IP ping ok\n";
  11. } else {
  12.     $result = "$SERVER_IP ping ng\n";
  13. }
  14.  
  15. //webアクセスチェック
  16. if ($res = file_get_contents($URL)) {
  17.     $result .= "{$URL} access ok\n";
  18. } else {
  19.     $result .= "{$URL} access ng\n";
  20. }
  21.  
  22. //ハードディスク容量チェック
  23. $current_space = intval(disk_free_space('/') / 1024 / 1024);
  24. $total_space   = intval(disk_total_space('/') / 1024 / 1024);
  25. $result .= 'disk free: '. $current_space .'MB/'. $total_space ."MB\n";
  26.  
  27. //メモリ使用量チェック
  28. $memory_result = explode("\n", `free -m`);
  29. $memory_pattern = "#^-/\+ buffers/cache: +([0-9]+) +([0-9]+)$#";
  30. preg_match($memory_pattern, $memory_result[2], $memory_info);
  31. $result .= 'used memory: '. $memory_info[1] .'MB/'. intval($memory_info[1] + $memory_info[2]) ."MB\n";
  32.  
  33. //結果をメール送信
  34. $mail_header = "From: $MAIL_FROM";
  35. mail($MAIL_TO, 'check result', $result, $mail_header);
  36. ?>

これだけです。あとは、この監視スクリプトをcronで定期的に実行するようにしておけば、監視結果がメールで送られてくるようになります。

crontab -e
  1. */10 * * * * /path/to/php /path/to/check_server.php

phpコマンドとスクリプトのパスはサーバの環境に合わせます。これで10分ごとに実行されます。

メール文面


ちょっと直せばエラーがあったり、容量が少なくなった時だけ送るようにできます。

簡単に補足すると、、
コマンドを`(バッククォート)で囲うと実行、出力結果の取得が簡単にできて便利です。
pingコマンドは-cオプションでパケット送信の数を、-wでコマンド実行時間を指定しています。
file_get_contentsでURLにアクセスするには、allow_url_fopenが1になっている必要があるので、うまくいかない場合はphp.iniを確認します。
freeコマンドは-mオプションでメガバイトで表示させています。
freeコマンドを実行すると、
  1. $ free -m
  2.              total       used       free     shared    buffers     cached
  3. Mem:          2026       1103        922          0        113        814
  4. -/+ buffers/cache:        176       1849
  5. Swap:         1983          0       1983
こんな感じで結果が出ます。
プログラムでは-/+で始まる行のusedとfreeを取り出しています。
ここのfreeの値が空きメモリだと考えて大体問題ありません。

シェルスクリプトの方が格好よくみえたりしますが、PHPからでもコマンドが使えるので同じことができます。

コメント

    • 非常に参考になりました!
      有難う御座いました!
    • コメントありがとうございます。
      お役に立てたようでよかったです!
    • とっても参考になりました。
      pingの死活監視、cronで自動化したかったんです笑

      参考にさせて頂きました。
      ありがとうございます。

コメントフォーム

認証
captcha_key
 

トラックバック