サーバ監視には Hobbit を使ってます (Nagios は設定ファイルを書くのが面倒で挫折)。
独自の監視スクリプト (クライアントサイド) を作る必要があったので、「Hobbit監視 - 自作の監視スクリプトはどうやって作りますか?」を参考に書いてみた。
上記の例は shell script なので Perl で書き直して、ついでに使い回せるようにモジュール化。
package HobbitClientScript; use strict; use warnings; use Carp; use base qw/ Class::Accessor::Fast /; __PACKAGE__->mk_accessors(qw/ column color message title /); sub new { my $class = shift; my $self = $class->SUPER::new(@_); $self->green('green') unless defined $self->color; $self->message('') unless defined $self->message; $self->title('') unless defined $self->title; return $self; } sub green { shift->color('green') } sub yellow { shift->color('yellow') } sub red { shift->color('red') } sub add_message { my ( $self, $message ) = @_; $self->message( $self->message. $message ); } sub report { my $self = shift; # Tell Hobbit about it my $report = sprintf( "status %s.%s %s %s\n\n%s\n\n%s", $ENV{MACHINE} || $ENV{HOSTNAME}, $self->column, $self->color, scalar localtime, $self->title, $self->message, ); if ( defined $ENV{BB} && defined $ENV{BBDISP} ) { system( $ENV{BB}, $ENV{BBDISP}, $report ); } else { croak("env BB or BBDISP is not defined."); } } 1;
使い方。title, column を定義してオブジェクトを作って、add_message() でメッセージ追加。
red, yellow, green メソッドでステータスを更新して (default green)、report() で hobbit に報告。
#!/usr/bin/perl use HobbitClientScript; my $hobbit = HobbitClientScript->new({ column => 'mytest', title => 'mytest status', }); if ( OK ) { $hobbit->add_message('ok'); } elsif ( WARNING ) { $hobbit->add_message('alert!'); $hobbit->yellow; } else { # NG $hobbit->add_message('emergency!!'); $hobbit->red; } $hobbit->report();
このスクリプトを ~hobbit/client/ext に置いて、~hobbit/client/etc/clientlaunch.cfg に登録する。
[myscript] ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg CMD $HOBBITCLIENTHOME/ext/myscript.pl LOGFILE $HOBBITCLIENTHOME/logs/myscript.log INTERVAL 5m