通过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. deeplearning.ai课程学习(4)

    第四周:深层神经网络(Deep Neural Networks) 1.深层神经网络(Deep L-layer neural network) 在打算使用深层神经网络之前,先去尝试逻辑回归,尝试一层然后 ...

  2. struts2中的action为什么要继承ActionSupport类,不继承也可以,有什么好处?

    简单来说,有很多相关的方法都加载进来,你直接调用就行了,而且在安全上和稳定性上做了很好的处理 实际上继承ActionSupport之后 就等同于实现了很多接口 Action,Validateable, ...

  3. DFS(6)——hdu1342Lotto

    一.题目回顾 题目链接:Lotto Sample Input 7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0 Sample Output 1 2 3 4 5 6 1 2 ...

  4. winform 控件大小随着窗体自适应

    3个方法: #region 控件缩放变量        double formWidth;//窗体原始宽度        double formHeight;//窗体原始高度        doubl ...

  5. 算法(5)Jump Game

    题目:非负数的数组,每个数组元素代表这你能最大跨越多少步,初始在0的位置,问,能不能正好调到数组的最后一位! https://leetcode.com/problems/jump-game/#/des ...

  6. 并发(二)CyclicBarrier

    CyclicBarrier 循环屏障,用于一组固定数目的线程互相等待.使用场景如下: 主任务有一组串行的执行节点,每个节点之间有一批任务,固定数量的线程执行这些任务,执行完成后,在节点完成集合后,再继 ...

  7. Struts1防止表单重复提交

    package org.zln.struts.action; import org.apache.struts.action.Action; import org.apache.struts.acti ...

  8. Struts1表单校验

    ActionForm中对表单元素进行校验 @Override public ActionErrors validate(ActionMapping mapping, HttpServletReques ...

  9. JS设置cookie,读取cookie,删除cookie

    总结了一下cookie的使用,不全面.都是基础的知识,后期还会再添加. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  10. Hadoop上配置Hbase数据库

    已有环境: 1. Ubuntu:14.04.2 2.jdk: 1.8.0_45 3.hadoop:2.6.0 4.hBase:1.0.0 详细过程: 1.下载最新的Hbase,这里我下载的是hbase ...