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からでもコマンドが使えるので同じことができます。
コメント
コメントフォーム
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













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