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

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

我有一些基础设施(服务器、交换机等)由 Zabbix 服务器监控,并设置为在出现问题时发出警报;到目前为止一切顺利。但如果 Zabbix 服务器本身(或任何底层基础设施)出现问题怎么办?

一个想法是发布某种心跳,可以由外部系统监控。我正在考虑使用 Zabbix API(可能使用 py-zabbix)通过 http 公开它,并使用类似的东西进行监控监控网

在我下定决心之前,我禁不住想知道简单的已经存在可以解决这个问题的方法了吗?或者这甚至是一个好方法吗?监控与自定义 Python 脚本相比,这是一种更好的方法吗?(不确定这是否通过了“简单性”测试)...

答案1

因此,这就是我最终做的事情:

  1. 编写了一个相当简单的 Python 脚本,使用pyzabbix询问 Zabbix 当前失败的“触发器”集(见下面的代码片段)。该操作在后台线程上定期运行(因此必须是线程安全的)。
  2. 我用了网页.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,
    )

答案2

外部心跳才是最佳途径。

我不知道有任何这样的工具,我有自己的用于我使用的监控系统的工具。只需确保它是心跳而不是故障报告即可。例如,您总是报告一切正常,并且当监控系统长时间没有收到您的心跳时,它应该会通知您。

相关内容