|
トップ > 自分で作る管理用スプリクト > 負荷状況とディスク使用をチェック |
|
【スプリクト1】 負荷状況とディスク使用をWebブラウザでチェックする |
|
|
|
|
|
私の場合、サーバの日々の様子をtopコマンド やvmstatコマンド 、dfコマンド などを使って監視していますが、
sample1はtopコマンド とdfコマンド を閲覧するようになっています。
単純にPHPスプリクトからLINUXコマンドをたたき、出力結果に多少の修正を加えています。
修正点
・ロードアベレージ(サーバの負荷)の値によって、注意を要する数値を超えた場合に赤色文字で表示する。
・ディスク使用率の設定値(%)を超えた場合、赤色文字で表示する。
ロードアベレージの数値の見方はいろいろあると思いますが、トランザクションが発生するサービスを動かしている場合、2.00を超えないように気をつけています。やはり2.00を定常的に超えてしまうと、トランザクションに少し遅延が発生していまします。
このスプリクトでは、設定値を1.50としています。
5分間の平均値が1.50を超えていると、vmstatコマンド などを使って、リアルタイムに監視するようにしています。
ディスク使用率は、よほど大量に何かを出力(ディスクに対する書き込み)を行わない限り、あまり気にする必要はないのですが、100%に近くなってくると、サーバーは予期せぬ動きをしてしまいます。
特にログの出力によってファイルシステムをいっぱいにしてしまった事故(ミス?)は意外と多いもので、1日1回は見ておくほうがよいでしょう。このスプリクトでは使用率75%を超えると、赤文字表示するようになっています。
出力されるのはこんなイメージ
PHPソースはこんな感じ
echo "<html><head><meta http-equiv=Content-Type content=text/html; charset=Shift_JIS>\n";
echo "<style type='text/css'>\n";
echo ".red { color: red; font-weight: bold; }\n";
echo "p.head { background: #fff; margin: 0px 20px; padding: 10px; border: 1px dotted #aaa; }\n";
echo "p.list { background: #fff; margin: 5px 20px; padding: 20px; border: 1px dotted #aaa; }\n";
echo "</style></head><body bgcolor=#DDF3DE>\n";
exec("hostname",$result0);
$YMD = date('Y/m/d H:i:s', time());
echo "<p align=right><b>$result0[0] $YMD</b></p>\n";
//topコマンド
exec("top -n 1 b",$result1);
echo "<p class=head><b>サーバー負荷情報(top)</b></p>\n";
echo "<p class=list><table border=0>\n";
while (list($key, $value) = each($result1)) {
if (strlen($value) == 0) continue;
$average_tmp = strstr($value, 'average:');
if (strlen($average_tmp) > 0) {
echo "\t<tr><td colspan=2>サーバー負荷(load average)</td></tr>\n";
$average_tmp = str_replace('average: ', '', $average_tmp);
list($average1,$average5,$average15) = split ('[, ]+', $average_tmp);
$average_tmp2 = array("1" => $average1, "5" => $average5, "15" => $average15);
while(list ($key, $val) = each($average_tmp2)) {
if ($val >= 1.5) { ←負荷平均の境界値を設定
print ("\t<tr><td
nowrap> $key 分間の平均:</td><td class=red
width=100%>$val</td></tr>\n"); }
else {
print
("\t<tr><td nowrap> $key 分間の平均:</td><td
width=100%><b>$val </b></td></tr>\n"); }
}
echo "\t<tr><td colspan=2></td></tr>\n";
}
echo "\t<tr><td colspan=2>$value</td></tr>\n";
if (strlen(strstr($value, 'Swap')) > 0) break;
}
echo "</table></p>\n";
//dfコマンド
exec("df -h",$result2);
echo "<br><br><p class=head><b>ディスク利用状況(df)</b></p>\n";
echo "<p class=list><table border=0>\n";
while (list($key, $value) = each($result2)) {
list($dir,$block,$used,$available,$per,$mount) = split ('[ ]+', $value);
echo "\t<tr>\n";
echo "\t\t<td width=100>$dir</td>\n";
echo "\t\t<td align=right width=50>$block</td>\n";
echo "\t\t<td align=right width=50>$used</td>\n";
echo "\t\t<td align=right width=50>$available</td>\n";
$per_num = str_replace('%', '', $per);
if ($per_num >= 75) { ←赤文字表示するディスク利用限界値を設定
echo "\t\t<td align=right
width=50><b><font
color=red>$per</font></b></td>\n";
} else {
echo "\t\t<td align=right width=50>$per</td>\n";
}
echo "\t\t<td>$mount</td>\n";
echo "\t</tr>\n";
}
echo "</table></p></body></html>\n";
【プログラム設置の注意】
今回のようにシステム管理用のコマンドを使ったり、システムログを覗いたりするプログラムを作った場合、スクリプトの置き場所に細心の注意を払わなければ
なりません。 スクリプトにセキュリティホールを作らないようにするのはもちろんですが、Webサーバー側でパスワード認証を行ったり、管理用コンテンツ
専用のポートを設置したり、IPフィルターをかけたりといくつものアクセス制限の対策を施するべきでしょう。
設置する前にアクセス制限がうまく機能しているか、試してみるのがいいと思います。
【その他】
・ダウンロードはもちろん無料です。
・社内で使うツールなので、性能さえ落ちなければコーディングのキレイさは求めないで適当に作っています。ご了承下さい。
・この程度のプログラムに著作権などがあるわけもないので、カスタマイズは自由に行って下さい。
|