在很多情况下,我都想用 Nagios 监控一些值,但我并不太关心这些值本身,而是更关心它与之前的值相比如何。
例如,我编写了一个程序来检查 OpenVZ 中的故障计数器。在这种情况下,我不太关心这个值,而是关心这个值是否增加。另一个例子可能是交换机端口,我最感兴趣的是收到有关端口状态变化的警报(尽管对于这个来说,陷阱可能更好)。
对于我的 OpenVZ 脚本,我使用了一个临时文件,但我想知道是否有更好的方法?也许 Nagios 有一些插件(检查脚本)可以访问的变量,这些变量在检查过程中是持久的?
答案1
我认为您无法直接使用 Nagios 执行此操作,但您可以使用 MRTG(或类似)记录到 rrdtool 数据库,然后可以通过合适的 Nagios 插件读取该数据库。例如,我使用此方法来监控每分钟的 DNS 查询。
或者,让插件将当前值与之前保存的值进行比较,然后将最新值保存以供下次调用。
答案2
如果您只是想对增加发出警报,这就是 Nagios 已经做的事情,只需将阈值设置为比当前值略高,那么当值增加时您就会收到警报。
或者你的意思是你想监控变化率,因此小幅上升趋势是可以的,但突然的变动就会发出警报。
Nagios 只允许您监视变化,而不能监视变化率,但您可以编写监视脚本来报告变化率,变化率为 0 表示无变化,值为某个值表示有变化。然后,您可以通过相应地设置阈值来监视突然的变化。
有一个perl 中的示例这里用于监控进程。这个例子有点超出我的理解范围,所以不确定它是否是你想要的。
答案3
如果你不介意在受监控的机器上有另一个守护进程,你可能需要看看穆宁,它绘制了 Nagios 随时间输出的 RRD 数据。它设置起来非常简单,并且具有大量现成的统计数据;其他统计数据可通过自定义插件直接实现。
答案4
我有几个检查,它们依赖于触发警告和关键条件的计数变化而不是绝对计数,并且我使用临时文件来保持持久性。