因公司業務須要,引進了自動化運維,所用到的監控平臺爲zbbix3.2,最近正在學習python,計劃使用python調用zabbix api接口去作些事情,如生成報表,我想最基本的是要取得zabbix中的數據,這是第一步,今天先體驗了一把,已經成功獲取獲得部分數據,因此記錄下來。php
操做系統:win10python
zabbix版本:3.2json
python版本:2.7.14api
IDE:PyCharm 2017.2.3app
Build #PY-172.3968.37, built on September 1, 2017
Licensed to smile運維
JRE: 1.8.0_152-release-915-b11 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.opython2.7
1. user.login方法獲取zabbix server的認證密鑰。官方地址:https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/user/login學習
python實現方法:ui
#!/usr/bin/env python2.7 #coding=utf-8 import json import urllib2 # based url and required header url = "http://192.168.0.217/zabbix/api_jsonrpc.php" header = {"Content-Type":"application/json"} # auth user and password data = json.dumps( { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 0 }) # create request object request = urllib2.Request(url,data) for key in header: request.add_header(key,header[key]) # auth and get authid try: result = urllib2.urlopen(request) except urllib2.URLError as e: print "Auth Failed, Please Check Your Name AndPassword:",e.reason else: response = json.loads(result.read()) result.close() print"Auth Successful. The Auth ID Is:",response['result']
輸出結果:url
2.hostgroup.get方法獲取全部主機組ID。把第一步得到的認證密鑰填寫到「auth」中,每次獲取數據時都須要認證。此處是獲取zabbix server上的全部主機組名稱與ID號。
官方地址:https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/hostgroup/get
python實現方法:
#!/usr/bin/env python2.7 #coding=utf-8 import json import urllib2 # based url and required header url = "http://192.168.0.217/zabbix/api_jsonrpc.php" header = {"Content-Type":"application/json"} # request json data = json.dumps( { "jsonrpc":"2.0", "method":"hostgroup.get", "params":{ "output":["groupid","name"], }, "auth":"4c38be0e3cda326c63e4f4be8f73a056", # theauth id is what auth script returns, remeber it is string "id":1, }) # create request object request = urllib2.Request(url,data) for key in header: request.add_header(key,header[key]) # get host list try: result = urllib2.urlopen(request) except urllib2.URLError as e: if hasattr(e, 'reason'): print 'We failed to reach a server.' print 'Reason: ', e.reason elif hasattr(e, 'code'): print 'The server could not fulfill the request.' print 'Error code: ', e.code else: response = json.loads(result.read()) result.close() print "Number Of Hosts: ", len(response['result']) #print response for group in response['result']: print "Group ID:",group['groupid'],"\tGroupName:",group['name']
輸出結果:
3.host.get方法獲取單個主機組下全部的主機ID。把第二點中獲取到的主機組id,填入到下面代碼「groupids」中,便可得到該主機組下全部的主機id。
官方地址:https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/host/get
python實現方法:
#!/usr/bin/env python2.7 #coding=utf-8 import json import urllib2 # based url and required header url = "http://192.168.0.217/zabbix/api_jsonrpc.php" header = {"Content-Type":"application/json"} # request json data = json.dumps( { "jsonrpc":"2.0", "method":"host.get", "params":{ "output":["hostid","name"], "groupids":"8", }, "auth":"4c38be0e3cda326c63e4f4be8f73a056", # theauth id is what auth script returns, remeber it is string "id":1, }) # create request object request = urllib2.Request(url,data) for key in header: request.add_header(key,header[key]) # get host list try: result = urllib2.urlopen(request) except urllib2.URLError as e: if hasattr(e, 'reason'): print 'We failed to reach a server.' print 'Reason: ', e.reason elif hasattr(e, 'code'): print 'The server could not fulfill the request.' print 'Error code: ', e.code else: response = json.loads(result.read()) result.close() print "Number Of Hosts: ", len(response['result']) for host in response['result']: print "Host ID:",host['hostid'],"HostName:",host['name']
輸出結果:
4.itemsid.get方法獲取單個主機下全部的監控項ID。根據第三點中獲取到的全部主機id與名稱,找到你想要獲取的主機id,填寫到下面代碼「hostids」中,獲取它下面的全部監控項。
官方地址:https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/item/get
python實現方法:
#!/usr/bin/env python2.7 #coding=utf-8 import json import urllib2 # based url and required header url = "http://192.168.0.217/zabbix/api_jsonrpc.php" header = {"Content-Type":"application/json"} # request json data = json.dumps( { "jsonrpc":"2.0", "method":"item.get", "params":{ "output":["itemids","key_"], "hostids":"10123", }, "auth":"4c38be0e3cda326c63e4f4be8f73a056", # theauth id is what auth script returns, remeber it is string "id":1, }) # create request object request = urllib2.Request(url,data) for key in header: request.add_header(key,header[key]) # get host list try: result = urllib2.urlopen(request) except urllib2.URLError as e: if hasattr(e, 'reason'): print 'We failed to reach a server.' print 'Reason: ', e.reason elif hasattr(e, 'code'): print 'The server could not fulfill the request.' print 'Error code: ', e.code else: response = json.loads(result.read()) result.close() print "Number Of Hosts: ", len(response['result']) for host in response['result']: print host #print "Host ID:",host['hostid'],"HostName:",host['name']
輸出結果:
5.history.get方法獲取單個監控項的歷史數據。根據第4點獲取到的全部items id的值,找到想要監控的那項,填寫到下面代碼「itemids」中,獲取它的歷史數據。
官方地址:https://www.zabbix.com/documentation/3.4/zh/manual/api/reference/history/get
python實現方法:
#!/usr/bin/env python2.7 #coding=utf-8 import json import urllib2 # based url and required header url = "http://192.168.0.217/zabbix/api_jsonrpc.php" header = {"Content-Type":"application/json"} # request json data = json.dumps( { "jsonrpc":"2.0", "method":"history.get", "params":{ "output":"extend", "history":3, "itemids":"27019", "limit":10 }, "auth":"4c38be0e3cda326c63e4f4be8f73a056", # theauth id is what auth script returns, remeber it is string "id":1, }) # create request object request = urllib2.Request(url,data) for key in header: request.add_header(key,header[key]) # get host list try: result = urllib2.urlopen(request) except urllib2.URLError as e: if hasattr(e, 'reason'): print 'We failed to reach a server.' print 'Reason: ', e.reason elif hasattr(e, 'code'): print 'The server could not fulfill the request.' print 'Error code: ', e.code else: response = json.loads(result.read()) result.close() print "Number Of Hosts: ", len(response['result']) for host in response['result']: print host #print "Host ID:",host['hostid'],"HostName:",host['name']
輸出結果: