python3 下 Zabbix监控调用graph.get并且下载监控图
时间:2022-05-08
本文章向大家介绍python3 下 Zabbix监控调用graph.get并且下载监控图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这个代码是如何访问三个不同机房并将传入的zabbix中的监控机器的ip进行判断(因为后来需要登陆网站,不同的机房名称不一样) 可以输入两个参数 只输入IP 返回监控列表
需要准备的包: prettytable
安装:pip3 install prettytable
只输入IP
输入 IP 序号 下载图片
IP 序号
IP 序号
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 参数都不用管,只看graphid即可,去api接口处获得对应ip的
import urllib.request
import http.cookiejar
import urllib.parse
import urllib.request
import json
import requests
from prettytable import PrettyTable
import time
import sys
t = str(time.time()).replace('.', '') #去掉.的时间戳 用于给图片命名
dict_graphid_name = {}
class ZabbixGraph:
def __init__(self,ip,number= -1):#,number):#),graph):
self.number = int(number)
self.IP = ip #
#self.number = number
# self.graph = graph #
self.header = {"Content-Type": "application/json-rpc"}
def get_token(self): # 获得token 并返回
data = {"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": 'xxx',
"password": 'xxxx',
},
"id": 1,
"auth": None
}
url_m6 = 'http://xxx/zabbix/api_jsonrpc.php'
token = requests.post(url=url_m6, headers=self.header, data=json.dumps(data))
json_dict_token = json.loads(token.text)
return json_dict_token['result']
def get_hostid(self):
data = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output":"extend",# ["hostid","name"],
"filter": {
"host": self.IP
}
},
"auth": self.get_token(),
"id": 1
}
url_m6 = 'http://xxx/zabbix/api_jsonrpc.php'
hosts = requests.post(url=url_m6, headers=self.header, data=json.dumps(data))
json_dict_hostid = json.loads(hosts.text)
json_dict_hostid_result = json_dict_hostid['result'][0]['hostid']
# print(json_dict_hostid_result)
return json_dict_hostid_result
def get_graphid_name(self):
data ={
"jsonrpc": "2.0",
"method": "graph.get",
"params": {
"output": "extend",
"hostids": self.get_hostid(),
"sortfield": "name"
},
"auth": self.get_token(),
"id": 1
}
url_m6 = 'http://xxx/zabbix/api_jsonrpc.php'
hosts = requests.post(url=url_m6, headers=self.header, data=json.dumps(data))
json_dict_host = json.loads(hosts.text)
json_dict_host_result = json_dict_host["result"]
return json_dict_host_result
def choose_object(self):
counter = 0
json_dict_host_result = self.get_graphid_name()
# print(type(json_dict_host_result))
tables = PrettyTable(['序号','监控项'])
#tables = PrettyTable(['序号','监控项',' 序号',' 监控项','序号 ','监控项 ',])
tables.align['序号','监控项','序号','监控项','序号','监控项',] = 'l'
tables.horizontal_char = '-'
tables.junction_char = "-"
tables.left_padding_width = 3
for i in json_dict_host_result:
dict_graphid_name[counter]=i['graphid'],i['name']
counter += 1
self.dict_graphid_name1 = dict_graphid_name
for i in dict_graphid_name:
# print(i,dict_graphid_name[i][1])# 315338
tables.add_row([i,dict_graphid_name[i][1]])
#
#print(dict_graphid_name[1])
# long = len(dict_graphid_name)//3+1
# print(long)
# for i in range(0,len(dict_graphid_name)//3+1):
# t = i * 3
# # if dict_graphid_name[i+t][1] == None :
# # dict_graphid_name[i+t][1] == ' '
# # if dict_graphid_name[i+1+t][1] == None :
# # dict_graphid_name[i+t][1] == ' '
# # if dict_graphid_name[i+2+t][1] == None :
# # dict_graphid_name[i+2+t][1] == ' '
#
# tables.add_row([i+t,dict_graphid_name[i+t][1],i+1+t,dict_graphid_name[i+1+t][1],i+2+t,dict_graphid_name[i+2+t][1]]) # 格式化输出的元素
# object = dict_graphid_name[self.number][0] # 将数字和graphid对应
#
if self.number == -1:
print("请输入IP+项序号:")
print(tables)
# return object
else:
return dict_graphid_name
def url_jpg(self):
if self.number == -1:
url_2hours = -1
else:
# print(dict_graphid_name[1])
self.graph_id = self.choose_object()[self.number][0]
url_2hours = 'http://xxx/zabbix/chart2.php?graphid=%s&period=7200' % self.graph_id
# print(url_2hours)
return url_2hours
def get_jpg(self):
# hosturl = 'http://xxx/zabbix/index.php' # 自己填写
# post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据)
posturl = 'xxx/zabbix/index.php?request=charts.php%3Fddreset%3D1' # 从数据包中分析出,处理post请求的url
#Referer: http://xxx/zabbix/index.php?request=charts.php%3Fddreset%3D1
# 设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
cj = http.cookiejar.LWPCookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
# 打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)
#h = urllib.request.urlopen(hosturl)
# 构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
'Referer': 'http://xxx/zabbix/index.php'}
# 构造Post数据,他也是从抓大的包里分析得出的。
postData = { 'name': 'xxx',
'password': 'xxx',
'autologin':1,
'enter':'Sign in'
}
# 需要给Post数据编码
postData = urllib.parse.urlencode(postData).encode('utf-8')
# 通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程
request = urllib.request.Request(posturl, postData, headers)
response = urllib.request.urlopen(request)
#text = response.read().decode()
#下载图片
jpg_link = self.url_jpg() #图片链接
if jpg_link == -1:
pass
else:
path = '/Users/lee/PycharmProjects/pythonProjects/zabbix/ZabbixGraph/888.jpg' #%s_%s.jpg' % (self.graph_id,t)
#request.urlretrieve(jpg_link, path)
urllib.request.urlretrieve(jpg_link, path)
if __name__ == "__main__":
if len(sys.argv) == 2:
item = ZabbixGraph(sys.argv[1])
item.get_graphid_name()
item.choose_object()
elif len(sys.argv) != 2:
item = ZabbixGraph(sys.argv[1],sys.argv[2])
item.get_graphid_name()
item.choose_object()
# item.url_jpg()
item.get_jpg()
#
- nginx的web缓存服务环境部署记录
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
- [转自blueidea]像table一样布局div Ⅰ
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- 升级个人网站框架组件IBatisNet+Castle
- 如何在多线程中调用winform窗体控件
- gerrit代码简单备份方案分享
- svn代码发版的脚本分享
- 正则表达式提取指定内容
- mysql数据库误删除后的数据恢复操作说明
- 在.NET平台上运行Java程序-IKVM.NET入门
- ArraySegment<T>泛型结构示例
- SwitchButton 开关按钮 的多种实现方式
- SVN和Git对比梳理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytorch 计算ConvTranspose1d输出特征大小方式
- Keras中 ImageDataGenerator函数的参数用法
- CI框架网页缓存简单用法分析
- 掌握PHP垃圾回收机制详解
- PHP基于面向对象封装的分页类示例
- PHP获取对象属性的三种方法实例分析
- PHP7内核之Reference详解
- PHP基于PDO扩展操作mysql数据库示例
- php实现的PDO异常处理操作分析
- PHP yield关键字功能与用法分析
- php PDO属性设置与操作方法分析
- PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
- CI框架实现创建自定义类库的方法
- php如何计算两坐标点之间的距离
- Python调用C语言程序方法解析