個人で作ってるサイトの死活監視を「再び」ちゃんとやろうと思っています。
そこで、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とか使えばいいっすね。