我一直在使用 nagios 插件 check_dell_omreport.pl。直到最近一切都运行良好。现在出现了一个问题,我想咨询一下。也许有人可以帮忙。问题是戴尔为 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)
因此,尽管一切正常,插件还是显示 OK 和警告:
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 脚本。它未经修改,以下是它的链接:
也许有人已经写好了它的补丁?
答案1
看起来这段代码是伪造的。
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 ) {
答案2
我尝试过该插件并决定直接将 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$
}
Pablo 的答案是更改脚本,这似乎是正确的做法。但我认为,获取 MIB、运行它并确切了解您将获得什么,这是值得的。
答案3
谢谢,但不幸的是,它不起作用。但我做了另一个更改:
} elsif ($state =~ /(degrad|regen|rebuild)/i ) {
$warn++;
} elsif ($state =~ /(non-critical)/i ) {
$ok++;
我删除了 WARN 处的“非关键”,并在循环中添加了另一个部分,其中我写道“非关键”必须有 $ok++。
它确实奏效了。但 nagios 警报不会隐藏。 :( 但它显示一切正常:
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) 没问题。但是出现了警告。:( 我强制重新检查了它。
答案4
此补丁程序帮助:
@@ -239,15 +239,15 @@ $进度 = “”; } $message .= " $an=$state$progress"; - 如果($state =〜/ ^ ok \ /(ready|online)/i){ + 如果($state =〜/ ^ ok \ /(ready | online)| non-critical / i){ $确定++; - } elsif ($state =~ /(degrad|regen|rebuild|non-critical)/i ) { + } elsif ($state =~ /(degrad|regen|rebuild)/i ) { $警告++; } 别的 { $暴击++; $消息.=“**”; } # 打印 STDERR "adisk=$an 状态=$adisk->[$adisk_ndx][$adisk_flds->{状态}] 状态=$adisk->[$adisk_ndx][$adisk_flds->{状态}]\n"; } $消息.=“ ]”; }