個人で作ってるサイトの死活監視を「再び」ちゃんとやろうと思っています。
そこで、Nagios使うまでも無く、Kazuhoさんの Kazuho@Cybozu Labs: 監視とは継続的なテストである、という話 (もしくは cronlog とテストスクリプトを組み合わせた監視手法について) みてシンプルに死活監視できるよなーと思って、 「Perlスクリプト」を書いてみました。 「死活」のみの監視なんで、サイトが正常では無かったらメールを飛ばすだけでいいという想定です。 設定をYAMLで持たせたかったり、メールをPerlから送りたかったりしたんで、 少しKazuhoさんのやってることより複雑になりましたが、まぁ簡単です。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use Email::Sender::Simple qw(sendmail);
use Email::MIME;
use Try::Tiny;
use YAML qw(LoadFile);
use Path::Class qw( file );
my $file = $ARGV[0] || "config.yaml";
die "Can't open $file" unless ( -f file($file)->stringify );
my $config = LoadFile( file($file) );
my $ua = LWP::UserAgent->new( agent => 'Monita/0.01', timeout => 30 );
for my $url ( @{ $config->{url} } ) {
my $res = $ua->get($url);
send_report( $res ) unless $res->is_success;
}
sub send_report {
my $res = shift;
my $email = Email::MIME->create(
header => [
From => $config->{from},
To => $config->{to},
Subject => $res->request->uri . ' : ' . $res->code,
],
attributes => { content_type => 'text/plain', },
body => $res->status_line,
);
try { sendmail($email) }
catch { my $error = $_; warn $error->message };
}
このようなconfig.yamlを用意して
--- from: xxxxxx@xxxxxx to: xxxxxx@xxxxxx url: - http://hoge.com/ - http://moge.com/
$ ./monita.pl config.yaml
と実行すればURLのリストにあるサイトで、200番以外のレスポンスを返却した時に、 ステータス情報と共にメールが届きます。 これをcrontabで定期的に実行すればOKですね。 リソースの定期的な把握についてはcactiとかcloudforecastとか使えばいいっすね。