天天看點

調用zabbix API擷取主機

zabbix 作為企業級的系統和網絡監控方案,對于中小型公司來說基本可以很好的滿足對機器的監控需求,因為其部署友善,操作簡單深受現在各個網際網路公司喜愛,是以現在基本網際網路公司監控用zabbix的非常多,當你安裝好zabbix服務端 後,如果啟動自動注冊功能,在所有客戶機安裝用戶端後會自動在zabbix平台上被監控到,但這裡有個問題,如果你機器數量非常少,如果還能數的過來那基本沒什麼問題,但如果你機器上千台了,這個時候那些機器被監控中,那些沒被監控,查起來就沒那麼友善了,是以日常運維中經常發現的問題就是某台機器故障了但沒報警,經查發現這台機器zabbix用戶端因為某種原因導緻沒有被服務端監控到,像這種問題怎麼辦呢?其實最簡單的方案就是從zabbix裡擷取所有被監控的伺服器清單,然後跟運維資産資料庫去比對,如果數量一緻,那說明監控沒漏機器,如果比對不上,就把對不上的IP發出來再報個警就可以了,整體邏輯就是這樣,我們今天用zabbix api擷取被監控的所有機器清單,代碼如下:

#!/usr/bin/evn python import requests import json ZABIX_ROOT = 'http://10.0.1.29/zabbix' url = ZABIX_ROOT + '/api_jsonrpc.php' # user.login payload = {     "jsonrpc" : "2.0",     "method" : "user.login",     "params": {       'user': 'Admin',       'password':'',     },     "auth" : None,     "id" : 0, } headers = {     'content-type': 'application/json', req  = requests.post(url, json=payload, headers=headers) auth = req.json() # host.get     "method" : "host.get",       'output': [           'hostid',           'name'],     "auth" : auth['result'],     "id" : 2, res2 = requests.post(url, data=json.dumps(payload), headers=headers) res2 = res2.json() for host in res2['result']:     with open('host.txt', 'a+') as f:         f.write(host['name'] + '\n)

腳本一共分二部分,第一部分是使用者登入,登入後然後擷取主機清單,最後寫到一個檔案裡去,是以腳本運作的結果是生成一個所有被監控的IP清單,通過這個清單你就可以去跟你的資産庫資訊去對比了,還有這個腳本用的requests,是以看起來要清爽很多,代碼比較簡單,就是二個post就不做太多解釋了,今天就到這裡,喜歡的小夥伴可以在此基礎上修改成合适自己業務的腳本。