• Zabbix API学习_工具篇


    接上面得到认证之后,可以直接进行操作了。想要做什么事,就看你个人想做什么了。

    #-*- coding:utf-8 -*-
    '''
    Created on 2016-6-8
    
    @author: 
    '''
    import sys
    import json
    import urllib2
    from urllib2 import URLError
    from zabbix_auth import Zabbix_Auth
    
    class Zabbix_Utils:
    
        def __init__(self):
            self.url = 'http://zabbix.light.fang.com/api_jsonrpc.php'
            self.header = {"Content-Type":"application/json"}
            
        # 获取数据,统一提出来做成一个方法使用
        def get_data(self, data):
            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 'Reason: ', e.reason 
                elif hasattr(e, 'code'): 
                    print 'Error code: ', e.code 
            else: 
                response = json.loads(result.read()) 
                result.close()
                return response
                    
    
        def host_get(self,hostip=''): 
            data=json.dumps({
                    "jsonrpc": "2.0",
                    "method": "host.get",
                    "params": {
                              "output": "extend",
                              "filter":{"ip":hostip} 
                              },
                    "auth": Zabbix_Auth().user_login(),
                    "id": 1
                    })
            response = self.get_data(data)
            hostlist = []
            for host in response['result']:      
                hostlist.append(host['name'])
            #print len(hostlist)
            return hostlist
    
        def hostgroup_get(self, hostgroupName=''): 
            data = json.dumps({ 
                       "jsonrpc":"2.0", 
                       "method":"hostgroup.get", 
                       "params":{ 
                                 "output": "extend", 
                                 "filter": { 
                                            "name": hostgroupName 
                                            } 
                                 }, 
                       "auth":Zabbix_Auth().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() 
    
    
        def template_get(self,templateName=''): 
            data = json.dumps({ 
                               "jsonrpc":"2.0", 
                               "method": "template.get", 
                               "params": { 
                                          "output": "extend", 
                                          "filter": { 
                                                     "name": templateName                                                        
                                                     } 
                                          }, 
                               "auth": Zabbix_Auth().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() 
    
        def hostgroup_create(self,hostgroupName):
    
            if self.hostgroup_get(hostgroupName):
                print "hostgroup  33[42m%s33[0m is exist !"%hostgroupName
                sys.exit(1)
            data = json.dumps({
                              "jsonrpc": "2.0",
                              "method": "hostgroup.create",
                              "params": {
                              "name": hostgroupName
                              },
                              "auth": Zabbix_Auth().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 "33[042m 添加主机组:%s33[0m  hostgroupID : %s"%(hostgroupName,response['result']['groupids'])
    
    
                     
        def host_create(self, hostname, hostip, name, proxyid, hostgroupName, templateName):
            if self.host_get(hostip):
                print "33[041m该主机已经添加!33[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": name,
                            "name": hostname, 
                            "interfaces": [ 
                             { 
                                 "type": 1, 
                                 "main": 1, 
                                 "useip": 1, 
                                 "ip": hostip, 
                                 "dns": "", 
                                 "port": "10050" 
                              } 
                            ], 
                            "groups": group_list,
                            "templates": template_list,
                            "proxy_hostid": proxyid,
                         }, 
                       "auth": Zabbix_Auth().user_login(), 
                       "id":1                   
            }) 
            response = self.get_data(data)
            print "添加主机 : 33[32m%s33[0m 	id :33[31m%s33[0m 	proxy :33[31m%s33[0m" % (hostip, response, proxyid) 
    
        def host_disable(self,hostip):
            data=json.dumps({
                            "jsonrpc": "2.0",
                            "method": "host.update",
                            "params": {
                            "hostid": self.host_get(hostip),
                            "status": 1
                            },
                            "auth": Zabbix_Auth().user_login(),
                            "id": 1
            })
            response = self.get_data(data)
            print self.host_get(hostip)
                     
    
        def host_delete(self,hostid):
            hostid_list=[]
            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": Zabbix_Auth().user_login(),
                            "id": 1
                    })
    
            response = self.get_data(data)
    
        def get_host(self, hostip=""):
            data = json.dumps({
                "jsonrpc":"2.0",
                "method":"host.get",
                "params":{
                    "output":"extend",
                    "filter":{
                        "host":hostip
                        }
                    },
                "auth": Zabbix_Auth().user_login(),
                "id":2
                });
            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() 
                hostsid = []
                for host in response['result']:
                    hostsid.append({host['host']:host['hostid']})
                return hostsid
    
        def get_hostgroup(self, hostgroupname=""):
            data = json.dumps({
                       "jsonrpc":"2.0",
                       "method":"hostgroup.get",
                       "params":{
                                 "output": "extend",
                                 "filter": {
                                            "name": hostgroupname
                                            }
                                 },
                       "auth":Zabbix_Auth().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()
                grouphosts = []
                for group in response['result']:
                    grouphosts.append({group['name']:group['groupid']})
                return grouphosts
            
        def get_host_graph(self, hostid):
            graph_json_body = {
                            "jsonrpc": "2.0",
                            "method": "graph.get",
                            "params": {
                                "output": "extend",
                                #"selectGraphs": ["name","graphid"],
                                "hostids": hostid,
                                #"filter": {"hostids": hostid},
                                "sortfield": "name"
                            },
                            "auth": Zabbix_Auth().user_login(),
                            "id": 1
                        }
            
    #         graph_json_body =   {
    #               "jsonrpc": "2.0",
    #               "method": "host.get",
    #               "params": { 
    #                       "selectGraphs": ["name","graphid"],
    #                       "filter": {"host": hostname}},
    #               "auth": Zabbix_Auth().user_login(),
    #               "id": 1
    #           }
            
            data = json.dumps(graph_json_body)
            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['result']
                #return response['result'][0]['graphs']
    
        #def get_host_item(self, hostname=""):
        #def get_host_item(self, hostid="", graphid=""):
        # 获取每个graph的item数
        def get_host_graph_item(self, graphid=""):
            data = json.dumps({
                "jsonrpc": "2.0",
                "method": "item.get",
                "params": {
                    "output": "extend",
                    #"selectGraphs": ["name"],
                    #"hostids": hostid,
                    "graphids": graphid,
                    #"host": hostname,
                    #"search": {
                    #    "key_": "system"
                    #},
                    "sortfield": "name"
                },
                "auth": Zabbix_Auth().user_login(),
                "id": 1
            })
            request = urllib2.Request(self.url,data)
            for key in self.header:
                request.add_header(key,self.header[key])
            # get host list
            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 host items: ", len(response['result'])
                item_array = []
                for item in response['result']:
                    #print item.get('itemid'),item.get('graphs'),item.get('name')
                    item_array.append(item)
                    #print '	', item
                    #item_host.append({item["name"]:item["itemid"]})
                    #print "Host ID:",host['hostid'],"HostName:",host['name']
                return item_array
        
        def get_host_from_groupid(self, groupid=""):
            data = json.dumps({
               "jsonrpc":"2.0",
               "method":"host.get",
               "params":{
                   "output":["hostid","name"],
                   "groupids":groupid,
               },
                "auth": Zabbix_Auth().user_login(),
               "id":1,
            })
            request = urllib2.Request(self.url,data)
            for key in self.header:
                request.add_header(key,self.header[key])
            # get host list
            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'])
                group_host = []
                for host in response['result']:
                    group_host.append({host["name"]:host["hostid"]})
                    #print "Host ID:",host['hostid'],"HostName:",host['name']
                return group_host
           
        # 得到某个item所对应的历史数据,limit可以修改成其他的,但是为1表示只取最新的一条数据
        def get_items_history(self, itemsid=""):
            data = json.dumps({
                "jsonrpc": "2.0",
                "method": "history.get",
                "params": {
                    "output": "extend",
                    "history": 0,
                    "itemids": itemsid,
                    "sortfield": "clock",
                    "sortorder": "DESC",
                    "limit": 1
                },
                "auth": Zabbix_Auth().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())
                result.close()
                print "Number Of items: ", len(response['result'])
                items_value = []
                for value in response['result']:
                    items_value.append({u'itemid':value["itemid"], u'value':value["value"]})
                return items_value
           
        
        def get_graph_value(self, graphid):
            data = json.dumps({
                    "jsonrpc": "2.0",
                    "method": "host.get",
                    "params": { 
                           "selectItems": ["itemid"],
                            "filter": {"graph": graphid}
                    },
                    "auth": Zabbix_Auth().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
                    return 0
            else:
                response = json.loads(result.read()) 
                result.close() 
                tmp = response['result'][0]['items']
                items = []
                for value in tmp:
                    print value
                return "test"
            
        def get_alert_value(self,actionids=''): 
            data=json.dumps({
                            "jsonrpc": "2.0",
                            "method": "alert.get",
                            "params": {
                                "output": "extend",
                                "actionids": "7"
                            },
                            "auth": Zabbix_Auth().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 'Reason: ', e.reason 
                elif hasattr(e, 'code'): 
                    print 'Error code: ', e.code 
            else: 
                response = json.loads(result.read()) 
                result.close()
                for index in response['result']:
                    print index
            
    zabbix_tool = Zabbix_Utils()
    
    ##获取所有zabbix中分组
    for group in zabbix_tool.get_hostgroup():
        for group_key in group:
            print group_key
            group_id = group[group_key]
            # 获取每个zabbix分组下的所有主机
            for host in zabbix_tool.get_host_from_groupid(group_id):
                #print "	", host
                for host_key in host:
                    print "	", host_key
                    host_id = host[host_key]
                    # 获取每个zabbix每个主机的所有graph
                    for graph in zabbix_tool.get_host_graph( host_id):
                        #for graph_key in graph:
                        print '		', graph['graphid'], graph['name']
                        #获取每个graph的item数
                        for item in zabbix_tool.get_host_graph_item(graph['graphid']):
                            print '			', item.get('itemid'), item.get('name'), item.get('prevvalue'), item.get('lastclock'), item.get('lastvalue'), item.get('units'), item.get('key_'), item.get('name'), item
                        
    
    
    

      

    上面这些基本可以满足取出数据,然后自己通过RRDTool画图的需求,可惜我RRDTool不会使。

  • 相关阅读:
    LINUX学习-Mysql集群-一主多从
    LINUX学习-Mysql集群-主主备份
    LINUX学习-Mysql集群-主从服务器备份
    LINUX学习-Nginx+JDK+Tomcat+Mysql搭建JAVA WEB
    LINUX学习-Nginx实现https
    LINUX学习-Nginx服务器的反向代理和负载均衡
    LINUX学习-PHP安装
    LINUX学习-Mysql安装
    Lens in Scala
    scala中的 Type Lambda
  • 原文地址:https://www.cnblogs.com/schangech/p/5667429.html
Copyright © 2020-2023  润新知