Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I've use nagios plugin check_dell_omreport.pl. Everything worked fine until recently. Now there is a problem, and I would like to consult. Perhaps someone could help. The problem is that Dell was added Vendor Lock for RAID controllers, not certified drives by them. In particular, H700 H800. I carefully checked the settings on my server, everything is normal. But the plug-in checks for alerts from the OMSA alertlog. It sees warning messages like this:

Severity      : Non-Critical
ID            : 2335
Date and Time : Tue Feb 22 21:17:22 2011
Category      : Storage Service
Description   : Controller event log: PD 05(e0x20/s5) is not a
certified drive:  Controller 0 (PERC H700 Integrated)

Thus, despite the fact that everything is OK, the plugin displays OK and Warning:

WARNING: Controller0=Ok/Ready [ Battery0=Ok/Ready Vdisk0=Ok/Ready 0 [
0:0:0=Non-Critical/Online 0:0:1=Non-Critical/Online ] Vdisk1=Ok/Ready
1 [ 0:0:2=Non-Critical/Online 0:0:3=Non-Critical/Online
0:0:4=Non-Critical/Online 0:0:5=Non-Critical/Online ] ]

I'm trying to resolve this issue for several days. I'd downgrade the controller firmware. Did not help. Discs is not possible to replace.

Has someone an ideas how to fix these warnings? I supposee by mysself, that there's no other ways, as try to edit the Perl script. It's non-modified and here's a link to it:

http://exchange.nagios.org/directory/Plugins/Hardware/Server-Hardware/Dell/check_dell_omreport/details

Maybe there is a patch for it, already written by someone?

share|improve this question
    
Thanks everybody. My code changes have helped. Alert was updated and is in the status of OK. –  Evgeniy Yablokov Feb 26 '11 at 1:42

4 Answers 4

This patch help:

    @@ -239,15 +239,15 @@
                                $progress = "";
                        }
                        $message .= " $an=$state$progress";
-                       if( $state =~ /^ok\/(ready|online)/i ) {
+                       if( $state =~ /^ok\/(ready|online)|non-critical/i ) {
                                $ok++;
-                       } elsif ($state =~ /(degrad|regen|rebuild|non-critical)/i ) {
+                       } elsif ($state =~ /(degrad|regen|rebuild)/i ) {
                                $warn++;
                        } else {
                                $crit++;
                                $message .= "**";
                        }
                        # print STDERR "adisk=$an Status=$adisk->[$adisk_ndx][$adisk_flds->{Status}] State=$adisk->[$adisk_ndx][$adisk_flds->{State}]\n";
                }
                $message .= " ]";
        }

share|improve this answer
    
Any explanation! –  Khaled Feb 21 '13 at 8:05

Thanks, but, unfortunately, it doesn't trick. But I made another change:

} elsif ($state =~ /(degrad|regen|rebuild)/i ) {
        $warn++;
} elsif ($state =~ /(non-critical)/i ) {
        $ok++;

I delete 'non-critical' at WARN and add one more part in the cycle, where I wrote tht for 'non-critical' there must be $ok++.

It does the trick. But nagios alert don't hide. :( But it shows that all OK:

OK: Controller0=Ok/Ready [ Battery0=Ok/Ready Vdisk0=Ok/Ready 0 [ 0:0:0=Non-Critical/Online 0:0:1=Non-Critical/Online ] Vdisk1=Ok/Ready 1 [ 0:0:2=Non-Critical/Online 0:0:3=Non-Critical/Online 0:0:4=Non-Critical/Online 0:0:5=Non-Critical/Online ] ]

I run the plugin with Devel::Trace and what I see:

perl -T -d:Trace /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl

......
some stdout
......
>> /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl:205:    for ( $vdisk_ndx=0; $vdisk_ndx < @{$vdisk} ; $vdisk_ndx++ ) {
>> /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl:256:    $message .= " ] ";
>> /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl:163: for ( $ctrlr_ndx=0; $ctrlr_ndx < @{$controller} ; $ctrlr_ndx++ ) {
>> /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl:259: if ( $crit != 0 ) {
>> /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl:266:    print "OK:$message\n";
OK: Controller0=Ok/Ready [ Battery0=Ok/Ready Vdisk0=Ok/Ready 0 [ 0:0:0=Non-Critical/Online 0:0:1=Non-Critical/Online ] Vdisk1=Ok/Ready 1 [ 0:0:2=Non-Critical/Online 0:0:3=Non-Critical/Online 0:0:4=Non-Critical/Online 0:0:5=Non-Critical/Online ] ] 
>> /usr/lib64/nagios/plugins/mon/check_dell_omreport.pl:267:    exit(0);

exit(0) is OK. But alert is here. :( And I do a force recheck for it.

share|improve this answer

I had tried that plugin and decided I would rather just use SNMP directly with the check_snmp plugin.

For example I have a couple of services like:

define service {
        service_description     Dell Controller State
        ...
        check_command           check_snmp!-o 1.3.6.1.4.1.674.10893.1.20.130.1.1.5.1 -s 1
}

define service {
        service_description     Dell Model and SVC Tag
        ...
        check_command           check_snmp!-m MIB-Dell-10892 -o chassisServiceTagName.1,chassisModelName.1

And the command for reference is:

define command {
        command_name    check_snmp
        command_line    /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$USER3$' $ARG1$
}

Pablo's answer of changing the script does seem like the right thing to do. But I think it is worth while just to get the MIB , walk it, and know exactly what you are getting.

share|improve this answer

Looks like the code is just bogus.

line 194 of the perl script says:

    } elsif ( $state =~ /non-critical|degrad|charging|learning/i ) {
        $warn++;

So, if it detects "non-critical" in the text then it gets moved up to warning.

change

    } elsif ( $state =~ /non-critical|degrad|charging|learning/i ) {

to

    } elsif ( $state =~ /degrad|charging|learning/i ) {
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.