我正在尝试配置 Icinga 来查询加载到我正在配置的存储阵列中的硬盘的 SMART 状态。
我遇到的问题是,查询驱动器的 OID 时来自阵列的响应是文本,而不是数字。
./check_snmp -H 10.0.10.17 -P 2c -C public -o .1.3.6.1.4.1.24681.1.2.11.1.7.1
SNMP OK - "GOOD" |
在处理 check_snmp 的输出时,我习惯使用数字而不是字符串。有人知道当GOOD
返回除输出之外的任何内容时,我如何创建严重或警告通知吗?
答案1
您当然已经知道Nagios
需要一个数字(0,1,2,3)作为启动命令的返回状态代码。
如果$?
命令check_snmp
总是返回0
,我的建议是编写自己的检查,在命令中添加pipe
和,例如:grep
check_snmp
./check_snmp -H 10.0.10.17 -P 2c -C public -o .1.3.6.1.4.1.24681.1.2.11.1.7.1 | grep GOOD
如果在输出中找到0 (OK)
单词,则返回,否则将返回。GOOD
1 (Warning)
答案2
check_snmp
您不能使用具有非数值的库存;您必须check_snmp
为插件编写包装器,或者使用/编写检查字符串值的插件。这就是为什么有数百种针对特定硬件的 SNMP 插件变体。该 OID 适用于 QNAP NAS,对吗?
通常,你会发现其他人已经为你完成了这项工作。你可以直接使用其中一个插件,也可以 fork 它们:
答案3
如果您需要名称而不是数字(OID),则需要将这些 OID 转换为 mib。下载指定用途所需的 mib(硬盘、路由器接口、服务等)。下载后,尝试使用指定名称的脚本。例如,如果我喜欢使用 check_snmp 检查正常运行时间,我会这样做:./check_snmp -H iphosts -P 2c -C public -o sysUpTime.0
然后您可以将数字 OID 替换为 mib 名称……这就是全部要点
答案4
当我必须将警告或严重设置为字符串时,我遇到了同样的问题,因此我只是将它与 --invert-search 和 --ereg 选项一起使用,如下所示:
./check_snmp -P 3 -U monitoring_icinga -L authPriv -a SHA -x AES -A 'secr3t' --privpasswd='secr3t' 10.155.0.1 -o .1.3.6.1.4.1.25461.2.1.2.1.11.0 -r Non-functional --invert-search; echo $?
SNMP OK - "active" |
0
./check_snmp -P 3 -U monitoring_icinga -L authPriv -a SHA -x AES -A 'secr3t' --privpasswd='secr3t' 10.155.0.1 -o .1.3.6.1.4.1.25461.2.1.2.1.11.0 -r active --invert-search; echo $?
SNMP CRITICAL - *"active"* |
2
尝试这个:
./check_snmp -H 10.0.10.17 -P 2c -C public -o .1.3.6.1.4.1.24681.1.2.11.1.7.1 --ereg GOOD --invert-search