根据工作的需要,需要查看监控中的所有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')