標籤:creat 解壓 group 禁用 img 多個 help att 連接埠
首先說一下坑的地方就是python2和python3的模組改變問題,當然精通python的可以略過。這個在網上百度一下吧,第二個是匯入xlsx檔案的時候需要xlrd模組,而這個模組最好跟著我下面的方法走,那個python2 就可以用我下邊的指令碼了。
1.安裝xlrd讀取Excel檔案
1.1. 下載setuptools-38.2.4.zip,上傳至zabbix伺服器解壓安裝,:https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca8623dadbc3b684e66350ea9e0006736194b265e99/setuptools-38.2.4.zip#md5=e8e05d4f8162c9341e1089c80f742f64
[[email protected] temp]# ll #上傳檔案setuptools-38.2.4.zip
total 724
-rw-r--r-- 1 root root 736683 Dec 17 22:37 setuptools-38.2.4.zip
[[email protected] temp]# unzip setuptools-38.2.4.zip #解壓setuptools-38.2.4.zip
1.2下載pip-9.0.1.tar.gz,上傳至zabbix伺服器解壓安裝,:https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
[[email protected] temp]# ll
total 1896
-rw-r--r-- 1 root root 1197370 Dec 17 22:53 pip-9.0.1.tar.gz #上傳檔案pip-9.0.1.tar.gz
drwxr-xr-x 9 root root 4096 Dec 17 22:55 setuptools-38.2.4
-rw-r--r-- 1 root root 736683 Dec 17 22:37 setuptools-38.2.4.zip
[[email protected] temp]# tar -xzvf pip-9.0.1.tar.gz #解壓pip-9.0.1.tar.gz
[[email protected] pip-9.0.1]# python setup.py build #編譯
[[email protected] pip-9.0.1]# python setup.py install #安裝
[[email protected] pip-9.0.1]# pip install xlrd #安裝xlrd
3.編輯Excel模板
3.1主機名稱、顯示名、IP、主機群組、模板
3.2將Execle表zabbix_host_add.xlsx上傳至zabbix伺服器
[ro[email protected] temp]# ll
total 1964
-rw-r--r-- 1 root root 46079 Dec 17 23:28 zabbix_host_add.xlsx
4.編寫Python指令碼,參考http://www.361way.com/zabbix-api-2/3681.html
#!/usr/bin/python
#coding:utf-8
import json
import urllib2
from urllib2 import URLError
import sys,argparse
import xlrd
defaultencoding = ‘utf-8‘
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)
class zabbix_api:
def init(self):
self.url = ‘http://zabbix伺服器IP地址/zabbix/api_jsonrpc.php‘ #修改URL
self.header = {"Content-Type":"application/json"}
def user_login(self): data = json.dumps({ "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", #web頁面登入使用者名稱 "password": "zabbix" #web頁面登入密碼 }, "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 使用者認證失敗,請檢查 !\033[0m", e.code else: response = json.loads(result.read()) result.close() #print response[‘result‘] self.authID = response[‘result‘] return self.authID def host_get(self,hostName=‘‘): data=json.dumps({ "jsonrpc": "2.0", "method": "host.get", "params": { "output": "extend", "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 response result.close() print "主機數量: \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 Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"%(host[‘hostid‘],host[‘name‘],status[host[‘status‘]],available[host[‘available‘]]) else: print "HostID : %s\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m"%(host[‘hostid‘],host[‘name‘],status[host[‘status‘]],available[host[‘available‘]]) return host[‘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: #print result.read() response = json.loads(result.read()) result.close() #print response() 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 for template in response[‘result‘]: if len(templateName)==0: print "template : \033[31m%s\033[0m\t id : %s" % (template[‘name‘], template[‘templateid‘]) else: self.templateID = response[‘result‘][0][‘templateid‘] print "Template Name : \033[31m%s\033[0m "%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 "\033[042m 添加主機群組:%s\033[0m hostgroupID : %s"%(hostgroupName,response[‘result‘][‘groupids‘]) def host_create_andy(self,hostName,visibleName, hostip, hostgroupName, templateName): if self.host_get(hostip): print "\033[041m該主機已經添加!\033[0m" 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, "name": visibleName, "interfaces": [ { "type": 2, #1:表示IP;2表示SNMP "main": 1, "useip": 1, "ip": hostip, "dns": "", "port": "161" #IP連接埠10051;SNMP連接埠161 } ], "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) except URLError as e: print "Error as ", e else: response = json.loads(result.read()) result.close() print "添加主機 : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response[‘result‘][‘hostids‘]) def host_create(self, hostip, hostgroupName, templateName): if self.host_get(hostip): print "\033[041m該主機已經添加!\033[0m" 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": hostip, "interfaces": [ { "type": 2, "main": 1, "useip": 1, "ip": hostip, "dns": "", "port": "161" } ], "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) except URLError as e: print "Error as ", e else: response = json.loads(result.read()) result.close() print "添加主機 : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response[‘result‘][‘hostids‘]) 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) 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 ‘----主機現在狀態------------‘ print self.host_get(hostip) def host_delete(self,hostid): hostid_list=[] #print type(hostid) for i in hostid.split(‘,‘): var = {} var[‘hostid‘] = self.host_get(i) hostid_list.append(var) 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) except Exception,e: print e else: result.close() print "主機 \033[041m %s\033[0m 已經刪除 !"%hostid
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=‘查詢主機‘)
parser.add_argument(‘-G‘,‘--group‘,nargs=‘?‘,dest=‘listgroup‘,default=‘group‘,help=‘查詢主機群組‘)
parser.add_argument(‘-T‘,‘--template‘,nargs=‘?‘,dest=‘listtemp‘,default=‘template‘,help=‘查詢範本資訊‘)
parser.add_argument(‘-A‘,‘--add-group‘,nargs=1,dest=‘addgroup‘,help=‘添加主機群組‘)
parser.add_argument(‘-C‘,‘--add-host‘,dest=‘addhost‘,nargs=3,metavar=(‘192.168.2.1‘, ‘test01,test02‘, ‘Template01,Template02‘),help=‘添加主機,多個主機群組或模板使用分號‘)
parser.add_argument(‘-d‘,‘--disable‘,dest=‘disablehost‘,nargs=1,metavar=(‘192.168.2.1‘),help=‘禁用主機‘)
parser.add_argument(‘-L‘,‘--allin‘,dest=‘allin‘,nargs=‘?‘,default=‘allin‘,help=‘從Excel大量匯入主機‘)
parser.add_argument(‘-D‘,‘--delete‘,dest=‘deletehost‘,nargs=‘+‘,metavar=(‘192.168.2.1‘),help=‘刪除主機,多個主機之間用分號‘)
parser.add_argument(‘-v‘,‘--version‘, action=‘version‘, version=‘%(prog)s 1.0‘)
if len(sys.argv)==1:
print parser.print_help()
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]) if args.disablehost: zabbix.host_disable(args.disablehost) if args.deletehost: zabbix.host_delete(args.deletehost[0]) if args.allin != ‘allin‘: workbook = xlrd.open_workbook(‘zabbix_host_add.xlsx‘) #Excel名 for row in xrange(workbook.sheets()[0].nrows): hostname = workbook.sheets()[0].cell(row, 0).value visible = workbook.sheets()[0].cell(row, 1).value hostip = workbook.sheets()[0].cell(row, 2).value hostgroup = workbook.sheets()[0].cell(row, 3).value hosttemp = workbook.sheets()[0].cell(row, 4).value zabbix.host_create_andy(hostname,visible,hostip,hostgroup, hosttemp)
上面紅色標註,請根據實際情況修改。
上傳Python指令碼zabbix_host.py至zabbix伺服器
[[email protected] temp]# ll
total 1964
-rwxr-xr-x 1 root root 14644 Dec 17 23:28 zabbix_host.py
[[email protected] temp]# chown zabbix:zabbix zabbix_host.py #修改屬組屬主
[[email protected] temp]# chmod +x zabbix_host.py #添加執行許可權
執行指令碼:python zabbix_host.py
每個參數都有詳細的說明
大家不妨執行玩一玩。
我們用匯入的xlsx檔案這樣用: python zabbix_host.py -L zabbix_host_add.xlsx
顯示如下結果 證明添加成功:
然後去web上看看吧,這就是zabbix API簡單應用。
python利用zabbix API添加監控