美文网首页
python3 下调用zabbix api 获取多个机房的IP

python3 下调用zabbix api 获取多个机房的IP

作者: 宁静消失何如 | 来源:发表于2017-09-13 09:31 被阅读42次

    根据工作的需要,需要查看监控中的所有ip,我们一共有三个机房,每个机房都部署了同样的zabbix监控

    根据三个园区的 监控api的url 实现功能:不输入参数 显示所有ip 输入参数 ali yq m6 返回对应area的ip
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 17/9/13 上午8:47
    # @Author  : lee
    # @File    : zabbix_ip_3area.py
    # @Software: PyCharm
    # 说明: code后有'#'是测试时加的或者需要修改的code
    # 用法:不输入参数 显示所有ip 输入参数 ali yq m6 返回对应area的ip
    
    import json
    import requests
    import sys
    import re
    
    regex_IP = re.compile(r"\d+\.\d+\.\d+\.\d+") # 匹配ip  
    class Zabbix_ip_3area(object):
    
        def __init__(self, area): # 只需一个参数
            self.area = area
            self.header = {"Content-Type": "application/json-rpc"}
            
        def get_Area_url(self):  # 这里根据用户传入的参数 返回不同的监控url
            if self.area == 'ali':
                url_head = 'zaali.ops.xxx.com.cn'
            elif self.area == 'm6':
                url_head = 'zam6.ops.xxx.com.cn'
            elif self.area == 'yq':
                url_head = '172.18.2.99'
            self.url_little = url_head
            url = 'http://%s/zabbix/api_jsonrpc.php'% url_head
            return url
    
        def get_token(self): # 获得token 并返回
            data = {"jsonrpc": "2.0",
                    "method": "user.login",
                    "params": {
                        "user": 'cccc',   #  用户名
                        "password": 'ccccccc',   #  密码
                    },
                    "id": 1,
                    "auth": None
                    }
    
            token = requests.post(url=self.get_Area_url(), headers=self.header, data=json.dumps(data))
            json_dict_token = json.loads(token.text)
            return json_dict_token['result']
    
        def get_3area_ips(self):  # 调用接口,获取 ip信息
            ip_list = []
            data = {
                    "jsonrpc": "2.0",
                    "method": "host.get",
                    "params": {
                        "output": ["host",],
    
                    },
                    "auth":  self.get_token(), #调用之前的get_token()函数返回的 token
                    "id": 1
                }
            hosts = requests.post(url=self.get_Area_url(), headers=self.header, data=json.dumps(data))
            get_3area_ips = json.loads(hosts.text)
            for ip in get_3area_ips['result']:
                ip_list.append(regex_IP.findall(ip['host']))   # 获取的值中偏偏有几个ip+汉字的字符,不知道谁挖的坑。。。
            print(ip_list)
    
    if __name__ == "__main__":
        try:
            if len(sys.argv) == 1:
                for area in ['ali','yq','m6']:
                    item = Zabbix_ip_3area(area)
                    item.get_3area_ips()
            else:
                item = Zabbix_ip_3area(sys.argv[1])  # 用IDE工具运行会报错 terminal调用使用,可以使用下边的方法传值  
                # item = Zabbix_ip_3area('m6')    # 
                item.get_3area_ips()
    
        except:
            print('输入参数可能有问题,脚本的参数是 空 或者 ali、yq、m6')
    

    相关文章

      网友评论

          本文标题:python3 下调用zabbix api 获取多个机房的IP

          本文链接:https://www.haomeiwen.com/subject/qykksxtx.html