From b729ffe527c5e3f9c713969e275377e0d10725f8 Mon Sep 17 00:00:00 2001 From: Stephen Gran Date: Sat, 30 Jul 2011 13:34:00 +0100 Subject: [PATCH] new check for awkward PeRC controllers Signed-off-by: Stephen Gran --- config/nagios-master.cfg | 15 ++- .../checks/dsa-check-raid-megactl | 104 ++++++++++++++++++ dsa-nagios-checks/debian/changelog | 3 +- 3 files changed, 118 insertions(+), 4 deletions(-) create mode 100755 dsa-nagios-checks/checks/dsa-check-raid-megactl diff --git a/config/nagios-master.cfg b/config/nagios-master.cfg index 80d84a5..7a6cd3e 100644 --- a/config/nagios-master.cfg +++ b/config/nagios-master.cfg @@ -278,7 +278,7 @@ servers: heininen: address: 82.195.75.98 parents: gw-man-da - hostgroups: computers, acpid-hosts, service, squeeze + hostgroups: computers, acpid-hosts, service, squeeze, megactl nielsen: address: 82.195.75.99 parents: gw-man-da @@ -798,12 +798,12 @@ servers: englund: address: 86.59.118.148 parents: gw-sil - hostgroups: computers, acpid-hosts, service, apache2-hosts, squeeze, hassrvfs + hostgroups: computers, acpid-hosts, service, apache2-hosts, squeeze, hassrvfs, megactl # which raid? lindberg: address: 86.59.118.149 parents: gw-sil - hostgroups: computers, acpid-hosts, service, apache2-hosts, squeeze + hostgroups: computers, acpid-hosts, service, apache2-hosts, squeeze, megactl # which raid? abel: @@ -914,6 +914,9 @@ hostgroups: aacraid: alias: Hosts with Adaptec AACraid private: 1 + megactl: + alias: Hosts with LSI Logic MegaRAID, but not usable with megaraid check + private: 1 megaraid: alias: Hosts with LSI Logic MegaRAID private: 1 @@ -1975,6 +1978,12 @@ services: nrpe: "/usr/lib/nagios/plugins/dsa-check-raid-mpt" hostgroups: mptraid + ### + - + name: RAID - megactl + servicegroups: raid + nrpe: "/usr/lib/nagios/plugins/dsa-check-raid-megactl" + hostsgroups: megactl ### - name: process - slapd diff --git a/dsa-nagios-checks/checks/dsa-check-raid-megactl b/dsa-nagios-checks/checks/dsa-check-raid-megactl new file mode 100755 index 0000000..ae7a78c --- /dev/null +++ b/dsa-nagios-checks/checks/dsa-check-raid-megactl @@ -0,0 +1,104 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +my $devs = {}; +my @errs; +my @warn; +my @ok; + +my @cmd = ('sudo', 'megactl', '-Hv', '2>&1'); +my @output = `@cmd`; + +for my $line (@output) { + if ($line =~ /^(\w+)\s+/) { + my $dev = $1; + my @line = split /\s+/, $line; + $devs->{$dev}->{'header'} = \@line; + next; + } +} + +sub check_controller { + my $dev = shift; + my ($err, $warn, $ok) = undef; + $ok .= "$dev->{'header'}->[0]: "; + for my $stat (@{$dev->{'header'}}) { + if ($stat =~ /batt:(.*)/) { + if ($1 ne 'good') { + $warn .= "$dev->{'header'}->[0]: " unless $warn; + $warn .= "Battery: $1 "; + } + } + } + $ok = "$dev->{'header'}->[0]: ok "; + return ($ok, $err, $warn); +} + +sub check_ld { + my $dev = shift; + my ($err, $warn, $ok) = undef; + if ($dev->{'header'}->[5] ne 'online') { + $err .= "$dev->{'header'}->[0]: $dev->{'header'}->[5]"; + return ($ok, $err, $warn); + } + $ok = "$dev->{'header'}->[0]: ok "; + return ($ok, $err, $warn); +} + +sub check_pd { + my $dev = shift; + my ($err, $warn, $ok) = undef; + if ($dev->{'header'}->[5] ne 'online') { + $err .= "$dev->{'header'}->[0]: $dev->{'header'}->[5]"; + return ($ok, $err, $warn); + } + for my $stat (@{$dev->{'header'}}) { + if ($stat =~ /(^errs|media|other):/) { + $warn .= "$dev->{'header'}->[0]: " unless $warn; + $warn .= $stat . " "; + } + } + $ok = "$dev->{'header'}->[0]: ok "; + return ($ok, $err, $warn); +} + +for my $dev (sort keys %$devs) { + if ($dev =~ /^\w\d$/) { + my ($ok, $err, $warn) = check_controller($devs->{$dev}); + push @errs, $err if $err; + push @warn, $warn if $warn; + push @ok, $ok if $ok; + } elsif ($dev =~ /^\w\d\w\d$/) { + my ($ok, $err, $warn) = check_ld($devs->{$dev}); + push @errs, $err if $err; + push @warn, $warn if $warn; + push @ok, $ok if $ok; + } elsif ($dev =~ /^\w+\d+\w+\d+\w+\d+/) { + my ($ok, $err, $warn) = check_pd($devs->{$dev}); + push @errs, $err if $err; + push @warn, $warn if $warn; + push @ok, $ok if $ok; + } +} + +if (@errs) { + print "CRITICAL: "; + print @errs; + print "\n"; + exit 1; +} elsif (@warn) { + print "WARNING: "; + print @warn; + print "\n"; + exit 2; +} +unless (@ok) { + push @ok, "All devices OK"; +} +print "OK: "; +print @ok; +print "\n"; +exit 0; + diff --git a/dsa-nagios-checks/debian/changelog b/dsa-nagios-checks/debian/changelog index 02ef069..14bc791 100644 --- a/dsa-nagios-checks/debian/changelog +++ b/dsa-nagios-checks/debian/changelog @@ -10,8 +10,9 @@ dsa-nagios-checks (9X) Xnstable; urgency=low [ Stephen Gran ] * Add event_handler to restart services + * Add dsa-check-raid-megactl for awkward PeRC controllers - -- Stephen Gran Sat, 14 May 2011 15:12:41 +0100 + -- Stephen Gran Sat, 30 Jul 2011 13:30:07 +0100 dsa-nagios-checks (89) unstable; urgency=low -- 2.20.1