python 一键添加 zabbix 监控脚本
由于时间关系没有在脚本里把创建主机组和模板的功能,只是单单实现了添加主机的功能zabbix_tools.py
#!/usr/bin/python #coding:utf-8import json import urllib2 from urllib2 import URLError import sysclass ZabbixTools: def __init__(self): self.url = 'http://lihuipeng.blog.51cto.com/zabbix/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": "lihuipeng" }, "id": 0 }) request = urllib2.Request(self.url, data) for key in self.header: request.add_header(key, self.header) try: result = urllib2.urlopen(request) except URLError as e: print "Auth Failed, please Check your name and password:", e.code else: response = json.loads(result.read()) result.close() #print response['result'] self.authID = response['result'] return self.authID def host_get(self): data = json.dumps({ "jsonrpc":"2.0", "method":"host.get", "params":{ "output":["hostid","name"], "filter":{"host":""} }, "auth":self.user_login(), "id":1, }) request = urllib2.Request(self.url, data) for key in self.header: request.add_header(key, self.header) 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()) result.close() print "Number Of Hosts: ", len(response['result']) for host in response['result']: print "Host ID:",host['hostid'],"Host Name:",host['name'] 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) try: result = urllib2.urlopen(request) except URLError as e: print "Error as ", e else: response = json.loads(result.read()) result.close() print "hostgroup : %s ------ id : %s" % (response['result']['name'], response['result']['groupid']) self.hostgroupID = response['result']['groupid'] return response['result']['groupid'] def template_get(self, templateName): data = json.dumps({ "jsonrpc":"2.0", "method": "template.get", "params": { "output": "extend", "filter": { "host": [ templateName, ] } }, "auth":self.user_login(), "id":1, }) request = urllib2.Request(self.url, data) for key in self.header: request.add_header(key, self.header) try: result = urllib2.urlopen(request) except URLError as e: print "Error as ", e else: response = json.loads(result.read()) result.close() print "template : %s ------ id : %s" % (response['result']['name'], response['result']['templateid']) self.templateID = response['result']['templateid'] return response['result']['templateid'] def host_create(self, hostip, hostgroupName, templateName): data = json.dumps({ "jsonrpc":"2.0", "method":"host.create", "params":{ "host": hostip, "interfaces": [ { "type": 1, "main": 1, "useip": 1, "ip": hostip, "dns": "", "port": "10050" } ], "groups": [ { "groupid": self.hostgroup_get(hostgroupName) } ], "templates": [ { "templateid": self.template_get(templateName) } ], }, "auth": self.user_login(), "id":1 }) request = urllib2.Request(self.url, data) for key in self.header: request.add_header(key, self.header) try: result = urllib2.urlopen(request) except URLError as e: print "Error as ", e else: response = json.loads(result.read()) result.close() print "host : %s ------ id : %s" % (hostip, response['result']['hostids']) self.hostid = response['result']['hostids'] return response['result']['hostids'] if __name__ == "__main__": if len(sys.argv) != 4: print "Usage: %s ip hostgroupName templateName" % sys.argv sys.exit(1) test = ZabbixTools() test.host_create(sys.argv, sys.argv, sys.argv) user_login是帐号密码验证
host_get 是列出监控机
hostgroup_get是获取主机组的ID
template_get 是获取模板的ID
host_create 添加主机
运行方式:(前提是test-group这个主机组和test-template这个模板必须存在)
./zabbix_tools.py192.168.3.100test-grouptest-template
参考文章:
https://www.zabbix.com/documentation/2.0/manual/appendix/api
页:
[1]