摘要:因?yàn)槭谦@取相關(guān)信息,所以使用這個(gè)函數(shù)。這里需要說(shuō)明的是,我前面獲取的是所有節(jié)點(diǎn)主機(jī)的信息,而我是每獲取完一個(gè)節(jié)點(diǎn)主機(jī)就會(huì)錄入數(shù)據(jù)庫(kù),所以采用了循環(huán)遍歷所有節(jié)點(diǎn)主機(jī)信息。就指當(dāng)前的主機(jī)信息。
需求背景
在ZABBIX服務(wù)端可以看到各個(gè)節(jié)點(diǎn)客戶端主機(jī)的詳細(xì)信息,但是觀察各個(gè)節(jié)點(diǎn)時(shí),同一時(shí)刻只能觀察到一個(gè),如下圖所示。
現(xiàn)在想將所有節(jié)點(diǎn)主機(jī)的一些信息通過(guò)腳本調(diào)用API讀取出來(lái),錄入到數(shù)據(jù)庫(kù),以供其他模塊使用,查了一些相關(guān)資料,將大概思路記錄下來(lái)。
實(shí)現(xiàn)方案ZABBIX API的官方網(wǎng)址:https://www.zabbix.com/docume...
Python的zabbix-api網(wǎng)址:https://github.com/gescheit/s...
使用zabbix-api這個(gè)python第三方庫(kù)讓開(kāi)發(fā)變得更為簡(jiǎn)潔。
1、安裝zabbix-api
首先要安裝這個(gè)第三方庫(kù),一個(gè)命令就可以搞定:
# pip install zabbix-api
這里使用pip進(jìn)行安裝,沒(méi)有安裝pip的童鞋請(qǐng)自行百度安裝pip
2、獲取各個(gè)節(jié)點(diǎn)主機(jī)的信息
(1)首先要連接并登錄zabbix服務(wù)端,兩條語(yǔ)句就可以搞定(開(kāi)源是多么重要呀)
#!/usr/bin/env python #coding=utf-8 from zabbix_api import ZabbixAPI server = "your server address" username = "your user name" password = "your password" zapi = ZabbixAPI(server=server, path="", log_level=6) zapi.login(username, password)
看看,是不是很簡(jiǎn)單,當(dāng)然也可以自己寫,有興趣的可以看看相關(guān)資料。此時(shí)運(yùn)行一下,可以看到相關(guān)打印:
20: url: http://xxxxx/zabbix//api_jsonrpc.php 10: Trying to login with "xxxxx":"md5(xxxxx)" 10: json_obj: {"params": {"password": "xxxxx", "user": "xxxxx"}, "jsonrpc": "2.0", "method": "user.login", "id": 0} 20: Sending: {"params": {"password": "xxxxx", "user": "xxxxx"}, "jsonrpc": "2.0", "method": "user.login", "id": 0} 10: Sending headers: {"Content-Type": "application/json-rpc", "User-Agent": "python/zabbix_api"} 20: Response Code: 200 10: Response Body: {u"jsonrpc": u"2.0", u"result": u"271eca6ecbd4640c33f822cfaea4f0b5", u"id": 0}
Response Code為200,應(yīng)該都知道,表示請(qǐng)求成功了.
(2)獲取節(jié)點(diǎn)主機(jī)
由于我的節(jié)點(diǎn)主機(jī)都在同一"Host groups"下面,因此我一次性獲取全部節(jié)點(diǎn)主機(jī)的信息。好了,這是需要將API文檔拿出來(lái)查閱。因?yàn)槭谦@取相關(guān)信息,所以使用hostgroup.get這個(gè)API函數(shù)。這個(gè)API函數(shù)說(shuō)明在這里:https://www.zabbix.com/docume...
現(xiàn)在簡(jiǎn)單的貼下一代碼:
hostgroup_name = "your host group name" hostids = zapi.hostgroup.get( { "filter": { "name": hostgroup_name }, "selectHosts": ["hostid", "host"] } ) print json.dumps(hostids, indent=4)
在這個(gè)json語(yǔ)句中,有個(gè)關(guān)鍵參數(shù)filter,查閱官方文檔:
這里只返回名為"hostgroup_name",即你自己的hostgroup分組下面的所有主機(jī)。我這里只返回這些主機(jī)的"hostid"和"host"。
注意,zapi.hostgroup.get返回的是python數(shù)據(jù)結(jié)構(gòu),為了方便調(diào)試代碼,print時(shí)注意把python數(shù)據(jù)結(jié)構(gòu)在轉(zhuǎn)化為json文件,打印信息如下。
10: json_obj: {"params": {"filter": {"name": "xxxxx"}, "selectHosts": ["hostid", "host"]}, "jsonrpc": "2.0", "method": "hostgroup.get", "auth": u"af7401886734c31defdface109ed171e", "id": 1} 20: Sending: {"params": {"filter": {"name": "xxxxx"}, "selectHosts": ["hostid", "host"]}, "jsonrpc": "2.0", "method": "hostgroup.get", "auth": "af7401886734c31defdface109ed171e", "id": 1} 10: Sending headers: {"Content-Type": "application/json-rpc", "User-Agent": "python/zabbix_api"} 20: Response Code: 200 10: Response Body: {u"jsonrpc": u"2.0", u"result": [{u"hosts": [{u"host": u"pc00000011.mknode.cn", u"hostid": u"10274"}, {u"host": u"pc00000013.mknode.cn", u"hostid": u"10275"}, {u"host": u"pc00000015.mknode.cn", u"hostid": u"10276"}, {u"host": u"pc00000012.mknode.cn", u"hostid": u"10277"}, {u"host": u"pc00000016.mknode.cn", u"hostid": u"10278"}, u"internal": u"0", u"flags": u"0", u"groupid": u"15", u"name": u"xxxxx"}], u"id": 1} [ { "hosts": [ { "host": "pc00000011.mknode.cn", "hostid": "10274" }, { "host": "pc00000013.mknode.cn", "hostid": "10275" }, { "host": "pc00000015.mknode.cn", "hostid": "10276" }, { "host": "pc00000012.mknode.cn", "hostid": "10277" }, { "host": "pc00000016.mknode.cn", "hostid": "10278" }, ], "internal": "0", "flags": "0", "groupid": "15", "name": "xxxxx" } ]
關(guān)于json.dumps()、json.loads():
json.dumps():dict轉(zhuǎn)為str
json.loads():str轉(zhuǎn)為dict
(3)獲取節(jié)點(diǎn)主機(jī)具體信息
這個(gè)就太豐富啦,具體問(wèn)題看具體API,這里以查看內(nèi)存剩余容量為例吧。
memfree_get = zapi.item.get( { "hostids": [host_cnt["hostid"]], "filter": { "key_": ["vm.memory.size[available]"] # "name": ["Available memory"] } }) memfree_get_last = memfree_get[0]["lastvalue"] print json.dumps(memfree_get,indent=4)
查看打印信息:
10: Response Body: {u"jsonrpc": u"2.0", u"result": [{u"itemid": u"29401", u"username": u"", u"snmpv3_contextname": u"", u"inventory_link": u"0", u"mtime": u"0", u"authtype": u"0", u"trends": u"365d", u"snmpv3_authpassphrase": u"", u"snmp_oid": u"", u"snmpv3_securitylevel": u"0", u"port": u"", u"lastns": u"31272984", u"master_itemid": u"0", u"logtimefmt": u"", u"jmx_endpoint": u"", u"delay": u"1m", u"publickey": u"", u"state": u"0", u"params": u"", u"snmpv3_securityname": u"", u"formula": u"", u"type": u"7", u"snmpv3_authprotocol": u"0", u"prevvalue": u"3426082816", u"status": u"0", u"lastlogsize": u"0", u"lastclock": u"1523192709", u"snmp_community": u"", u"description": u"Available memory is defined as free+cached+buffers memory.", u"evaltype": u"0", u"trapper_hosts": u"", u"lastvalue": u"3425476608", u"units": u"B", u"value_type": u"3", u"templateid": u"22181", u"snmpv3_privprotocol": u"0", u"password": u"", u"interfaceid": u"0", u"snmpv3_privpassphrase": u"", u"hostid": u"10276", u"key_": u"vm.memory.size[available]", u"name": u"Available memory", u"privatekey": u"", u"lifetime": u"0", u"valuemapid": u"0", u"flags": u"0", u"error": u"", u"ipmi_sensor": u"", u"history": u"1w"}], u"id": 19} [ { "itemid": "29401", "username": "", "snmpv3_contextname": "", "inventory_link": "0", "mtime": "0", "authtype": "0", "trends": "365d", "snmpv3_authpassphrase": "", "snmp_oid": "", "snmpv3_securitylevel": "0", "port": "", "lastns": "31272984", "master_itemid": "0", "logtimefmt": "", "jmx_endpoint": "", "delay": "1m", "publickey": "", "state": "0", "params": "", "snmpv3_securityname": "", "formula": "", "type": "7", "snmpv3_authprotocol": "0", "prevvalue": "3426082816", "status": "0", "lastlogsize": "0", "lastclock": "1523192709", "snmp_community": "", "description": "Available memory is defined as free+cached+buffers memory.", "evaltype": "0", "trapper_hosts": "", "lastvalue": "3425476608", "units": "B", "value_type": "3", "templateid": "22181", "snmpv3_privprotocol": "0", "password": "", "interfaceid": "0", "snmpv3_privpassphrase": "", "hostid": "10276", "key_": "vm.memory.size[available]", "name": "Available memory", "privatekey": "", "lifetime": "0", "valuemapid": "0", "flags": "0", "error": "", "ipmi_sensor": "", "history": "1w" } ]
這次以json格式打印的優(yōu)勢(shì)就凸顯出來(lái)了,”Response Body“為未進(jìn)行json轉(zhuǎn)碼前的python數(shù)據(jù)結(jié)構(gòu)。如果不知道剩余內(nèi)存容量該怎么從memfree_get中取出,可以從打印信息中查看,很顯然,字段"lastvalue"就是最新剩余內(nèi)存值:
memfree_get_last = memfree_get[0]["lastvalue"]
這樣我們就將該值取出,錄入數(shù)據(jù)庫(kù)就OK了,獲取其他信息也是同樣的道理。
這里需要說(shuō)明的是,我前面獲取的是所有節(jié)點(diǎn)主機(jī)的信息,而我是每獲取完一個(gè)節(jié)點(diǎn)主機(jī)就會(huì)錄入數(shù)據(jù)庫(kù),所以采用了循環(huán)遍歷所有節(jié)點(diǎn)主機(jī)信息。"hostids": [host_cnt["hostid"]]就指當(dāng)前的主機(jī)信息。
總結(jié)1、有問(wèn)題,看文檔
2、合理利用第三方庫(kù),讓開(kāi)發(fā)變得更加高效
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/41479.html
摘要:靈活查詢,聚合分組并存除開(kāi)單純的聚合和分組,還支持聚合和分組的復(fù)合查詢。所以,與會(huì)聚合為一條曲線,而和的關(guān)系則是分組的關(guān)系。當(dāng)然,的功能在未來(lái),還遠(yuǎn)遠(yuǎn)不止這些,高效運(yùn)維的時(shí)代才剛剛開(kāi)啟。 運(yùn)維 2.0 時(shí)代 運(yùn)維 2.0 是指,從技術(shù)運(yùn)維升級(jí)為服務(wù)運(yùn)維,向公司提供可依賴的專業(yè)服務(wù)。運(yùn)維 2.0 強(qiáng)調(diào)服務(wù)交付能力,而不是技術(shù)能力,需求可依賴、懂業(yè)務(wù)、服務(wù)化的專業(yè)運(yùn)維。 為了了解運(yùn)維 2....
摘要:可以指定一個(gè)已停止的容器,但是停止的容器不返回任何數(shù)據(jù)。但它并不意味著你的每個(gè)容器都能訪問(wèn)那么多的內(nèi)存默認(rèn)時(shí)命令會(huì)每隔秒鐘刷新一次,如果只看當(dāng)前狀態(tài)指定查看某個(gè)容器的資源可以指定名稱或本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn) 前言 傳統(tǒng)虛機(jī)監(jiān)控一般采用類似Zabbix的方案,但容器出現(xiàn)之后,再使用Zabbix agent來(lái)采集數(shù)據(jù)的話就顯得有些吃力了,如果每個(gè)容器都像OS那樣監(jiān)控,則me...
摘要:可以指定一個(gè)已停止的容器,但是停止的容器不返回任何數(shù)據(jù)。但它并不意味著你的每個(gè)容器都能訪問(wèn)那么多的內(nèi)存默認(rèn)時(shí)命令會(huì)每隔秒鐘刷新一次,如果只看當(dāng)前狀態(tài)指定查看某個(gè)容器的資源可以指定名稱或本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn) 前言 傳統(tǒng)虛機(jī)監(jiān)控一般采用類似Zabbix的方案,但容器出現(xiàn)之后,再使用Zabbix agent來(lái)采集數(shù)據(jù)的話就顯得有些吃力了,如果每個(gè)容器都像OS那樣監(jiān)控,則me...
閱讀 2574·2021-11-15 11:38
閱讀 2017·2021-11-05 09:37
閱讀 2428·2021-10-08 10:12
閱讀 2869·2019-08-30 15:55
閱讀 2200·2019-08-30 15:52
閱讀 1289·2019-08-29 13:24
閱讀 509·2019-08-26 18:27
閱讀 1534·2019-08-26 18:27