zabbix有一个API接口,可以调用这些几口来自动添加主机,查询zabbix中监控的主机,监控的模板、监控的主机组等信息,使用也非常的方便。以下是用python调用zabbix的API接口来实现上述功能:

#!/usr/bin/env python# -*- coding: utf-8 -*-import jsonimport urllib2import sysclass zabbixtools:    def __init__(self):        self.url = "http://192.168.100.200/zabbix/api_jsonrpc.php"        self.header = {"Content-Type": "application/json"}        self.authID = self.user_login()    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 "Auth Failed, Please Check Your Name And Password:",e.code        else:            response = json.loads(result.read())            result.close()            authID = response['result']            return authID    def get_data(self,data,hostip=""):        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            return 0        else:            response = json.loads(result.read())            result.close()            return response    def host_get(self,hostip):        #hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your Check Host:Host_ip :')        data = json.dumps(                {                    "jsonrpc": "2.0",                    "method": "host.get",                    "params": {                        "output":["hostid","name","status","host"],                        "filter": {"host": [hostip]}                        },                    "auth": self.authID,                    "id": 1                })        res = self.get_data(data)['result']        if (res != 0) and (len(res) != 0):            #for host in res:            host = res[0]            if host['status'] == '1':                print "\t","\033[1;31;40m%s\033[0m" % "Host_IP:","\033[1;31;40m%s\033[0m" % host['host'].ljust(15),'\t',"\033[1;31;40m%s\033[0m" % "Host_Name:","\033[1;31;40m%s\033[0m" % host['name'].encode('GBK'),'\t',"\033[1;31;40m%s\033[0m" % u'未在监控状态'.encode('GBK')                return host['hostid']            elif host['status'] == '0':                print "\t","\033[1;32;40m%s\033[0m" % "Host_IP:","\033[1;32;40m%s\033[0m" % host['host'].ljust(15),'\t',"\033[1;32;40m%s\033[0m" % "Host_Name:","\033[1;32;40m%s\033[0m" % host['name'].encode('GBK'),'\t',"\033[1;32;40m%s\033[0m" % u'在监控状态'.encode('GBK')                return host['hostid']            print        else:            print '\t',"\033[1;31;40m%s\033[0m" % "Get Host Error or cannot find this host,please check !"            return 0    def host_del(self):        hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your Check Host:Host_ip :')        hostid = self.host_get(hostip)        if hostid == 0:            print '\t',"\033[1;31;40m%s\033[0m" % "This host cannot find in zabbix,please check it !"            sys.exit()        data = json.dumps(                {                    "jsonrpc": "2.0",                    "method": "host.delete",                    "params": [{"hostid": hostid}],                    "auth": self.authID,                    "id": 1                })        res = self.get_data(data)['result']        if 'hostids' in res.keys():            print "\t","\033[1;32;40m%s\033[0m" % "Delet Host:%s success !" % hostip        else:            print "\t","\033[1;31;40m%s\033[0m" % "Delet Host:%s failure !" % hostip    def hostgroup_get(self):        data = json.dumps(                {                    "jsonrpc": "2.0",                    "method": "hostgroup.get",                    "params": {                        "output": "extend",                        },                    "auth": self.authID,                    "id": 1,                    })        res = self.get_data(data)        if 'result' in res.keys():            res = res['result']            if (res !=0) or (len(res) != 0):                print "\033[1;32;40m%s\033[0m" % "Number Of Group: ", "\033[1;31;40m%d\033[0m" % len(res)                for host in res:                    print "\t","HostGroup_id:",host['groupid'],"\t","HostGroup_Name:",host['name'].encode('GBK')                print        else:            print "Get HostGroup Error,please check !"    def template_get(self):        data = json.dumps(                {                    "jsonrpc": "2.0",                    "method": "template.get",                    "params": {                        "output": "extend",                        },                    "auth": self.authID,                    "id": 1,                    })        res = self.get_data(data)#['result']        if 'result' in res.keys():            res = res['result']            if (res !=0) or (len(res) != 0):                print "\033[1;32;40m%s\033[0m" % "Number Of Template: ", "\033[1;31;40m%d\033[0m" % len(res)                for host in res:                    print "\t","Template_id:",host['templateid'],"\t","Template_Name:",host['name'].encode('GBK')                print        else:            print "Get Template Error,please check !"    def host_create(self):        hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Host_ip :')        groupid = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Group_id :')        templateid = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Tempate_id :')        g_list=[]        t_list=[]        for i in groupid.split(','):            var = {}            var['groupid'] = i            g_list.append(var)        for i in templateid.split(','):            var = {}            var['templateid'] = i            t_list.append(var)        if hostip and groupid and templateid:            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": g_list,                            "templates": t_list,                    },                        "auth": self.authID,                        "id": 1,                        })            res = self.get_data(data,hostip)            if 'result' in res.keys():                res = res['result']                if 'hostids' in res.keys():                    print "\033[1;32;40m%s\033[0m" % "Create host success"            else:                print "\033[1;31;40m%s\033[0m" % "Create host failure: %s" % res['error']['data']        else:            print "\033[1;31;40m%s\033[0m" % "Enter Error: ip or groupid or tempateid is NULL,please check it !"def main():    test = zabbixtools()    #test.template_get()    #test.hostgroup_get()    #test.host_get()    test.host_del()    #test.host_create()if __name__ == "__main__":    main()

   相关的材料的可以参考官方文档。这个只是一些功能模块,包含获取主机,主机组、模板、删除主机等功能,可以根据需要进行调整,实现zabbix的批量化和自动化管理。因为是在linux运行,所以设置了输出终端的字体颜色方便区分,如果不需要,自行删除即可。