Monitoring
外部監控zabbix server(本身)
我有一些由 Zabbix 伺服器監控的基礎設施(伺服器、交換機等),設置為在出現問題時發出警報;到目前為止,一切都很好。但是如果 Zabbix 伺服器本身(或任何底層基礎設施)遇到問題怎麼辦?
一個想法是發布某種心跳,可以由外部系統監控。我正在考慮使用 Zabbix API(可能使用 py-zabbix)通過 http 公開它,並使用諸如monitor.us之類的東西對其進行監控。
在我冒險之前,我不禁想知道是否已經存在一些簡單的東西來解決這個問題?或者這甚至是一個好方法?與自定義 Python 腳本相比,monit 會是更好的方法嗎?(不確定這是否通過了“簡單性”測試)……
所以這就是我最終做的事情:
- 編寫了一個相當簡單的 Python 腳本,它使用pyzabbix向 Zabbix 詢問目前失敗的“觸發器”集(見下面的片段)。這會在後台執行緒上定期執行(因此它必須是執行緒安全的)。
- 我使用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, )