[ python3 ] 基于zabbix 自动抓取每天监控数据
通过python登录到zabbix直接抓取每天的数据的图片趋势图,并制作成静态index.html给与展示并发送提示邮件。
操作系统:Centos6.7
python版本:python3.5
- #!/usr/local/python/bin/python3.5
- import sys, os, shutil
- import os.path
- import datetime
- import http.cookiejar
- import urllib.request
- import urllib.error
- import urllib.parse
- import smtplib
- from email.mime.text import MIMEText
- from email.header import Header
- from email.mime.multipart import MIMEMultipart
- from email.mime.image import MIMEImage
- class ZabbixGraph(object):
- def __init__(self, url, name, password):
- self.url = url
- self.name = name
- self.password = password
- cookiejar = http.cookiejar.CookieJar()
- urlOpener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar))
- values = {"name":self.name,'password':self.password,'autologin':1,"enter":'Sign in'}
- data = urllib.parse.urlencode(values).encode(encoding='UTF8')
- request = urllib.request.Request(url, data)
- try:
- urlOpener.open(request, timeout=10)
- self.urlOpener = urlOpener
- except urllib.error.HTTPError as e:
- print(e)
- def getgraph(self, url, values, image_dir):
- key = values.keys()
- if 'graphid' not in key:
- # print('请确认是否输入graphid')
- sys.exit(1)
- if 'period' not in key:
- values['period'] = 86400
- if 'stime' not in key:
- values['stime'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
- if 'width' not in key:
- values["width"] = 800
- if 'height' not in key:
- values["height"] = 200
- data = urllib.parse.urlencode(values).encode(encoding='UTF8')
- request = urllib.request.Request(url, data)
- url = self.urlOpener.open(request)
- image = url.read()
- imagename = "%s/%s.png" % (image_dir, values["graphid"])
- f = open(imagename, 'wb')
- f.write(image)
- def yesterday():
- now_time = datetime.datetime.now()
- yes_time = now_time + datetime.timedelta(days=-1)
- yes_time_nyr = yes_time.strftime('%Y%m%d')
- yes_time_nyr1 = yes_time.strftime('%Y-%m-%d')
- return yes_time_nyr, yes_time_nyr1
- def email():
- sender = '发送者'
- receiver = ['接收者1', '接收者2', '接收者3']
- subject = '每日重点监控对象'
- smtpserver = 'smtp.126.com'
- username = '发送者邮箱'
- password = 'smtp密码'
- msgRoot = MIMEMultipart('related')
- text = yesterday1+' 重点监控数据报告已生成。\n请访问:http://xxx/'+yesterday+'/index.html'
- msg = MIMEText(text, 'plain', 'utf-8') # 中文需参数‘utf-8',单字节字符不需要
- msg['Subject'] = Header(subject, 'utf-8')
- msg['From'] = 'Robot<xxx>'
- msg['To'] = '接收者别名'
- smtp = smtplib.SMTP()
- smtp.connect('smtp.126.com')
- smtp.login(username, password)
- smtp.sendmail(sender, receiver, msg.as_string())
- smtp.quit()
- def html():
- all_the_text = '''<html>
- <head>
- <meta charset="utf8">
- <script type="text/javascript" href="jquery-3.1.0.min.js"></script>
- <style type="text/css">
- body{
- text-align: center;
- }
- .middle{
- text-align: center;
- }
- .hide{
- display: none;
- }
- .show{
- display: block;
- }
- </style>
- <title>每日数据报告</title>
- </head>
- <body>
- <h1 class="middle">''' + yesterday1 + '''监控数据报告</h1>
- <br>
- <div>
- <select id="sel">
- <option value="op_01">xxx</option>
- <option value="op_02">xxx</option>
- <option value="op_03">xxx</option>
- <option value="op_04">xxx</option>
- </select>
- </div>
- <br>
- <div >
- <div class="con show" id="op_01"><img src="1148.png"></div>
- <div class="con hide" id="op_02"><img src="1145.png"></div>
- <div class="con hide" id="op_03"><img src="1079.png"></div>
- <div class="con hide" id="op_04"><img src="792.png"></div>
- </div>
- <script type="text/javascript" src="jquery-3.1.0.min.js"></script>
- <script type="text/javascript">
- $('#sel').change(function(){
- var cid = $(this).val();
- $('#'+cid).show();
- $('#'+cid).siblings().hide();
- });
- </script>
- </body>
- </html>'''
- with open(image_dir + '/index.html', 'w') as f:
- f.write(all_the_text)
- src = '/usr/monitor/day/jquery-3.1.0.min.js'
- dst = '/usr/monitor/day/' + yesterday + '/jquery-3.1.0.min.js'
- shutil.copyfile(src, dst)
- if __name__=='__main__':
- yesterday, yesterday1 = yesterday()
- gr_url="http://xxx/zabbix/chart2.php"
- indexURL="http://xxx/zabbix/index.php"
- username = 'xxx'
- password = 'xxx'
- os.mkdir('/usr/monitor/day/%s' % yesterday)
- image_dir='/usr/monitor/day/'+ yesterday
- values1={"graphid":"","period":86400,"stime":yesterday+'',"width":800,"height":200}
- values4={"graphid":"","period":86400,"stime":yesterday+'',"width":800,"height":200}
- values5 = {"graphid": "", "period": 86400, "stime": yesterday + '', "width": 800, "height": 200}
- values5_1 = {"graphid": "", "period": 86400, "stime": yesterday + '', "width": 800, "height": 200}
- b=ZabbixGraph(indexURL,username,password)
- for i in (values1, values4, values5, values5_1):
- b.getgraph(gr_url, i, image_dir)
- html()
- email()
说明: 这里直接将html静态页的源码write到index.html这里还需要js包,静态页可以根据自己的需求进行开发,如需要我这里的请留言吧。
[ python3 ] 基于zabbix 自动抓取每天监控数据的更多相关文章
- [ python3 ] 基于zabbix 自动生成xlsx监控文档
准备做一个每周自动的巡检报告,数据来源于zabbix,通过python读取zabbix数据库获取数据并制作成excel表格, 本来打算直接邮件发送到指定邮箱,但是都被SMTP过滤掉了,试过126和QQ ...
- java抓取东方财富股票数据(附源码)
背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...
- 巧用Grafana和Arthas自动抓取K8S中异常Java进程的线程堆栈
前言 近期发现业务高峰期时刻会出现CPU繁忙导致的timeout异常,通过监控来看是因为Node上面的一些Pod突发抢占了大量CPU导致的. 问: 没有限制CPU吗?是不是限制的CPU使用值就可以解决 ...
- APP自动化框架LazyAndroid使用手册(2)--元素自动抓取
作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...
- 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕
递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...
- 如何使用 Github Actions 自动抓取每日必应壁纸?
如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...
- SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享
SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...
- IIS崩溃时自动抓取Dump
背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error R ...
- 自动抓取java堆栈
参数1 进程名字,参数2 最大线程数 例: pid为8888,达到1000个线程时自动抓取堆栈信息 ./autojstack.sh 8888 1000 & #!/bin/bashfileNam ...
随机推荐
- DFS(3)——poj1321棋盘问题
一.题目回顾 题目链接:棋盘问题 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于 ...
- oracle带条件的Insert语句
背景 在一条记录完结时,自动向表中加入一条新的记录,采用的是事务处理,修改现有记录,并新增一条记录,直接采用的insert语句会报错 //主键冲突 unique constraint (XXXXXX) ...
- poj1789 Truck History最小生成树
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20768 Accepted: 8045 De ...
- Oracle入门书籍推荐
作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道] 链接:http://www.eygle.com/archives/2006/08/orac ...
- HDU 2175 汉诺塔IX
http://acm.hdu.edu.cn/showproblem.php?pid=2175 Problem Description 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根 ...
- PHP判断类型的方法
1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...
- MySQL 服务器安装及命令使用
本文来自实验楼相关部分的文档和实验操作过程. 一.MySQL简介 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,提高了速度并提高了灵活性.My ...
- 将一张表的主键(ID)重置为从1开始自增排列
如果你有一张表,你的主键是ID,然后由于测来测去的原因,你的ID不是从1开始连续的自增了. 终于有一天,使用这张表的某个系统要导入正式数据了,强迫症这时候就表现的明显了,浑身不自在, 这时候你就需要将 ...
- Clevo P950系列拆机
Clevo P950系列(包括神舟精盾T96/T97/T96C/T96E/T97E,炫龙耀9000,铁头人T800同模具机型)拆机 拆机恢复时间:20181203 12:28-14:58 一.普通 ...
- Codeforces 937.B Vile Grasshoppers
B. Vile Grasshoppers time limit per test 1 second memory limit per test 256 megabytes input standard ...