ぽっぺん日記@karashi.org
2007-01-31(Wed) [長年日記]
_ [FreeBSD][sysadmin][Perl]gmirror簡易監視用Nagiosプラグイン
gmirrorがちゃんと動いているかどうかNagiosで確認したくなったので、プラグインをググってみたけれど見付からない。
ってことで、Perlの習作も兼ねて書いてみた(smarttoolsがあれば充分なんだけど)。
ただ単に
# /sbin/gmirror status -s
の結果を取って、DEGRADEDが出たら、CRITICALを送っているだけ。めちゃくちゃ簡単で申し訳ない。m(__)m
簡単すぎて役に立たないと思うけど、ツッコミを頂ければ幸いです。
check_gmirror:
#!/usr/local/bin/perl
use warnings;
use strict;
use Getopt::Long;
use Readonly;
use lib "/usr/local/libexec/nagios";
use utils qw(%ERRORS &print_revision &support);
Readonly my $PROGNAME => 'check_gmirror';
Readonly my $REVISION => 'Revision: 0.0.1 $';
Readonly my $GMIRROR => '/sbin/gmirror';
Readonly my $GMIRROR_ARGS => 'status -s';
my ($opt_h, $opt_V);
my ($result, $message, @status);
Getopt::Long::Configure('bundling');
GetOptions(
"V" => \$opt_V, "version" => \$opt_V,
"h" => \$opt_h, "help" => \$opt_h,
);
if ($opt_V) {
print_revision($PROGNAME, $REVISION);
exit $ERRORS{'OK'};
}
if ($opt_h) {
print_help();
exit $ERRORS{'OK'};
}
$result = 'OK';
$message = q{};
# Check gmirror command
if ( !( (-f $GMIRROR) && (-x $GMIRROR) ) ) {
$message = "$GMIRROR is not executable";
$result = 'WARNING';
}
else {
my $return_val = system("$GMIRROR $GMIRROR_ARGS >/dev/null 2>&1");
if ($return_val != 0) {
$message = "Error while calling $GMIRROR";
$result = 'WARNING';
}
}
if ($result ne 'OK') {
print "GMIRROR $result: $message\n";
exit $ERRORS{$result};
}
# Check gmirror status
@status = `$GMIRROR $GMIRROR_ARGS 2>/dev/null`;
STATUS:
for my $line (@status) {
chomp $line;
if ($line =~ m{COMPLETE}xms) {
$message = append_message($message, $line, q{|});
}
elsif ($line =~ m{DEGRADED}xms) {
$result = 'CRITICAL';
$message = append_message($message, $line, q{|});
}
}
print "GMIRROR $result: $message\n";
exit $ERRORS{$result};
sub append_message {
my($message, $new_message, $delimiter) = @_;
if (length $message > 0) {
$message .= $delimiter;
}
$message .= $new_message;
return $message;
}
sub print_help {
print_revision($PROGNAME, $REVISION);
print build_usage($PROGNAME);
print "\n";
#support();
}
sub build_usage {
return <<"END_USAGE";
Usage: $PROGNAME
Options:
-h, --help
Print detailed help screen
-V, --version
Print version information
END_USAGE
}
[ツッコミを入れる]
