我们有很多后端应用程序需要监控其性能(指标包括等待处理的订单、自上次运行以来的时间等)。目前,这项工作由内部监控应用程序完成,只要超过阈值就会发送电子邮件,但没有办法确认问题并压制这些警报。
我们不想自己构建完整的警报系统,而是想将其与我们用于监控服务器的 Zenoss 安装结合起来。我找到了一个几篇文章以编程方式创建事件,但我更希望 Zenoss 本身监控当前看门狗应用程序正在查看的值(这样我们也可以获得图形和历史记录的好处)。
那么,是否有可能以编程方式向 Zenoss 提供数据馈送(而不是事件)?或者还有其他方法可以实现这一点?
答案1
我认为最干净的解决方案是让应用程序通过 SNMP 提供信息。
然后您可以使用任何支持 SNMP 的软件对其进行监控,包括但不限于 Zenoss。
有多种方法可以实现这一点。
我已经为一些自定义应用程序完成了此操作:
这些应用程序运行在 Linux 服务器上,该服务器已经运行了 Net-SNMP 守护程序。因此,我为 Net-SNMP 编写了一个插件(只是一个小的 Perl 脚本),该插件会查询应用程序中的值并将其报告给 Net-SNMP。
我使用exec
Net-SNMP 机制来运行它(http://net-snmp.sourceforge.net/docs/man/snmpd.conf.html#lbAZ)基本上你只需要
exec [MIBOID] NAME PROG ARGS
进入snmpd.conf
。然后 Net-SNMP 将调用您的脚本,并通过 SNMP 报告其结果。您的脚本只需在 stdout 上打印结果(如果它报告多个值,则每行一个),否则它不必执行任何特定操作。笔记:现在已不再使用,exec
而改用extend
,但原理是一样的。
还有其他更强大的扩展机制(您可以用 Perl 编写插件,或用 C 编写动态模块,...),但这是一个很好的起点。
其他 SNMP 守护程序将具有类似的扩展机制,它只取决于您当前在运行应用程序的服务器上使用的内容。
另外,还有一种特殊的协议叫做代理X允许应用程序充当“子代理”(即向系统上的主 SNMP 守护程序报告数据)。您甚至可以在应用程序中实现子代理。
简而言之,通过 SNMP 实现数据报告的方法有很多种;只需选择最简单的解决方案,然后在需要时进行扩展即可。无论如何,这样您就获得了一个可扩展的、基于标准的解决方案,而不是临时的电子邮件。
编辑:
在 MS Windows 下执行此操作:
一种可能性(可能还有其他可能性,不知道)是在 Windows 下安装 Net-SNMP(他们有 Windows 版本)。您实际上有两个选择:
- 保持 Windows SNMP 服务运行,并同时安装 Net-SNMP
- 禁用 Windows SNMP 服务,并运行 Net-SNMP
在选项 1 下,您需要让 Windows SNMP 服务使用非标准端口,并让 Net-SNMP 代理代理向其发出请求。在选项 2 下,Net-SNMP 代理将直接加载 Windows 代理运行时将使用的 DLL。因此,在这两种情况下,您仍然应该获得 Windows 代理提供的 MS 特定信息。这两种方法都有一些缺点;请参阅自述文件.win32了解详情。
一旦运行 Net-SNMP,您就可以使用它的所有扩展功能,就像在 Linux 下一样(参见上文)。
您还可以直接扩展 Windows SNMP 代理(不使用 Net-SNMP),但我对此了解不多。有一个“Windows SNMP API”,显然是一种方法:http://msdn.microsoft.com/en-us/library/aa379207%28v=vs.85%29.aspx
答案2
几年前我写了一篇论文,讨论了使用 Zenoss 进行“过程监控”的不同选项 -http://community.zenoss.org/docs/DOC-3537。
从那时起,除了内置的 Zenoss 进程监控不再那么古怪和更可靠之外,没有发生太大变化。它讨论了各种方法,包括使用 net-snmp 守护程序(顺便说一下,它也适用于 Windows)。它还讨论了使用 ssh 运行脚本。无论哪种方式,您都可以绘制收集的数据图表,并根据阈值发出警报。
欢呼吧,简