首页 > 代码库 > 在服务器上使用python自动获取zabbix上图形并发送邮件
在服务器上使用python自动获取zabbix上图形并发送邮件
由于某些需求,需要每天发送邮件给相关人员,其中包含前一天的zabbix监控图形,每天登陆并手动发送的话很麻烦。
本着简单重复的工作交给机器做的原则,写了个python程序自动获取图形并发送。
大致的思路是:
模拟登陆zabbix ---> 找到需要的图像并下载到本地 --->使用python发送邮件
一、在服务器上模拟登陆zabbix,并且将需要的图像下载到本地
#!/usr/bin/env python# -*- coding:utf-8 -*-import HTMLParserimport urlparseimport urllibimport urllib2import cookielibimport stringimport os# 登录的主页面hosturl = ‘http://zabbix.example.com/screens.php?elementid=26&sid=fbc2974a32b8dc87‘ # 根据自己的实际地址填写# post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据)posturl = ‘http://zabbix.example.com/index.php‘ # 从数据包中分析出,处理post请求的url# 设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookiecj = cookielib.LWPCookieJar()cookie_support = urllib2.HTTPCookieProcessor(cj)opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)urllib2.install_opener(opener)# 打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)h = urllib2.urlopen(hosturl)# 构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。headers = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1‘, ‘Referer‘: ‘******‘}# 构造Post数据,他也是从抓大的包里分析得出的。postData =http://www.mamicode.com/ { ‘name‘: ‘username‘, # 用户名 ‘password‘: ‘passwd‘, # 密码 ‘autologin‘: 1, ‘enter‘: ‘Sign in‘}# 需要给Post数据编码postData =http://www.mamicode.com/ urllib.urlencode(postData)# 通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程request = urllib2.Request(posturl, postData, headers)response = urllib2.urlopen(request)text = response.read()def get_graph(host, graphid, period, image_name): path = ‘/opt/daily_mail/image/‘ # 保存图片的地址 #zabbix的图片的地址的构造 url = "http://%s/chart2.php?graphid=%s&period=%s&width=800&height=100" % (host, graphid, period) img_req = urllib2.Request(url) png = urllib2.urlopen(img_req).read() file = path + image_name + ‘.png‘ with open(file,‘wb‘) as f: f.write(png)host = ‘zabbix.example.com‘ // 你的zabbix服务域名get_graph(host, 1237, 86400, ‘cpu_load‘)get_graph(host, 1239, 86400, ‘net_traffic‘)get_graph(host, 918, 86400, ‘155_eth0‘)
二、将图像下载到本地之后,需要再使用python来自动发送邮件,网上有很多发送邮件的教程
#!/usr/bin/env python# -*- coding:utf-8 -*-import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImageimport dataimport timemailto_list=[‘xxx@example.com‘] # 收件人列表mailcc_list=[‘xxx@example.com‘] # 抄送列表mail_host="smtp.example.com:25" # 邮件服务器mail_user="username" # 用户名mail_pass="passwd" # 密码mail_postfix="example.com" # 邮件后缀html = """<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><p>服务器 CPU user time 的24h截图<br><img src="http://www.mamicode.com/cid:cpu_load" /></p><p>服务器 net outging 的24h截图<br><img src="http://www.mamicode.com/cid:net_traffic" /></p><p>服务器 eth0 24h出口带宽 的24h截图<br><img src="http://www.mamicode.com/cid:155_eth0" /></p>"""def send_mail(to_list, cc_list, sub): # 增加图片 def addimg(src, imgid): fp = open(src, ‘rb‘) msgImage = MIMEImage(fp.read()) fp.close() msgImage.add_header(‘Content-ID‘, imgid) return msgImage msg = MIMEMultipart(‘related‘) #HTML代码 msgtext = MIMEText(data.html, "html", "utf-8") msg.attach(msgtext) # 全文件路径,后者为ID 根据ID在HTML中插入的位置 msg.attach(addimg("/opt/daily_mail/image/cpu_load.png", "cpu_load")) msg.attach(addimg("/opt/daily_mail/image/net_traffic.png", "net_traffic")) msg.attach(addimg("/opt/daily_mail/image/155_eth0.png", "155_eth0")) me = mail_user + "@" + mail_postfix msg[‘Subject‘] = sub msg[‘From‘] = me msg[‘To‘] = ",".join(to_list) msg[‘Cc‘] = ",".join(cc_list) send_to = to_list + cc_list try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user, mail_pass) server.sendmail(me, send_to, msg.as_string()) server.close() return True except Exception, e: print str(e) return Falseif __name__ == ‘__main__‘: title = "zabbix监控数据" + time.strftime(‘%Y%m%d‘,time.localtime(time.time())) if send_mail(mailto_list, mailcc_list, title): print "发送成功" else: print "发送失败"
就是这么简单,发送的样品就不截图了
模拟登陆那块有参照网上博客,太久不记得地址了,如果作者发现请联系我,我加上引用地址。
在服务器上使用python自动获取zabbix上图形并发送邮件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。