zabbix 優(yōu)勢在于其豐富的api功能,可以高度定制化、擴展。筆者也是在使用了1年的API中收獲頗豐。在cmdb資產管理功能、微信操作控制zabbix功能、獲取zabbix數(shù)據(jù)制作報表等都利用到了zabbix api。

微信操控系統(tǒng)
** 1.登陸腳本 login.py
** 2.定義函數(shù)腳本 function.py
** 3.**調用執(zhí)行腳本 zabbix.py
- 登陸腳本 login.py
#!/usr/bin/env python
import urllib2
import json
#定義URL賬戶密碼
url = 'http://zabbixip/zabbix/api_jsonrpc.php'
username = 'admin'
password = 'password'
#定義通過HTTP方式訪問API地址的函數(shù),后面每次請求API的各個方法都會調用這個函數(shù)
def requestJson(url,values):
data = json.dumps(values)
req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
response = urllib2.urlopen(req, data)
output = json.loads(response.read())
# print output
try:
message = output['result']
except:
message = output['error']['data']
print message
quit()
return output['result']
#API接口認證的函數(shù),登錄成功會返回一個Token
def authenticate(url, username, password):
values = {'jsonrpc': '2.0',
'method': 'user.login',
'params': {
'user': username,
'password': password
},
'id': '0'
}
idvalue = requestJson(url,values)
return idvalue
- 定義函數(shù)腳本 function.py(這里只是部分函數(shù)供參考更多查看官方文檔)
#!/usr/bin/env python
#coding=utf-8
import sys
import argparse
import urllib2
import json
#定義更新action函數(shù)
def mediatypeupdate(mediatypeid,status,auth):
values = {'jsonrpc': '2.0',
'method': 'mediatype.update',
'params': {
"mediatypeid": mediatypeid,
"status": status
},
'auth': auth,
'id': '1'
}
output = requestJson(url,values)
#定義讀取狀態(tài)函數(shù)
def triggerget(auth):
values = {'jsonrpc': '2.0',
"method":"trigger.get",
"params": {
"output": [
"triggerid",
"description",
"priority"
],
"filter": {
"value": 1
},
"expandData":"hostname",
"sortfield": "priority",
"sortorder": "DESC"
},
'auth': auth,
'id': '2'
}
output = requestJson(url,values)
return output
#定義通過ip獲取主機id的函數(shù)
def ipgetHostsid(ip,url,auth):
values = {'jsonrpc': '2.0',
'method': 'host.get',
'params': {
'output': [ "host" ],
'filter': {
'ip': ip
},
},
'auth': auth,
'id': '3'
}
output = requestJson(url,values)
return output
#定義通過主機id獲取開啟關閉監(jiān)控函數(shù)
def idupdatehost(status,hostid,url,auth):
values = {'jsonrpc': '2.0',
'method': 'host.update',
'params': {
"hostid": hostid,
"status": status
},
'auth': auth,
'id': '4'
}
output = requestJson(url,values)
return output
#定義通過項目hostid獲取itemid函數(shù)
def getHostsitemsid(hostid,itemsname,url,auth):
values = {'jsonrpc': '2.0',
'method': "item.get",
"params": {
"output": ["itemids"],
"hostids": hostid,
"filter":{
"key_": itemsname,
},
},
'auth': auth,
'id': '5'
}
output = requestJson(url,values)
if len(output)==0:
return output
else:
return output[0]['itemid']
#定義通過項目id獲取監(jiān)控項目最近值信息的函數(shù)
def getHostsitemsvalue(itemid,url,auth):
values = {'jsonrpc': '2.0',
'method': "history.get",
"params": {
"output": "extend",
"history":3,
"itemids":itemid,
"sortfield": "clock",
"sortorder": "DESC",
"limit":1,
},
'auth': auth,
'id': '6'
}
output = requestJson(url,values)
if len(output)==0:
return output
else:
return output[0]["value"]
#定義更新讀取狀態(tài)action函數(shù)
def mediatypeget(mediatypeid,auth):
values = {'jsonrpc': '2.0',
'method': 'mediatype.get',
'params': {
"output": "extend",
"filter": {
"mediatypeid":mediatypeid,
},
},
'auth': auth,
'id': '7'
}
output = requestJson(url,values)
if len(output)==0:
return output
else:
return output[0]['status']
#定義maintenance維修模式host函數(shù)
def maintenancecreate(maintenancename,active_since,active_till,hostid,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.create',
'params': {
"name": maintenancename,
"active_since": active_since,
"active_till": active_till,
"hostids": [
hostid
],
"timeperiods": [
{
"timeperiod_type": 0,
"every": 1,
"dayofweek": 64,
"start_time": 64800,
"period": 3600
}
]
},
'auth': auth,
'id': '8'
}
output = requestJson(url,values)
#定義通過模糊獲取關閉主機信息函數(shù)
def disabledhostget(url,auth):
values = {'jsonrpc': '2.0',
'method': 'host.get',
"params": {
"output": ["host"],
'selectInterfaces': [ "ip" ],
"filter": {
"status":1
}
},
'auth': auth,
'id': '9'
}
output = requestJson(url,values)
return output
#定義maintenance維修模式group函數(shù)
def maintenancecreategroup(maintenancename,active_since,active_till,groupid,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.create',
'params': {
"name": maintenancename,
"active_since": active_since,
"active_till": active_till,
"groupids": [
groupid
],
"timeperiods": [
{
"timeperiod_type": 0,
"every": 1,
"dayofweek": 64,
"start_time": 64800,
"period": 3600
}
]
},
'auth': auth,
'id': '10'
}
output = requestJson(url,values)
#定義通過host groups named 獲取groupid
def groupnameGroupid(groupname,auth):
values = {'jsonrpc': '2.0',
'method': 'hostgroup.get',
"params": {
"output": "extend",
"filter": {
"name": [
groupname
]
}
},
'auth': auth,
'id': '11'
}
output = requestJson(url,values)
return output
#定義模糊查詢維護主機
def maintenanceget(url,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.get',
"params": {
"output": "extend",
},
'auth': auth,
'id': '12'
}
output = requestJson(url,values)
return output
#定義批量恢復處于維護主機
def maintenancedelete(maintenanceid,url,auth):
values = {'jsonrpc': '2.0',
'method': 'maintenance.delete',
"params": [
maintenanceid
],
'auth': auth,
'id': '13'
}
output = requestJson(url,values)
return output
#定義通過hostid獲取graphid的函數(shù)
def getgraphid(hostid,graphname,url,auth):
values = {'jsonrpc': '2.0',
'method': 'graph.get',
'params': {
"output": "name",
"hostids": hostid,
"sortfield": "name",
'filter': {
"name": graphname
},
},
'auth': auth,
'id': '14'
}
output = requestJson(url,values)
return output
- zabbix.py這里只是給出“關閉、啟用主機監(jiān)控”調用供參考
#!/usr/bin/env python
#coding=utf-8
import urllib2
import sys
import json
import argparse
from login import *
from function import *
#登陸zabbix獲取auth
auth = authenticate(url, username, password)
#狀態(tài)0是啟用監(jiān)控,1是禁用監(jiān)控
status=1
#定義操作ip
hostip='192.168.1.100'
#通過hostip獲取zabbix hostid
hostids=ipgetHostsid(hostip,url,auth)
hostid=hostids[0]['hostid']
#通過主機id開啟關閉監(jiān)控
idupdatehost(status,hostid,url,auth)