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

2018-04-11 15:33:12 浏览数 (1)

根据工作的需要,需要查看监控中的所有ip,我们一共有三个机房,每个机房都部署了同样的zabbix监控
根据三个园区的 监控api的url 实现功能:不输入参数 显示所有ip 输入参数 ali yq m6 返回对应area的ip
代码语言:javascript复制
#!/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')

0 人点赞