通过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 自动抓取每天监控数据的更多相关文章

  1. [ python3 ] 基于zabbix 自动生成xlsx监控文档

    准备做一个每周自动的巡检报告,数据来源于zabbix,通过python读取zabbix数据库获取数据并制作成excel表格, 本来打算直接邮件发送到指定邮箱,但是都被SMTP过滤掉了,试过126和QQ ...

  2. java抓取东方财富股票数据(附源码)

    背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...

  3. 巧用Grafana和Arthas自动抓取K8S中异常Java进程的线程堆栈

    前言 近期发现业务高峰期时刻会出现CPU繁忙导致的timeout异常,通过监控来看是因为Node上面的一些Pod突发抢占了大量CPU导致的. 问: 没有限制CPU吗?是不是限制的CPU使用值就可以解决 ...

  4. APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

    作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...

  5. 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕

    递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...

  6. 如何使用 Github Actions 自动抓取每日必应壁纸?

    如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...

  7. SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享

    SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...

  8. IIS崩溃时自动抓取Dump

    背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error R ...

  9. 自动抓取java堆栈

    参数1 进程名字,参数2 最大线程数 例: pid为8888,达到1000个线程时自动抓取堆栈信息 ./autojstack.sh 8888 1000 & #!/bin/bashfileNam ...

随机推荐

  1. Linux杂技

    挂载光盘 mkdir /mnt/cdrom #建立挂载点 mount /dev/cdrom /mnt/cdrom/ #挂载光盘 更换YUM源: cd /etc/yum.repos.d/ 使网络yum源 ...

  2. elementUI默认样式修改不成功的问题

    问题: login.vue中引入<style lang="postcss" src="./login.css" scoped></style& ...

  3. Pandoc中的Markdown语法

    概述 Pandoc中支持扩展修订版本的Markdown语法 使用pandoc中支持的Markdown语法用 -f markdown 使用标准Markdown语法用 -f markdown_strict ...

  4. mysql类型与java类型对应异常场景

    MySQL的bigint unsigned类型,对应java的BigInteger类型,在基于mybatis框架时,如果我将bigint unsigned类型的字段的返回放在一个map的返回类型中时. ...

  5. [洛谷P1420]最长连号

    题目大意:输入$n$个正整数,($1\leq n\leq 10000$),要求输出最长的连号的长度.(连号指从小到大连续自然数) 题解:考虑从小到大连续自然数差分为$1$,所以可以把原数列差分(后缀自 ...

  6. BZOJ3211 花神游历各国 【树状数组 + 并查集】

    题目 输入格式 输出格式 每次x=1时,每行一个整数,表示这次旅行的开心度 输入样例 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 输出样例 101 11 1 ...

  7. springMvc--请求的跳转和传值

    springMvc--请求的跳转和传值 目录 forword跳转页面的三种方式 1.使用serlvet 2.使用Model对象 3.使用ModelAndView redirect跳转到页面 使用ser ...

  8. 安卓下拉刷新空间SwipeRefreshLayout的基本使用

    1.先写布局文件 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refresh" androi ...

  9. 7月24号day16总结

    一开始显示出现问题,js路径不能应用,因为用的是springMVC框架书写,所以有路径的保护和静态引用地址时需要注意的地方 今天进行了最后项目的优化,包括map清洗数据部分的代码和echarts显示的 ...

  10. IDEA 用maven创建web项目编译时不能发布resources中的文件

    1.在pom.xml加入 <build> <resources> <resource> <directory>${basedir}/src/main/j ...