サーバー監視スクリプトを修正しました。
LINUX, Perl 2 月 16th. 2008, 3:32pm以前作成したサーバー監視スクリプトにバグが見つかったので修正しました。
Socketで接続後にレスポンスから取得した文字列が静的コンテンツと動的コンテンツの場合で違うことが判明したのです。
これは常識?( ゜Д゜ )
■静的コンテンツの場合
・HTTPヘッダー終了後にコンテンツのソース
■動的コンテンツ(CGIやPHP)の場合
・HTTPヘッダー終了後にコンテンツのサイズ?らしき数字(英数字の時もある)
・次行にコンテンツのソース
・最後に0
というようなレスポンスだったので、これに対応させるよう修正を加えました。
この機能は監視対象のサーバーのベータベース接続のチェックやロードアベレージのチェックなどに使うことを目的としています。(つまりスクリプトによる動的コンテンツということ)
このバグになぜ気が付いたのかというとload averageが22を突破したという出来事があったので、自宅サーバーにロードアベレージをチェックしてステータスを返すスクリプトを設置して、このスクリプトをサーバー監視スクリプトで監視しようと思ったのです。
以下がロードアベレージをチェックするスクリプト
#!/usr/bin/perl -w
use strict;
$ENV{’LANG’} = ‘en’;
my $UPTIME = `uptime`;
$UPTIME =~ s/.*load average: ([0-9\.]+), [0-9\.]+, [0-9\.]+.*/$1/;
$UPTIME =~ s/\s+//g;print “Content-type: text/plain\n\n”;
if ($UPTIME > 10) {
print “Load average is Unhealthy!($UPTIME)”;
} else {
print “Load average is Healthy”;
}exit;
でサーバー監視スクリプトのHttpdChk.confは以下のように設定
www.example.jp/uptime.cgi hoge@example.jp Load average is Healthy
これで自宅サーバーのロードアベレージが10を超えると携帯にメールがくるようになりました。( ´ー`)