Я использую плагин 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-скрипт, нет. Он не модифицирован, и вот ссылка на него:
Может есть патч к нему, уже кем-то написанный?
Похоже, код просто подделка.
строка 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, пройтись по нему и точно знать, что вы получаете.