首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3 下调用zabbix api 获取多个机房的IP

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

作者头像
98k
发布2018-04-11 15:33:12
1.7K0
发布2018-04-11 15:33:12
举报
文章被收录于专栏:Django ScrapyDjango Scrapy
根据工作的需要,需要查看监控中的所有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')
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 根据工作的需要,需要查看监控中的所有ip,我们一共有三个机房,每个机房都部署了同样的zabbix监控
    • 根据三个园区的 监控api的url 实现功能:不输入参数 显示所有ip 输入参数 ali yq m6 返回对应area的ip
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档