summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xnagios-check-raid.pl28
1 files changed, 21 insertions, 7 deletions
diff --git a/nagios-check-raid.pl b/nagios-check-raid.pl
index 504d622..7919e26 100755
--- a/nagios-check-raid.pl
+++ b/nagios-check-raid.pl
@@ -15,6 +15,7 @@
# ------------------------------------------------------------------------------
# Date Author Reason
# ---- ------ ------
+# 2008-03-31 Peter Palfrader Return warning on running resync
# 2007-11-07 Peter Palfrader Return unknown if /proc/mdstat does not exist
# 05/10/2004 Peter Palfrader Make it work without that 'use util (vars)'
# 14/06/2003 TN Initial Release
@@ -39,7 +40,7 @@ sub print_usage ();
$ENV{'PATH'}='';
$ENV{'BASH_ENV'}='';
$ENV{'ENV'}='';
-my ( $line, $prevline, $stat, $state ,@device, $msg, $status, $timeout);
+my ( $line, $stat, $state ,@device, $msg, $status, $timeout);
$stat="/proc/mdstat";
@@ -86,20 +87,33 @@ open (FH, $stat) or print("UNKNOWN: Cannot open $stat: $!\n"), exit $ERRORS{'UNK
$state = $ERRORS{'OK'};
$msg ="";
+my @resyncing = ();
+my $device = '';
+
# Now check the mdstat file..
while (<FH>) {
- $line= $_;
- if( $line =~ / \[_|_\]|U_|_U /) {
+ $line = $_;
+ if ($line =~ /^(md.*) /) {
+ $device = $0;
+ } elsif( $line =~ / \[_|_\]|U_|_U /) {
$state = $ERRORS{'CRITICAL'};
- @device = split(/ /,$prevline);
- $msg = $msg . $device[0] . ": - ";
- }
- $prevline = $line;
+ $msg = $msg . $device . ": - ";
+ }
+ elsif ( $line =~ / resync /) {
+ # [==>..................] resync = 10.3% (15216320/146994624) finish=2153.2min speed=1018K/sec
+ my ($percent) = ($line =~ m# resync = ([0-9.]+%)#);
+ my ($finish) = ($line =~ m# finish=([0-9.]+min)#);
+ my ($speed) = ($line =~ m# speed=([0-9.]+K/sec)#);
+ push @resyncing, "$device ($percent done, finish in $finish at $speed)";
+ }
}
close (FH);
if ( $state == $ERRORS{'CRITICAL'} ) {
print "CRITICAL - Device(s) $msg have failed\n";
+} elsif ( scalar @resyncing > 0 ) {
+ print "WARNING: Resyncing: ".(join "; ", @resyncing)."\n";
+ $state = $ERRORS{'WARNING'};
} elsif ( $state == $ERRORS{'OK'} )
{ print "OK - All devices are online\n"; }
exit $state;