我已经使用了nagios插件check_dell_omreport.pl。 一切都很好,直到最近。 现在有个问题,我想咨询一下。 也许有人可以帮忙。 问题是戴尔增加了供应商lockingRAID控制器,而不是由他们authentication的驱动器。 特别是H700 H800。 我仔细检查了我的服务器上的设置,一切正常。 但插件会检查OMSA alertlog中的警报。 它看到像这样的警告消息:
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)
因此,尽pipe一切正常,插件显示OK和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 ] ]
我试图解决这个问题好几天。 我会降级控制器固件。 没有帮助。 光盘是不可能取代的。
有人有一个想法如何解决这些警告? 我猜想,除了编辑Perl脚本,别无他法。 它没有修改,这里有一个链接:
http://exchange.nagios.org/directory/Plugins/Hardware/Server-Hardware/Dell/check_dell_omreport/details
也许有一个补丁,已经写了某人?
看起来代码只是假的。
perl脚本的第194行说:
} elsif ( $state =~ /non-critical|degrad|charging|learning/i ) { $warn++;
所以,如果它在文本中检测到“非关键”,那么它就会被警告。
更改
} elsif ( $state =~ /non-critical|degrad|charging|learning/i ) {
至
} elsif ( $state =~ /degrad|charging|learning/i ) {
我已经试过这个插件,并决定我宁愿直接使用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,走它,并确切知道你正在得到什么是值得的。
谢谢,但不幸的是,它并不欺骗。 但是我做了另一个改变:
} elsif ($state =~ /(degrad|regen|rebuild)/i ) { $warn++; } elsif ($state =~ /(non-critical)/i ) { $ok++;
我在WARN中删除了'non-critical',并且在循环中增加了一个部分,在那里我写了'non-critical',必须有$ ok ++。
它的窍门。 但是nagios警报不会隐藏。 :(但它表明,一切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 ] ]
我使用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);
退出(0)是可以的。 但警觉在这里。 :(我做了一个重新检查它的力量。
这个补丁帮助:
@@ -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 =〜/(degrading | regen | rebuild | non-critical)/ i){
+} elsif($ state =〜/(degrad | regen | rebuild)/ i){
$警告++;
} else {
$暴击++;
$ message。=“**”;
}
#print STDERR“adisk = $ an Status = $ adisk - > [$ adisk_ndx] [$ adisk_flds - > {Status}] State = $ adisk - > [$ adisk_ndx] [$ adisk_flds - > {State}] \ n”;
}
$ message。=“]”;
}