PHPスクリプト1つでできる簡単サーバ監視
こんばんは、牧野です。最近急に寒くなったせいか、風邪を引きかけています。。。アシアル社内はつい最近までTシャツ一枚で過ごせるくらい暑かったのですが、この前の金曜日から急に寒くなりました。皆さんも風邪には十分お気をつけ下さい。
さて、今日はサーバ監視のTIPSです。以前紹介したcactiや、nagiosのようなソフトを使わなくても、php(とunixコマンド)だけで簡単に監視プログラムを作ることができます。(ただしunixサーバ限定です。)
今回は、監視対象サーバへのping、ウェブページへのアクセス、スクリプト設置サーバのハードディスク、メモリの使用量をチェックすることにします。プログラムは次のような感じです。
check_server.php
これだけです。あとは、この監視スクリプトをcronで定期的に実行するようにしておけば、監視結果がメールで送られてくるようになります。
crontab -e
phpコマンドとスクリプトのパスはサーバの環境に合わせます。これで10分ごとに実行されます。
メール文面

ちょっと直せばエラーがあったり、容量が少なくなった時だけ送るようにできます。
簡単に補足すると、、
コマンドを`(バッククォート)で囲うと実行、出力結果の取得が簡単にできて便利です。
pingコマンドは-cオプションでパケット送信の数を、-wでコマンド実行時間を指定しています。
file_get_contentsでURLにアクセスするには、allow_url_fopenが1になっている必要があるので、うまくいかない場合はphp.iniを確認します。
freeコマンドは-mオプションでメガバイトで表示させています。
freeコマンドを実行すると、
プログラムでは-/+で始まる行のusedとfreeを取り出しています。
ここのfreeの値が空きメモリだと考えて大体問題ありません。
シェルスクリプトの方が格好よくみえたりしますが、PHPからでもコマンドが使えるので同じことができます。
さて、今日はサーバ監視のTIPSです。以前紹介したcactiや、nagiosのようなソフトを使わなくても、php(とunixコマンド)だけで簡単に監視プログラムを作ることができます。(ただしunixサーバ限定です。)
今回は、監視対象サーバへのping、ウェブページへのアクセス、スクリプト設置サーバのハードディスク、メモリの使用量をチェックすることにします。プログラムは次のような感じです。
check_server.php
- $SERVER_IP
= 'xxx.xxx.xxx.xxx'; - $URL
= 'http://www.asial.co.jp'; - $MAIL_TO
= 'hogehoge@fugafuga'; - $MAIL_FROM
= 'systeminfo@fugafuga'; - //pingチェック
- $ping_command_str
= "ping -c 3 -w 5 $SERVER_IP"; - if
(!strstr(`$ping_command_str`, '100% packet loss')) { $result = "$SERVER_IP ping ok\n"; - }
else { $result = "$SERVER_IP ping ng\n"; - }
- //webアクセスチェック
- if
($res = file_get_contents($URL)) { $result .= "{$URL} access ok\n"; - }
else { $result .= "{$URL} access ng\n"; - }
- //ハードディスク容量チェック
- $current_space
= intval(disk_free_space('/') / 1024 / 1024); - $total_space
= intval(disk_total_space('/') / 1024 / 1024); - $result
.= 'disk free: '. $current_space .'MB/'. $total_space ."MB\n"; - //メモリ使用量チェック
- $memory_result
= explode("\n", `free -m`); - $memory_pattern
= "#^-/\+ buffers/cache: +([0-9]+) +([0-9]+)$#"; - preg_match($memory_pattern,
$memory_result[2], $memory_info); - $result
.= 'used memory: '. $memory_info[1] .'MB/'. intval($memory_info[1] + $memory_info[2]) ."MB\n"; - //結果をメール送信
- $mail_header
= "From: $MAIL_FROM"; - mail($MAIL_TO,
'check result', $result, $mail_header);
これだけです。あとは、この監視スクリプトをcronで定期的に実行するようにしておけば、監視結果がメールで送られてくるようになります。
crontab -e
- */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コマンドを実行すると、
- $
free -m total used free shared buffers cached - Mem:
2026 1103 922 0 113 814 - -/+
buffers/cache: 176 1849 - Swap:
1983 0 1983
プログラムでは-/+で始まる行のusedとfreeを取り出しています。
ここのfreeの値が空きメモリだと考えて大体問題ありません。
シェルスクリプトの方が格好よくみえたりしますが、PHPからでもコマンドが使えるので同じことができます。
コメント
コメントフォーム
トラックバック
-
- PHPでできる簡単サーバ監視 from 浜村拓夫の世界
- サーバの稼働状況を通知するPHPスクリプトが紹介されていた。 PHPスク...
2008年11月16日 14:35
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



有難う御座いました!
お役に立てたようでよかったです!
pingの死活監視、cronで自動化したかったんです笑
参考にさせて頂きました。
ありがとうございます。