[ 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 ...
随机推荐
- java设计模式之适配器模式以及在java中作用
适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等. 以InputStreamReader和Out ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
- Week2 Teamework from Z.XML - 必应缤纷桌面助手 - 软件分析与用户需求调查
软件分析与用户需求调查(2013) from Z.XML 本次团队作业要求: 通过定性, 定量地分析, 总结和评定某软件是否满足了目标用户的需求,并把分析的过程和结果用博客表达出来. 选题:必应缤纷桌 ...
- 团队项目-第十次scrum 会议
时间:11.6 时长:20分钟 地点:主235教室走廊 工作情况 团队成员 已完成任务 待完成任务 解小锐 完成多种招聘方式的逻辑编写 陈鑫 实现游戏的存档功能 李金奇 添加多种招聘方式等功能 王辰昱 ...
- ExtJS6.0扩展日期选择控件为也可以选择时间
PS:ExtJS自带的日期选择控件只能够选择日期,但是现在的需求需要精确到秒,所以在网上搜索了一些例子(大部分是4.0的)作为参考,然后改出了6.0可用的一个日期时间选择控件. 1.找到extjs6. ...
- maven仓库地址
使用Maven进行开发的时候,比较常见的一个问题就是如何寻找我要的依赖,比如说,我想要使用activeMQ,可是我不知道groupId,artifactId,和合适的version.怎么办呢?本文介绍 ...
- 【SQLAlchemy】SQLAlchemy技术文档(中文版)(中)
10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了.假设我们系统的用户可以存储任意数量的email地址.我们需要定义一个新表Address与User相关联. from ...
- 关于网站转码(SiteApp转码)
1.Siteapp页面转码的意义?在百度移动搜索引擎中为更好满足用户信息需求,会同时为用户提供pc网页和mobile网页,但目前大多数PC页在移动终端中直接浏览的体验较差(交互.兼容和流量等).因此为 ...
- BZOJ4551 Tjoi2016&Heoi2016树(离线+并查集)
似乎是弱化的qtree3.树剖什么的非常无脑.考虑离线.并查集维护每个点的最近打标记祖先,倒序处理,删除标记时将其与父亲合并即可. #include<iostream> #include& ...
- AtCoder Grand Contest 028 B - Removing Blocks 解题报告
B - Removing Blocks Time limit : 2sec / Memory limit : 1024MB Score : 600 points ## Problem Statemen ...