[ python3 ] 基于zabbix 自动抓取每天监控数据
2016-11-08 11:55
489 查看
通过python登录到zabbix直接抓取每天的数据的图片趋势图,并制作成静态index.html给与展示并发送提示邮件。
操作系统:Centos6.7
python版本:python3.5
说明: 这里直接将html静态页的源码write到index.html这里还需要js包,静态页可以根据自己的需求进行开发,如需要我这里的请留言吧。
操作系统: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":"1148","period":86400,"stime":yesterday+'000000',"width":800,"height":200} values4={"graphid":"1145","period":86400,"stime":yesterday+'000000',"width":800,"height":200} values5 = {"graphid": "1079", "period": 86400, "stime": yesterday + '000000', "width": 800, "height": 200} values5_1 = {"graphid": "792", "period": 86400, "stime": yesterday + '000000', "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 自动生成xlsx监控文档
- 基于percona-monitoring-plugins实现Zabbix的MySQL多端口自动发现监控
- 抓取安居客二手房经纪人数据,python爬虫自动翻页
- Python抓取zabbix性能监控图
- Python基于多线程实现抓取数据存入数据库的方法
- 一个极其简洁的Python网页抓取程序,自动从雅虎财经抓取股票数据
- 爬虫 监控 自动 匹配 抓取 卡饭 论坛 帖子 发邮件 python
- python脚本获取zabbix监控数据,并且通过邮件发送
- python淘宝爬虫基于requests抓取淘宝商品数据
- Python结合Zabbix模板的自动发现功能监控RabbitMQ队列是 5b4 否正常运行并自动添加触发器
- python爬虫抓取zabbix监控图,并发邮件
- Zabbix监控之Redis自动发现并监控(python)
- python淘宝爬虫基于requests抓取淘宝商品数据
- web监控:zabbix自动发现+python之pycur模块对网站访问质量监控
- python requests 自动管理cookie, session保持连接,抓取数据后结束
- 用python进行分布式网页数据抓取(三)—— 编码实现
- 基于.net webservices和Flex LineChart组件的动态数据监控
- 通过crond自动运行Python脚本实现多台linux服务器的监控
- 用python进行分布式网页数据抓取(二)—— 核心问题讨论
- 用python进行分布式网页数据抓取(一)——设计