如何在Zenoss上添加一个stringtypes的SNMP OID事件/警报?

我有一个特定应用程序的状态报告为通过SNMPstring。

当所有事情都按预期工作时,监视报告一个空string,当某些数据源出现问题时,报告一个带有受影响数据源名称的string。

我想在Zenoss的事件控制台上显示这个string作为alert / info,只要它不是空的。

问题是,每当我添加一个数据源types的SNMP到监测模板,它假定数值。

这个想法是使用一个StatusThreshold来查看值的变化。

进行此设置将不会在事件控制台上显示事件。

根据我的理解,阈值是根据RRD数据库中的数值进行评估的,数据库仅为数值,所以string始终变为“NaN”。

Zenoss的监控模板界面没有显示处理string的直观方式。 如何做到这一点?

一个可能的解决scheme是非常简单的,但是search互联网会产生许多类似的问题,这些问题要么不被回答,要么采取不同的方法,或者成为一个不同的问题。

Zenoss提供了与Nagios插件集成的能力,如果你不知道这种集成是如何工作的,那么这些插件可能不会引起你的注意。

基本上,这意味着只要它返回成功(清除事件)的退出代码0和错误(生成事件)的1,2或3以及STDOUT上格式正确的string,就可以调用任意命令。

有了这些信息,你可以编写一个简单的脚本,使用snmpget读取你的SNMP数据,parsing它并打印你想要在事件中出现的消息。

一个简单而通用的Perl示例可以是:

 #!/usr/bin/env perl use strict; use warnings; use 5.010; my ( $target, $oid, $msg ) = @ARGV; my $value = `snmpget -v1 -c <comunity> $target $oid`; $value =~ /STRING: "([^"]*)"/; exit 0 unless $1; say "$msg $1"; exit 1; 

保存为zenoss服务器上的$ZENHOME/libexec/string_monitorchmod +x $ZENHOME/libexec/string_monitor

然后在监视模板上,添加一个types为COMMAND的数据源,然后像这样填充命令模板字段:

string_monitor ${here/manageIp} <OID> "Error reported on:"

如果您不熟悉Zenoss,请记住一些事情:

如果你有一个zenoss服务器和许多收集器的设置,这将从你的设备分配到的收集器,而不是从你的主服务器调用,所以记得要在所有收集器上提供脚本。 当它试图在收集器上调用string_monitor并且它不在那里时,最终会在事件控制台上显示“代码:2 – Msg:滥用shell内置函数”事件

这很容易让人误解,因为当错误是$ZENHOME/libexec/string_monitor找不到时,很容易暗示脚本有问题。 🙂

如果您在设置数据源时使用“testing”button,这可能会特别令人困惑,在这种情况下,请求将从主服务器发出,而它将显示工作,然后在控制台上显示上述错误。

此外,为了让你的进程更快,你可能想要ssh进入收集器, sudo -i -uzenoss并运行zencommand run -d your.targetdevice.com -v 10

这应该会在该设备上生成一个完整的运行,并且事件应该显示在事件控制台上(假设它不是空的)。

当你得到它的工作之后,也可以将你脚本中的实际数字数据传递给Zenoss,打印出的行的格式是:

 Error string to display|failing=7 warning=31 good=24 

失败,良好和警告将作为该数据源上的数据点传递,您可以使用MinMax Thresholds或在其上绘制graphics。

对于一个简单的开始,我build议让它使用一个最小/虚拟脚本并从这里扩展:

 #!/usr/bin/env perl use strict; use warnings; use 5.010; say "We got an error|my=1 sample=6 values=10"; exit 1;