通过python登录到zabbix直接抓取每天的数据的图片趋势图,并制作成静态index.html给与展示并发送提示邮件。

操作系统:Centos6.7

python版本:python3.5

  1. #!/usr/local/python/bin/python3.5
  2. import sys, os, shutil
  3. import os.path
  4. import datetime
  5. import http.cookiejar
  6. import urllib.request
  7. import urllib.error
  8. import urllib.parse
  9. import smtplib
  10. from email.mime.text import MIMEText
  11. from email.header import Header
  12. from email.mime.multipart import MIMEMultipart
  13. from email.mime.image import MIMEImage
  14. class ZabbixGraph(object):
  15. def __init__(self, url, name, password):
  16. self.url = url
  17. self.name = name
  18. self.password = password
  19. cookiejar = http.cookiejar.CookieJar()
  20. urlOpener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar))
  21. values = {"name":self.name,'password':self.password,'autologin':1,"enter":'Sign in'}
  22. data = urllib.parse.urlencode(values).encode(encoding='UTF8')
  23. request = urllib.request.Request(url, data)
  24. try:
  25. urlOpener.open(request, timeout=10)
  26. self.urlOpener = urlOpener
  27. except urllib.error.HTTPError as e:
  28. print(e)
  29.  
  30. def getgraph(self, url, values, image_dir):
  31. key = values.keys()
  32. if 'graphid' not in key:
  33. # print('请确认是否输入graphid')
  34. sys.exit(1)
  35. if 'period' not in key:
  36. values['period'] = 86400
  37. if 'stime' not in key:
  38. values['stime'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
  39. if 'width' not in key:
  40. values["width"] = 800
  41. if 'height' not in key:
  42. values["height"] = 200
  43.  
  44. data = urllib.parse.urlencode(values).encode(encoding='UTF8')
  45. request = urllib.request.Request(url, data)
  46. url = self.urlOpener.open(request)
  47. image = url.read()
  48. imagename = "%s/%s.png" % (image_dir, values["graphid"])
  49. f = open(imagename, 'wb')
  50. f.write(image)
  51. def yesterday():
  52. now_time = datetime.datetime.now()
  53. yes_time = now_time + datetime.timedelta(days=-1)
  54. yes_time_nyr = yes_time.strftime('%Y%m%d')
  55. yes_time_nyr1 = yes_time.strftime('%Y-%m-%d')
  56. return yes_time_nyr, yes_time_nyr1
  57.  
  58. def email():
  59. sender = '发送者'
  60. receiver = ['接收者1', '接收者2', '接收者3']
  61. subject = '每日重点监控对象'
  62. smtpserver = 'smtp.126.com'
  63. username = '发送者邮箱'
  64. password = 'smtp密码'
  65. msgRoot = MIMEMultipart('related')
  66. text = yesterday1+' 重点监控数据报告已生成。\n请访问:http://xxx/'+yesterday+'/index.html'
  67. msg = MIMEText(text, 'plain', 'utf-8') # 中文需参数‘utf-8',单字节字符不需要
  68. msg['Subject'] = Header(subject, 'utf-8')
  69. msg['From'] = 'Robot<xxx>'
  70. msg['To'] = '接收者别名'
  71. smtp = smtplib.SMTP()
  72. smtp.connect('smtp.126.com')
  73. smtp.login(username, password)
  74. smtp.sendmail(sender, receiver, msg.as_string())
  75. smtp.quit()
  76.  
  77. def html():
  78. all_the_text = '''<html>
  79. <head>
  80. <meta charset="utf8">
  81. <script type="text/javascript" href="jquery-3.1.0.min.js"></script>
  82. <style type="text/css">
  83. body{
  84. text-align: center;
  85. }
  86. .middle{
  87. text-align: center;
  88. }
  89. .hide{
  90. display: none;
  91. }
  92. .show{
  93. display: block;
  94. }
  95. </style>
  96. <title>每日数据报告</title>
  97. </head>
  98. <body>
  99. <h1 class="middle">''' + yesterday1 + '''监控数据报告</h1>
  100. <br>
  101. <div>
  102. <select id="sel">
  103. <option value="op_01">xxx</option>
  104. <option value="op_02">xxx</option>
  105. <option value="op_03">xxx</option>
  106. <option value="op_04">xxx</option>
  107. </select>
  108. </div>
  109. <br>
  110. <div >
  111. <div class="con show" id="op_01"><img src="1148.png"></div>
  112. <div class="con hide" id="op_02"><img src="1145.png"></div>
  113. <div class="con hide" id="op_03"><img src="1079.png"></div>
  114. <div class="con hide" id="op_04"><img src="792.png"></div>
  115. </div>
  116.  
  117. <script type="text/javascript" src="jquery-3.1.0.min.js"></script>
  118. <script type="text/javascript">
  119. $('#sel').change(function(){
  120. var cid = $(this).val();
  121. $('#'+cid).show();
  122. $('#'+cid).siblings().hide();
  123. });
  124. </script>
  125. </body>
  126. </html>'''
  127.  
  128. with open(image_dir + '/index.html', 'w') as f:
  129. f.write(all_the_text)
  130.  
  131. src = '/usr/monitor/day/jquery-3.1.0.min.js'
  132. dst = '/usr/monitor/day/' + yesterday + '/jquery-3.1.0.min.js'
  133. shutil.copyfile(src, dst)
  134.  
  135. if __name__=='__main__':
  136. yesterday, yesterday1 = yesterday()
  137. gr_url="http://xxx/zabbix/chart2.php"
  138. indexURL="http://xxx/zabbix/index.php"
  139. username = 'xxx'
  140. password = 'xxx'
  141. os.mkdir('/usr/monitor/day/%s' % yesterday)
  142. image_dir='/usr/monitor/day/'+ yesterday
  143.  
  144. values1={"graphid":"","period":86400,"stime":yesterday+'',"width":800,"height":200}
  145.  
  146. values4={"graphid":"","period":86400,"stime":yesterday+'',"width":800,"height":200}
  147.  
  148. values5 = {"graphid": "", "period": 86400, "stime": yesterday + '', "width": 800, "height": 200}
  149.  
  150. values5_1 = {"graphid": "", "period": 86400, "stime": yesterday + '', "width": 800, "height": 200}
  151. b=ZabbixGraph(indexURL,username,password)
  152. for i in (values1, values4, values5, values5_1):
  153. b.getgraph(gr_url, i, image_dir)
  154.  
  155. html()
  156. 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. DFS(3)——poj1321棋盘问题

    一.题目回顾 题目链接:棋盘问题 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于 ...

  2. oracle带条件的Insert语句

    背景 在一条记录完结时,自动向表中加入一条新的记录,采用的是事务处理,修改现有记录,并新增一条记录,直接采用的insert语句会报错 //主键冲突 unique constraint (XXXXXX) ...

  3. poj1789 Truck History最小生成树

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20768   Accepted: 8045 De ...

  4. Oracle入门书籍推荐

    作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道] 链接:http://www.eygle.com/archives/2006/08/orac ...

  5. HDU 2175 汉诺塔IX

    http://acm.hdu.edu.cn/showproblem.php?pid=2175 Problem Description 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根 ...

  6. PHP判断类型的方法

    1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...

  7. MySQL 服务器安装及命令使用

    本文来自实验楼相关部分的文档和实验操作过程. 一.MySQL简介 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,提高了速度并提高了灵活性.My ...

  8. 将一张表的主键(ID)重置为从1开始自增排列

    如果你有一张表,你的主键是ID,然后由于测来测去的原因,你的ID不是从1开始连续的自增了. 终于有一天,使用这张表的某个系统要导入正式数据了,强迫症这时候就表现的明显了,浑身不自在, 这时候你就需要将 ...

  9. Clevo P950系列拆机

    Clevo P950系列(包括神舟精盾T96/T97/T96C/T96E/T97E,炫龙耀9000,铁头人T800同模具机型)拆机 拆机恢复时间:20181203 12:28-14:58   一.普通 ...

  10. Codeforces 937.B Vile Grasshoppers

    B. Vile Grasshoppers time limit per test 1 second memory limit per test 256 megabytes input standard ...