一、API簡(jiǎn)介
Zabbix API是在1.8版本中開(kāi)始引進(jìn)并且已經(jīng)被廣泛應(yīng)用龄坪。所有的Zabbix移動(dòng)客戶(hù)端都是基于API昭雌,甚至原生的WEB前端部分也是建立在它之上复唤。Zabbix API 中間件使得架構(gòu)更加模塊化也避免直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作健田。它允許你通過(guò)JSON
RPC協(xié)議來(lái)創(chuàng)建、更新和獲取Zabbix對(duì)象并且做任何你喜歡的操作【當(dāng)然前提是你擁有認(rèn)證賬戶(hù)】佛纫。
Zabbix API提供兩項(xiàng)主要功能:
遠(yuǎn)程管理Zabbix配置
遠(yuǎn)程檢索配置和歷史數(shù)據(jù)
使用JSON
API 采用JSON-RPC實(shí)現(xiàn)妓局。這意味著調(diào)用任何函數(shù),都需要發(fā)送POST請(qǐng)求呈宇,輸入輸出數(shù)據(jù)都是以JSON格式好爬。大致工作流如下:
- 準(zhǔn)備JSON對(duì)象,它描述了你想要做什么(創(chuàng)建主機(jī)甥啄,獲取圖像存炮,更新監(jiān)控項(xiàng)等)。
- 采用POST方法向 http://example.com/zabbix/api_jsonrpc.php 發(fā)送此JSON對(duì)象蜈漓;
http://example.com/zabbix/ 是Zabbix前端地址 穆桂,api_jsonrpc.php是調(diào)用API的PHP腳本∪谒洌可在安裝可視化前端的目錄下找到享完。
- 獲取JSON格式響應(yīng)。
- 注:請(qǐng)求除了必須是POST方法之外有额,HTTP Header Content-Type必須為【application/jsonrequest般又,application/json-rpc,application/json】其中之一巍佑。
可以采用腳本或者任何"手動(dòng)"支持JSON RPC的工具來(lái)使用API茴迁。而首先需要了解的就是如何驗(yàn)證和如何使用驗(yàn)證ID來(lái)獲取想要的信息。后面的演示會(huì)以Python腳本和基于Curl的例子來(lái)呈現(xiàn)API的基本使用萤衰。
基本請(qǐng)求格式
Zabbix API 簡(jiǎn)化的JSON請(qǐng)求如下:
{
"jsonrpc": "2.0",
"method": "method.name",
"params": {
"param_1_name": "param_1_value",
"param_2_name": "param_2_value"
},
"id": 1,
"auth": "159121b60d19a9b4b55d49e30cf12b81",
}
一行一行來(lái)看:
- "jsonrpc": "2.0"-這是標(biāo)準(zhǔn)的JSON RPC參數(shù)以標(biāo)示協(xié)議版本笋熬。所有的請(qǐng)求都會(huì)保持不變。
- "method": "method.name"-這個(gè)參數(shù)定義了真實(shí)執(zhí)行的操作腻菇。例如:host.create胳螟、item.update等等
- "params"-這里通過(guò)傳遞JSON對(duì)象來(lái)作為特定方法的參數(shù)昔馋。如果你希望創(chuàng)建監(jiān)控項(xiàng),"name"和"key_"參數(shù)是需要的糖耸,每個(gè)方法需要的參數(shù)在Zabbix API文檔中都有描述秘遏。
- "id": 1-這個(gè)字段用于綁定JSON請(qǐng)求和響應(yīng)。響應(yīng)會(huì)跟請(qǐng)求有相同的"id"嘉竟。在一次性發(fā)送多個(gè)請(qǐng)求時(shí)很有用邦危,這些也不需要唯一或者連續(xù)
- "auth": "159121b60d19a9b4b55d49e30cf12b81"-這是一個(gè)認(rèn)證令牌【authentication token】用以鑒別用戶(hù)、訪(fǎng)問(wèn)API舍扰。這也是使用API進(jìn)行相關(guān)操作的前提-獲取認(rèn)證ID倦蚪。
以上參考:zabbix小結(jié)(八)Zabbix api
二 、直接上工具腳本
集合腳本边苹,包含查詢(xún)主機(jī)陵且,主機(jī)組,模板个束,添加開(kāi)啟禁用刪除主機(jī)等功能
> vim zbx_tool.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import json
import sys
import urllib2
import argparse
from urllib2 import URLError
reload(sys)
sys.setdefaultencoding('utf-8')
class zabbix_api:
def __init__(self):
self.url = 'http://zabbix.xxx.com/api_jsonrpc.php'
self.header = {"Content-Type":"application/json"}
def user_login(self):
data = json.dumps({
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "admin",
"password": "zabbix"
},
"id": 0
})
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
print "\033[041m 認(rèn)證失敗慕购,請(qǐng)檢查URL !\033[0m",e.code
except KeyError as e:
print "\033[041m 認(rèn)證失敗,請(qǐng)檢查用戶(hù)名密碼 !\033[0m",e
else:
response = json.loads(result.read())
result.close()
#print response['result']
self.authID = response['result']
return self.authID
def hostid_get_hostname(self, hostId=''):
data = json.dumps({
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": "extend",
"filter": {"hostid": hostId}
},
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except 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())
#print response
result.close()
if not len(response['result']):
print "hostId is not exist"
return False
#print "主機(jī)數(shù)量: \33[31m%s\33[0m" % (len(response['result']))
host_dict=dict()
for host in response['result']:
status = {"0": "OK", "1": "Disabled"}
available = {"0": "Unknown", "1": "available", "2": "Unavailable"}
#if len(hostId) == 0:
# print "HostID : %s\t HostName : %s\t Status :\33[32m%s\33[0m \t Available :\33[31m%s\33[0m" % (
# host['hostid'], host['name'], status[host['status']], available[host['available']])
#else:
# print "HostID : %s\t HostName : %s\t Status :\33[32m%s\33[0m \t Available :\33[31m%s\33[0m" % (
# host['hostid'], host['name'], status[host['status']], available[host['available']])
host_dict['name']=host['name']
host_dict['status']=status[host['status']]
host_dict['available']=available[host['available']]
return host_dict
def hostid_get_hostip(self, hostId=''):
data = json.dumps({
"jsonrpc": "2.0",
"method": "hostinterface.get",
"params": {
"output": "extend",
"filter": {"hostid": hostId}
},
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except 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())
# print response
result.close()
if not len(response['result']):
print "\033[041m hostid \033[0m is not exist"
return False
#print "主機(jī)數(shù)量: \33[31m%s\33[0m" % (len(response['result']))
for hostip in response['result']:
#print hostip
#if len(hostip) == 0:
# print "HostID : %s\t HostIp : %s \t Port : %s " % (hostip['hostid'], hostip['ip'], hostip['port'])
#else:
# print "HostID : %s\t HostIp :\33[32m%s\33[0m \t Port :\33[31m%s\33[0m" % (
# hostip['hostid'], hostip['ip'], hostip['port'])
return hostip['ip']
def host_get(self,hostName=''):
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": "extend",
#"filter":{"host":""}
"filter":{"host":hostName}
},
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except 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())
#print reqponse
result.close()
if not len(response['result']):
print "\033[041m %s \033[0m is not exist" % hostName
return False
print "主機(jī)數(shù)量: \033[31m%s\033[0m"%(len(response['result']))
for host in response['result']:
status={"0":"OK","1":"Disabled"}
available={"0":"Unknown","1":"available","2":"Unavailable"}
#print host
if len(hostName)==0:
print "HostID : %s\t HostName : %s\t HostIp : %s\t Status :%s \t Available :%s"%(host['hostid'],host['name'],self.hostid_get_hostip(hostId=host['hostid']),status[host['status']],available[host['available']])
else:
print "HostID : %s\t HostName : %s\t HostIp : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"%(host['hostid'],host['name'],self.hostid_get_hostip(hostId=host['hostid']),status[host['status']],available[host['available']])
return host['hostid']
def hostip_get(self, hostIp=''):
data = json.dumps({
"jsonrpc": "2.0",
"method": "hostinterface.get",
"params": {
"output": "extend",
"filter": {"ip": hostIp}
},
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except 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())
# print response
result.close()
if not len(response['result']):
print "\033[041m hostip \033[0m is not exist"
return False
print "主機(jī)數(shù)量: \33[31m%s\33[0m" % (len(response['result']))
for hostip in response['result']:
host = self.hostid_get_hostname(hostip['hostid'])
if len(hostip) == 0:
print "HostID : %s\t HostName : %s\t HostIp : %s\t Status :\33[32m%s\33[0m \t Available :\33[31m%s\33[0m"%(hostip['hostid'],host['name'],hostip['ip'],host['status'],host['available'])
else:
print "HostID : %s\t HostName : %s\t HostIp : %s\t Status :\33[32m%s\33[0m \t Available :\33[31m%s\33[0m"%(hostip['hostid'],host['name'],hostip['ip'],host['status'],host['available'])
return hostip['hostid']
def hostgroup_get(self, hostgroupName=''):
data = json.dumps({
"jsonrpc":"2.0",
"method":"hostgroup.get",
"params":{
"output": "extend",
"filter": {
"name": hostgroupName
}
},
"auth":self.user_login(),
"id":1,
})
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
else:
# result.read()
response = json.loads(result.read())
result.close()
#print response()
if not len(response['result']):
print "\033[041m %s \033[0m is not exist" % hostgroupName
return False
for group in response['result']:
if len(hostgroupName)==0:
print "hostgroup: \033[31m%s\033[0m \tgroupid : %s" %(group['name'],group['groupid'])
else:
print "hostgroup: \033[31m%s\033[0m\tgroupid : %s" %(group['name'],group['groupid'])
self.hostgroupID = group['groupid']
return group['groupid']
def template_get(self,templateName=''):
data = json.dumps({
"jsonrpc":"2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"name":templateName
}
},
"auth":self.user_login(),
"id":1,
})
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
else:
response = json.loads(result.read())
result.close()
#print response
if not len(response['result']):
print "\033[041m %s \033[0m is not exist" % templateName
return False
for template in response['result']:
if len(templateName)==0:
print "template : %s \t id : %s" % (template['name'], template['templateid'])
else:
self.templateID = response['result'][0]['templateid']
print "Template Name :%s"%templateName
return response['result'][0]['templateid']
def hostgroup_create(self,hostgroupName):
if self.hostgroup_get(hostgroupName):
print "hostgroup \033[42m%s\033[0m is exist !" % hostgroupName
sys.exit(1)
data = json.dumps({
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": hostgroupName
},
"auth": self.user_login(),
"id": 1
})
request=urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
print "Error as ", e
else:
response = json.loads(result.read())
result.close()
print "添加主機(jī)組:%s hostgroupID : %s"%(hostgroupName,self.hostgroup_get(hostgroupName))
def host_create(self, hostIp, hostgroupName, templateName, hostName):
if self.host_get(hostName) or self.hostip_get(hostIp):
print "該主機(jī)已經(jīng)添加!"
sys.exit(1)
group_list=[]
template_list=[]
for i in hostgroupName.split(','):
var = {}
var['groupid'] = self.hostgroup_get(i)
group_list.append(var)
for i in templateName.split(','):
var={}
var['templateid']=self.template_get(i)
template_list.append(var)
data = json.dumps({
"jsonrpc":"2.0",
"method":"host.create",
"params":{
"host": hostName,
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": hostIp,
"dns": "",
"port": "10050"
}
],
"groups": group_list,
"templates": template_list,
},
"auth": self.user_login(),
"id":1
})
request = urllib2.Request(self.url, data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
response = json.loads(result.read())
result.close()
print "add host : %s id :%s" % (hostIp, hostName)
except URLError as e:
print "Error as ", e
except KeyError as e:
print "\033[041m 主機(jī)添加有誤茬底,請(qǐng)檢查模板正確性或主機(jī)是否添加重復(fù) !\033[0m",e
print response
def host_disable(self,hostip):
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.update",
"params": {
"hostid": self.host_get(hostip),
"status": 1
},
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url,data)
#opener = urllib2.build_opener(urllib2.HTTPBasicAuthHandler(TerminalPassword()))
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
#result = opener.open(request)
except URLError as e:
print "Error as ", e
else:
response = json.loads(result.read())
result.close()
print '------------主機(jī)現(xiàn)在狀態(tài)------------'
print self.host_get(hostip)
def host_enable(self,hostip):
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.update",
"params": {
"hostid": self.host_get(hostip),
"status": 0
},
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
#result = opener.open(request)
except URLError as e:
print "Error as ", e
else:
response = json.loads(result.read())
result.close()
print '------------主機(jī)現(xiàn)在狀態(tài)------------'
print self.host_get(hostip)
def host_delete(self,hostNames):
hostid_list=[]
for hostName in hostNames.split(','):
hostid = self.host_get(hostName=hostName)
if not hostid:
print "主機(jī) \033[041m %s\033[0m 刪除失敗 !" % hostName
sys.exit()
hostid_list.append(hostid)
data=json.dumps({
"jsonrpc": "2.0",
"method": "host.delete",
"params": hostid_list,
"auth": self.user_login(),
"id": 1
})
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key, self.header[key])
try:
result = urllib2.urlopen(request)
result.close()
print "主機(jī) \033[041m %s\033[0m 已經(jīng)刪除 !" % hostName
except Exception,e:
print e
if __name__ == "__main__":
zabbix=zabbix_api()
parser=argparse.ArgumentParser(description='zabbix api ',usage='%(prog)s [options]')
parser.add_argument('-H','--host',nargs='?',dest='listhost',default='host',help='查詢(xún)主機(jī)')
parser.add_argument('-G','--group',nargs='?',dest='listgroup',default='group',help='查詢(xún)主機(jī)組')
parser.add_argument('-T','--template',nargs='?',dest='listtemp',default='template',help='查詢(xún)模板信息')
parser.add_argument('-A','--add-group',nargs=1,dest='addgroup',help='添加主機(jī)組')
parser.add_argument('-C','--add-host',dest='addhost',nargs=4,metavar=('192.168.2.1', 'groupname', 'Template01,Template02', 'hostName'),help='添加主機(jī),多個(gè)主機(jī)組或模板使用逗號(hào)')
parser.add_argument('-d','--disable',dest='disablehost',nargs='+',metavar=('sh-aa-01'),help='禁用主機(jī),填寫(xiě)主機(jī)名沪悲,多個(gè)主機(jī)名之間用逗號(hào)')
parser.add_argument('-e','--enable',dest='enablehost',nargs=1,metavar=('sh-aa-01'),help='開(kāi)啟主機(jī)')
parser.add_argument('-D','--delete',dest='deletehost',nargs='+',metavar=('sh-aa-01'),help='刪除主機(jī),多個(gè)主機(jī)之間用逗號(hào)')
parser.add_argument('-v','--version', action='version', version='%(prog)s 1.0')
if len(sys.argv) == 1:
#print parser.print_help()
#print zabbix.host_get(hostName='bbb')
#print zabbix.hostip_get(hostIp='127.0.0.1')
#print zabbix.hostid_get_hostname(hostId='10108')
#print zabbix.hostid_get_hostid(hostId='10105')
#print zabbix.hostgroup_get(hostgroupName='Linux servers')
#print zabbix.hostgroup_get(hostgroupName='aaa')
# ...
print zabbix.host_delete('hz-aaa-02')
else:
args = parser.parse_args()
if args.listhost != 'host':
if args.listhost:
zabbix.host_get(args.listhost)
else:
zabbix.host_get()
if args.listgroup != 'group':
if args.listgroup:
zabbix.hostgroup_get(args.listgroup)
else:
zabbix.hostgroup_get()
if args.listtemp != 'template':
if args.listtemp:
zabbix.template_get(args.listtemp)
else:
zabbix.template_get()
if args.addgroup:
zabbix.hostgroup_create(args.addgroup[0])
if args.addhost:
zabbix.host_create(args.addhost[0], args.addhost[1], args.addhost[2], args.addhost[3])
if args.disablehost:
zabbix.host_disable(args.disablehost)
if args.deletehost:
zabbix.host_delete(args.deletehost[0])
- 先用pip安裝argparse
用法如下:
> python zbx_tool.py -h
usage: zbx_tool.py [options]
zabbix api
optional arguments:
-h, --help show this help message and exit
-H [LISTHOST], --host [LISTHOST]
查詢(xún)主機(jī)
-G [LISTGROUP], --group [LISTGROUP]
查詢(xún)主機(jī)組
-T [LISTTEMP], --template [LISTTEMP]
查詢(xún)模板信息
-A ADDGROUP, --add-group ADDGROUP
添加主機(jī)組
-C 192.168.2.1 groupname Template01,Template02 hostName, --add-host 192.168.2.1 groupname Template01,Template02 hostName
添加主機(jī),多個(gè)主機(jī)組或模板使用逗號(hào)
-d sh-aa-01 [sh-aa-01 ...], --disable sh-aa-01 [sh-aa-01 ...]
禁用主機(jī),填寫(xiě)主機(jī)名,多個(gè)主機(jī)名之間
¨逗號(hào)
-e sh-aa-01, --enable sh-aa-01
開(kāi)啟主機(jī)
-D sh-aa-01 [sh-aa-01 ...], --delete sh-aa-01 [sh-aa-01 ...]
刪除主機(jī),多個(gè)主機(jī)之間用逗號(hào)
-v, --version show program's version number and exit
執(zhí)行查看
> python zbx_tool.py -H
主機(jī)數(shù)量: 1
HostID : 10084 HostName : Zabbix server Status :OK Available :available
> python zbx_tool.py -G
hostgroup: Templates groupid : 1
hostgroup: Linux servers groupid : 2
hostgroup: Zabbix servers groupid : 4
hostgroup: Discovered hosts groupid : 5
hostgroup: Virtual machines groupid : 6
hostgroup: Hypervisors groupid : 7
> python zbx_tool.py -T
template : Template OS Linux id : 10001
template : Template App Zabbix Server id : 10047
template : Template App Zabbix Proxy id : 10048
template : Template App Zabbix Agent id : 10050
template : Template SNMP Interfaces id : 10060
...
> python zbx_tool.py -C 1.1.1.10 'Linux servers','Zabbix servers' 'Template OS Linux' hz-aaa-01
主機(jī)數(shù)量: 0
hostgroup: Linux servers groupid : 2
hostgroup: Zabbix servers groupid : 4
Template Name :Template OS Linux
add host : 1.1.1.10 id :[u'10105']
> python zbx_tool.py -C 1.1.1.10 'Linux servers','Zabbix servers' 'Template OS Linux' hz-aaa-01
主機(jī)數(shù)量: 0
hostgroup: Linux servers groupid : 2
hostgroup: Zabbix servers groupid : 4
Template Name :Template OS Linux
主機(jī)添加有誤阱表,請(qǐng)檢查模板正確性或主機(jī)是否添加重復(fù) ! 'result'
{u'jsonrpc': u'2.0', u'id': 1, u'error': {u'message': u'Invalid params.', u'code': -32602, u'data': u'Host with the same name "hz-aaa-01" already exists.'}}
> 還有其他用法就不一一舉例了
腳本完成殿如,在原作者基礎(chǔ)上略作修改,以適應(yīng)自己的項(xiàng)目 ~
三最爬、批量操作腳本
準(zhǔn)備target文件
> vim target
sh-aaa-01,1.1.1.1
sh-aaa-02,1.1.1.2
sh-aaa-03,1.1.1.3
sh-aaa-04,1.1.1.4
批量添加主機(jī)的target文件如上涉馁,主機(jī)名和ip用逗號(hào)分隔;
其他批量操作烂叔,只寫(xiě)入主機(jī)名即可谨胞;
批量腳本
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
import sys
import argparse
# 導(dǎo)入zabbix_tool.py的zabbix_api類(lèi)
from zbx_tool import zabbix_api
reload(sys)
sys.setdefaultencoding('utf-8')
host_file = 'target'
base_templates = "'aaa',"
cmd = 'python zbx_tool.py'
# 實(shí)例化zabbix_api
zabbix=zabbix_api()
def create_hosts():
groups = raw_input("Please Input Group Name: ")
add_templates = raw_input("Please Input Template Name: ")
templates = base_templates + add_templates
cmd1 = cmd + ' -A ' + groups
os.system(cmd1)
with open(host_file) as fb:
host_info = dict(line.strip().split(',') for line in fb)
for hostname in host_info:
cmd2 = cmd + ' -C ' + host_info[hostname] + ' ' + groups + ' ' +templates + ' ' + hostname
os.system(cmd2)
# 如果本機(jī)是sat,target文件可以只寫(xiě)主機(jī)名蒜鸡,然后用salt獲取ip,上一段腳本如下修改:
# with open(host_file) as fb:
# host_info = list(line.strip() for line in fb)
#
# for hostname in host_info:
# ip_cmd='salt ' + hostname + ' grains.item fqdn_ip4|xargs'
# ip = os.popen(ip_cmd).read().split()[4]
# cmd2 = cmd + ' -C ' + ip + ' ' + groups + ' ' +templates + ' ' + hostname
# os.system(cmd2)
def get_hosts():
with open(host_file) as fb:
[zabbix.host_get(line.strip()) for line in fb]
def delete_hosts():
with open(host_file) as fb:
[zabbix.host_delete(line.strip()) for line in fb]
def enable_hosts():
with open(host_file) as fb:
[zabbix.host_enablee(line.strip()) for line in fb]
def disable_hosts():
with open(host_file) as fb:
[zabbix.host_disable(line.strip()) for line in fb]
if __name__ == "__main__":
if len(sys.argv) == 1 or sys.argv[1] == '-h':
print "you need a argv,like:"
print """
python zbx_cli.py -A #批量添加主機(jī)
python zbx_cli.py -C #批量查詢(xún)主機(jī)
python zbx_cli.py -D #批量刪除主機(jī)
python zbx_cli.py -e #批量開(kāi)啟主機(jī)
python zbx_cli.py -d #批量禁止主機(jī)
"""
else:
if sys.argv[1] == '-A':
create_hosts()
elif sys.argv[1] == '-C':
get_hosts()
elif sys.argv[1] == '-D':
delete_hosts()
elif sys.argv[1] == '-e':
disable_hosts()
elif sys.argv[1] == '-d':
enable_hosts()
執(zhí)行測(cè)試
python zbx_cli.py -D
主機(jī)數(shù)量: 1
HostID : 12440 HostName : hz-xxx-xxx-api-online-07 HostIp : 1.1.1.1 Status :OK Available :available
主機(jī) hz-xxx-xxx-api-online-07 已經(jīng)刪除 !
主機(jī)數(shù)量: 1
HostID : 12439 HostName : hz-xxx-xxx-api-online-08 HostIp : 1.1.1.2 Status :OK Available :available
主機(jī) hz-xxx-xxx-api-online-08 已經(jīng)刪除 !
主機(jī)數(shù)量: 1
...
其他就不貼執(zhí)行效果了胯努,自己試;
這兩個(gè)腳本最好放一塊逢防,因?yàn)閦abbix_cli.py的批量操作是通過(guò)調(diào)用zabbix_tool.py完成的
~ 好了叶沛,zabbix API 嘗試到此結(jié)束
腳本完成,在原作者基礎(chǔ)上略作修改忘朝,以適應(yīng)自己的項(xiàng)目 ~