从外部监视zabbix服务器(本身)

我有一些Zabbix服务器监视的基础设施(服务器,交换机等),设置为在发生问题时提醒; 到现在为止还挺好。 但是,如果Zabbix服务器本身(或任何底层的下层)遇到问题呢?

一个想法是发布某种心跳,可以通过外部系统进行监控。 我正在考虑使用Zabbix API(可能使用py-zabbix)通过http公开它,并使用像监视器 .us一样的监视器进行监视。

在我冒险之前,我不禁想知道是否已经有了一些简单的东西来掩饰这个问题? 或者这是一个好方法? 与自定义Python脚本相比, monit会是更好的方法吗? (不知道这是否通过了“简单”testing)…

所以这就是我最终做的事情:

  1. 写了一个相当简单的Python脚本,它使用pyzabbix来询问Zabbix当前失败的“触发器”(见下面的代码片段)。 这在一个后台线程上定期运行(所以它必须是线程安全的)。
  2. 我用web.py把这个暴露给外部监控系统。

出现了一个意想不到的问题:即使Zabbix服务器停机,Zabbix API仍然响应,无法询问服务器的状态 – 这是我想要监视的主要事情。 谢天谢地, 存在一个补丁允许这样的服务器状态查询。

这里是查询失败的Zabbix触发器(从pyzabbix自带的例子中改编)的代码。 如果您需要完整显示器的代码,请在评论中提问,然后发布到github上。

def __query_unacked_triggers(self): """ queries for currently tripped _triggers which haven't been acked """ return self._zapi.trigger.get( only_true = 1, filter = { 'value': 1 }, skipDependent = 1, monitored = 1, active = 1, output = 'extend', expandDescription = 1, expandData = 'host', withLastEventUnacknowledged = 1, ) 

外在的心跳是要走的路。

我不知道有任何这样的工具,我有我自己的监视系统,我使用。 只要确保这是一个心跳,而不是一个失败的报告。 例如。 你总是报告一切正常,当监控系统长时间没有收到你的心跳,那么它应该让你知道。