Назад | Перейти на главную страницу

Проблема с предупреждением Dell H700 Nagios

Я использую плагин nagios check_dell_omreport.pl. До недавнего времени все работало нормально. Теперь возникла проблема, и я хотел бы посоветоваться. Возможно, кто-то сможет помочь. Проблема в том, что Dell добавила Vendor Lock для RAID-контроллеров, а не сертифицированных ими дисков. В частности, H700 H800. Внимательно проверил настройки на своем сервере, все в норме. Но плагин проверяет наличие предупреждений из журнала предупреждений OMSA. Он видит такие предупреждающие сообщения:

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)

Таким образом, несмотря на то, что все в порядке, плагин отображает ОК и Предупреждение:

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 ] ]

Несколько дней пытаюсь решить эту проблему. Я бы понизил прошивку контроллера. Не помогло. Замена дисков невозможна.

Есть у кого-нибудь идеи, как исправить эти предупреждения? Сам предполагаю, что другого пути, как попытаться отредактировать Perl-скрипт, нет. Он не модифицирован, и вот ссылка на него:

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

Может есть патч к нему, уже кем-то написанный?

Похоже, код просто подделка.

строка 194 скрипта perl говорит:

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

Таким образом, если он обнаруживает «некритичный» в тексте, он перемещается в категорию «предупреждение».

изменение

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

к

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

Этот патч поможет:

    @@ -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 .= " ]";
        }

Спасибо, но, к сожалению, это не обман. Но я сделал другое изменение:

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

Я удаляю «некритичный» в WARN и добавляю еще одну часть в цикл, где я написал tht для «некритического», должно быть $ ok ++.

Это делает свое дело. Но nagios alert не прячутся. :( Но показывает, что все ок:

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 ] ]

Я запускаю плагин с Devel :: Trace и вижу:

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) в порядке. Но здесь тревога. :( И делаю форс-перепроверку.

Я попробовал этот плагин и решил, что лучше просто использовать SNMP напрямую с check_snmp плагин.

Например, у меня есть несколько сервисов:

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

И команда для справки:

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

Ответ Пабло об изменении сценария кажется правильным. Но я думаю, что стоит просто получить MIB, пройтись по нему и точно знать, что вы получаете.