update mdstat-parser.pl script to support RAID 0 and report WARNING if array is rebuilding

This commit is contained in:
Daniel Berteaud 2013-04-11 17:21:53 +02:00
parent 912f470706
commit 0de50fc150

32
root/var/lib/zabbix/bin/mdstat-parser.pl Normal file → Executable file
View File

@ -6,6 +6,10 @@
# Slightly modified by Daniel B. for integration on SME Server / Zabbix # Slightly modified by Daniel B. for integration on SME Server / Zabbix
# 24 Apr 2009 # 24 Apr 2009
# - One line Repport
# - Support RAID 0 Array
# - Repport Warning if an array is rebuilding
# #
# Simple parser for /proc/mdstat that outputs status of all # Simple parser for /proc/mdstat that outputs status of all
@ -67,9 +71,13 @@ while (<FILE>) {
push @raids, $dev; push @raids, $dev;
my @array = split(/ /); my @array = split(/ /);
$devs_total{$dev} = 0;
my $devs_up = 0;
my $missing = 0;
for $_ (@array) { for $_ (@array) {
$level{$dev} = $1 if /^(raid\d+)$/; $level{$dev} = $1 if /^(raid\d+)$/;
next if ! /(\w+)\[\d+\](\(.\))*/; next if ! /(\w+)\[\d+\](\(.\))*/;
$devs_total{$dev}++;
if ($2 eq "(F)") { if ($2 eq "(F)") {
$failed_devs{$dev} .= "$1,"; $failed_devs{$dev} .= "$1,";
} }
@ -78,6 +86,7 @@ while (<FILE>) {
} }
else { else {
$active_devs{$dev} .= "$1,"; $active_devs{$dev} .= "$1,";
$devs_up++;
} }
} }
if (! defined($active_devs{$dev})) { $active_devs{$dev} = "none"; } if (! defined($active_devs{$dev})) { $active_devs{$dev} = "none"; }
@ -88,26 +97,34 @@ while (<FILE>) {
else { $failed_devs{$dev} =~ s/,$//; } else { $failed_devs{$dev} =~ s/,$//; }
$_ = <FILE>; $_ = <FILE>;
/(\d+)\ blocks\ \[(\d+)\/(\d+)\]\s+\[(.*)\]$/; /(\d+)\ blocks\ (.*)(\[.*\])\s?$/;
$size{$dev} = int($1/1024); $size{$dev} = int($1/1024);
#print "$3\n";
$missing = 1 if ($3 =~ m/_/);
if ($size{$dev} > 1024){ if ($size{$dev} > 1024){
$size{$dev} = int($size{$dev}/1024)."GB"; $size{$dev} = int($size{$dev}/1024)."GB";
} }
else{ else{
$size{$dev} .= "MB"; $size{$dev} .= "MB";
} }
$devs_total{$dev} = $2; $_ = <FILE>;
my $devs_up = $3; if (($devs_total{$dev} > $devs_up) || ($failed_devs{$dev} ne "none") || (($missing) && (!/recovery/))) {
my $stat = $4;
if ($devs_total{$dev} > $devs_up or $failed_devs{$dev} ne "none") {
$status{$dev} = "Degraded"; $status{$dev} = "Degraded";
$result = "CRITICAL"; $result = "CRITICAL";
$retval = $ERRORS{"CRITICAL"}; $retval = $ERRORS{"CRITICAL"};
} }
else{ else {
$status{$dev} = "Optimal"; $status{$dev} = "Optimal";
}
if (/recovery/){
$status{$dev} = "Rebuilding";
if ($result eq "OK"){
$result = "WARNING";
$retval = $ERRORS{"WARNING"};
}
} }
} }
print "$result: "; print "$result: ";
foreach my $raid (@raids){ foreach my $raid (@raids){
@ -125,6 +142,7 @@ Check status of Linux SW RAID
Author: Michal Ludvig <michal\@logix.cz> (c) 2006 Author: Michal Ludvig <michal\@logix.cz> (c) 2006
http://www.logix.cz/michal/devel/nagios http://www.logix.cz/michal/devel/nagios
Modified by Daniel B. <daniel\@firewall-services.com>:
Usage: mdstat-parser.pl [options] Usage: mdstat-parser.pl [options]