我通过 SNMP 将特定应用程序的状态报告为字符串。
当一切都按预期工作时,该监控报告一个空字符串,而当某些数据源出现问题时,它会报告一个包含受影响数据源名称的字符串。
我想在 Zenoss 的事件控制台上将该字符串显示为警报/信息,只要它不为空。
问题是每当我将 SNMP 类型的数据源添加到监控模板时,它都会采用数值。
这个想法是使用 StatusThreshold 来查看值何时更改。
进行该设置后事件控制台中不会出现任何事件。
根据我的理解,阈值是根据 RRD 数据库中的值进行评估的,该值仅为数字,因此字符串始终变为“NaN”。
Zenoss 的监控模板界面没有显示处理字符串的直观方式。那怎么办?
一个可能的解决方案被证明非常简单,但在互联网上搜索会产生很多类似的问题,这些问题要么没有得到回答,要么最终采取了不同的方法,或者一开始就是一个不同的问题。
Zenoss 提供与 Nagios 插件集成的能力,如果您不知道这种集成是如何工作的,可能不会引起您的注意。
基本上,这意味着您可以调用任意命令,只要它返回成功退出代码 0(清除事件)和错误退出代码 1、2 或 3(生成事件),以及 STDOUT 上格式正确的字符串。
有了这些信息,您可以编写一个简单的脚本,使用 读取您的 SNMP 数据
snmpget
,对其进行解析并打印您希望在事件中显示的消息。一个简单而通用的 Perl 示例可以是:
将其保存
$ZENHOME/libexec/string_monitor
在您的 zenoss 服务器上,然后chmod +x $ZENHOME/libexec/string_monitor
然后在 Monitoring Templates 上,添加 COMMAND 类型的 Data Source 并填写 Command Template 字段,如下所示:
string_monitor ${here/manageIp} <OID> "Error reported on:"
如果您不熟悉 Zenoss,请记住以下几点:
如果你有一个 zenoss 服务器和许多收集器的设置,这将从你的设备分配到的收集器调用,而不是从你的主服务器,所以请记住让脚本在所有收集器上可用。当它尝试调用
string_monitor
收集器但它不存在时,您将在事件控制台上看到一个事件,该事件显示为“代码:2 - 消息:滥用 shell 内置函数”$ZENHOME/libexec/string_monitor
这是非常具有误导性的,因为当未发现错误时很容易暗示您的脚本存在问题。:-)如果您在设置数据源时使用“测试”按钮,这可能会特别令人困惑,在这种情况下,请求将从主服务器发出,并且看起来可以正常工作,然后在控制台上显示上述错误。
此外,为了使您的过程更快,您可能希望通过 ssh 进入收集器,
sudo -i -uzenoss
然后运行zencommand run -d your.targetdevice.com -v 10
这应该会在该设备上生成一个完整的运行,并且您的事件应该出现在事件控制台上(假设它不是空的)。
在你让它工作之后,也可以将实际的数字数据从你的脚本传递到 Zenoss,打印行的格式是:
失败、良好和警告将作为该数据源上的数据点传递,您可以使用 MinMax 阈值或在其上绘制图形。
对于一个简单的开始,我建议让它使用最小/虚拟脚本并从那里扩展: