[ 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 ...
随机推荐
- u盘中毒后文件夹没显示了
今日,我的U盘插了有毒的电脑,直接中毒了,先是显示有木马,后是自行产生一些文件,接着文件夹没了,后来自己终于解决了,分享一下,自己先用工具将有嫌疑的文件提炼出来,经自行检查后处理,接着打开文件夹选项, ...
- C#的internal访问修饰符
文章:C# 访问修饰符internal的访问范围误区释疑 internal访问修饰符限定的类,只能在本程序集中访问.
- PAT 1088 三人行
https://pintia.cn/problem-sets/994805260223102976/problems/1038429286185074688 子曰:“三人行,必有我师焉.择其善者而从之 ...
- 前端将markdown转换成html
实现过程: 1. npm引入:npm install marked --save 2.在需要的文件(.ts)里import Marked from "marked"; 如果.j ...
- [剑指Offer] 24.二叉树中和为某一值的路径
[思路] ·递归先序遍历树, 把结点加入路径. ·若该结点是叶子结点则比较当前路径和是否等于期待和. ·弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结点 注:路径定义为从树的根结点开始往 ...
- HDU 6203 ping ping ping(贪心+LCA+DFS序+BIT)
ping ping ping Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- C++——设计模式说明
一.设计模式6大原则 名称 解释0.单一职责原则(SRP) 就一个类而言,应该仅有一个引起它变化的原因.一."开放-封闭"原则(OCP) 在软件设计模式中,这种不能修改,但可以扩展 ...
- 理解[].forEach.call()
例子: let cols = document.querySelectorAll('ul li') [].forEach.call(cols, function (col, index) { // T ...
- 浅析JavaScript的垃圾回收机制
JavaScript语言是一门优秀的脚本语言.其中包含脚本语言的灵活性外还拥有许多高级语言的特性.例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation).通常我们使 ...
- MySQL里执行SHOW INDEX结果中Cardinality的含义
今天在写一个Perl脚本,想自动化查找出MySQL数据库中可能无效的索引,于是根据朝阳的书上提到的一些规则,我来设计了一些判断方法,其中发现某个我想要的值就是SHOW INDEX FROM table ...