一划鸽、zabbix api介紹
1.Zabbix API允許以編程方式檢索和修改Zabbix的配置搔体,并提供對歷史數(shù)據(jù)的訪問丁恭。它廣泛用于:
1)創(chuàng)建新的應(yīng)用程序以使用Zabbix
2)將Zabbix與第三方軟件集成
3)自動執(zhí)行常規(guī)任務(wù)
2.Zabbix API是基于Web的API,作為Web前端的一部分提供谚中。它使用JSON-RPC 2.0協(xié)議,這意味著兩件事:
1)該API包含一組獨(dú)立的方法寥枝;
2)客戶端和API之間的請求和響應(yīng)使用JSON格式進(jìn)行編碼宪塔。
3.Zabbix API由許多名義上分組的獨(dú)立API方法組成。每個方法執(zhí)行一個特定任務(wù)囊拜。例如某筐,方法 host.create 隸屬于 host 這個API分組 ,用于創(chuàng)建新主機(jī)冠跷。歷史上南誊,API分組有時被稱為“類”。
大多數(shù)API至少包含四種方法: get蜜托, create抄囚, update 和 delete ,分別是檢索橄务,創(chuàng)建幔托,更新和刪除數(shù)據(jù),但是某些API提供一套完全不同的一組方法仪糖。
根據(jù)單個或分布式平臺上不同軟件應(yīng)用程序間的數(shù)據(jù)共享性能柑司,可以將 API 分為四種類型:
1)遠(yuǎn)程過程調(diào)用(RPC):通過作用在共享數(shù)據(jù)緩存器上的過程(或任務(wù))實現(xiàn)程序間的通信。
2)標(biāo)準(zhǔn)查詢語言(SQL):是標(biāo)準(zhǔn)的訪問數(shù)據(jù)的查詢語言锅劝,通過通用數(shù)據(jù)庫實現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享攒驰。
3)文件傳輸:文件傳輸通過發(fā)送格式化文件實現(xiàn)應(yīng)用程序間數(shù)據(jù)共享。
4)信息交付:指松耦合或緊耦合應(yīng)用程序間的小型格式化信息故爵,通過程序間的直接通信實現(xiàn)數(shù)據(jù)共享玻粪。
主機(jī)和主機(jī)組
一般來講隅津,Zabbix主機(jī)是指希望監(jiān)控的那些設(shè)備,例如服務(wù)器劲室、工作站伦仍、交換機(jī)等等。
創(chuàng)建主機(jī)是使用Zabbix過程中的一個首要任務(wù)很洋。例如充蓝,如果想在一臺服務(wù)器“X”上監(jiān)控一些參數(shù),必須首先創(chuàng)建一個主機(jī)稱之為“服務(wù)器X”喉磁,然后就可以查看添加監(jiān)控項到這臺“服務(wù)器X”上谓苟。
主機(jī)組是由主機(jī)組成的
4.zabbix-api調(diào)用地址:http://zabbix服務(wù)器地址/zabbix/api_jsonrpc.php
官網(wǎng)地址:https://www.zabbix.com/documentation/4.0/zh/manual/api??
5.獲取監(jiān)控項的步驟
1)獲取token的值
def getToken(self):
data = {
????????"jsonrpc":"2.0",? # API使用的JSON-RPC協(xié)議的版本
? ? ? ? "method":"user.login",? # 被調(diào)用的API方法名,用于登錄并獲取身份驗證令牌
? ? ? ? "params": {# 將被傳遞給API方法的參數(shù)
? ? ? ? ? ? "user":zabbix賬號,
? ? ? ? ? ? "password": zabbix登錄密碼
},
? ? ? ? "id":1,? # 請求的任意標(biāo)識符
? ? ? ? "auth":None? # 用戶認(rèn)證令牌; 因為我們還沒有一個,它的設(shè)置null
? ? }
r = requests.post(url=self.url, headers=headers, data=json.dumps(data))
token = json.loads(r.content).get("result")
return token
2)獲取hostid(此處根據(jù)主機(jī)名只獲取一個主機(jī)ID)
def getHosts(self):
data = { "jsonrpc": "2.0", "method": "host.get", # 使用 host.get 方法檢索所有已配置主機(jī)的ID协怒,主機(jī)名
"params": { "output": [ "hostid", "host" ] },
"id": 2,
"auth": self.token }
r = requests.post(url=self.url, headers=headers, data=json.dumps(data))
# hostid = json.loads(r.content).get("result")[0] #獲取zabbix-server的主機(jī)名涝焙,hostid
hostid = json.loads(r.content).get("result")[0].get("hostid") return hostid
3)獲取內(nèi)存總量
def get_web_time(self,hostid):? ? #傳入上一個方法反悔的hostid的值
data = {
"jsonrpc":"2.0",
? ? ? ? "method":"item.get",
? ? ? ? "params": {
"output":"extend",
? ? ? ? ? ? "hostids": hostid,
? ? ? ? ? ? "search": {
"key_":"vm.memory.size[total]"
? ? ? ? ? ? }
},
? ? ? ? "id":3,
? ? ? ? "auth":self.token
}
r = requests.post(url=self.url, headers=headers, data=json.dumps(data))
memory=int(json.loads(r.content).get("result")[0]["lastvalue"])/1024 /1024 /1024
? ? print 'total_memory:'+str(memory)+'GB'
6.目前為止使用過的方法
1)user.login? ? 用來獲取token值
2) host.get? ? ? 用來獲取主機(jī)信息
3)item.get? ? ? ?用來獲取item的監(jiān)控值
4)alert.get? ? ? ?用于獲取告警信息
5)triggers,get? ?獲取觸發(fā)器信息
6)httptest.get? ?方法允許根據(jù)給定的參數(shù)檢索Web場景?
其他方法請參考官方文檔:https://www.zabbix.com/documentation/4.0/zh/manual/api?