利用Zabbix通过邮件发送Screen图形报表实现

最近,在练习python程序,心血来潮,想利用zabbix-API来实现Zabbix通过邮件发送Screen图形报表,以便预测故障的发生,直接上源码,本人菜鸟,程序有烂的地方,请各位高手原谅。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import time
import shutil
import MySQLdb
import smtplib
import requests
import datetime
import urllib
import urllib2
import cookielib
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart
# based on zabbix 2.4.4
zabbix_host = ‘127.0.0.1‘
username = ‘admin‘
password = ‘zabbix‘
width = 400
height = 156
period = 86400
dbhost = ‘localhost‘
dbuser = ‘zabbix‘
dbpasswd = ‘zabbix‘
dbname = ‘zabbix‘
dbport = ‘3306‘
GRAPH_PATH = ‘/tmp/zabbix_graph‘
EMAIL_DOMAIN = ‘139.com‘
EMAIL_USERNAME = ‘13434111885‘
EMAIL_PASSWORD = ‘[email protected]‘

recipients = ["/home/*.jpeg"]

graphid_list = []

def SQL_Exec(query):
    try:
        _Conn = MySQLdb.connect(host=‘localhost‘,user=‘zabbix‘,passwd=‘zabbix‘,port=3306,connect_timeout=20)
        _Conn.select_db(dbname)
        cur = _Conn.cursor()
        _Conn = cur.execute(query)
        if _Conn == 0:
            result = 0
        else:
            result = cur.fetchall()
        return result
        cur.close()
        _Conn.close()
    except MySQLdb.Error,e:
        print "mysql error:" ,e

def Save_Graph(zabbix_host,username,password,width,height,period):
    for c in SQL_Exec("select resourceid from screens_items where screenid=‘20‘"):
        for d in c:
            graphid_list.append(int(d))
    for graphid in graphid_list:
        print graphid
        login_opt = urllib.urlencode({
        "name": username,
        "password": password,
        "autologin": 1,
        "enter": "Sign in"})
        get_graph_opt = urllib.urlencode({
        "graphid": graphid,
        "screenid": ‘16‘,
        "width": width,
        "height": height,
        "period": period})
        cj = cookielib.CookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        login_url = r"http://%s/index.php"%zabbix_host
        save_graph_url = r"http://%s/chart2.php"%zabbix_host
        opener.open(login_url,login_opt).read()
        data = opener.open(save_graph_url,get_graph_opt).read()
        filename = "%s.jpeg"%str(graphid)
        f = open(filename,"wb")
        f.write(data)
        f.close()
def send_mail(screen_name, graphs, to_list):
  me = ‘Zabbix <%[email protected]%s>‘ % (EMAIL_USERNAME, EMAIL_DOMAIN)
  def _create_msg():
    msg = MIMEMultipart(‘related‘)
    msg[‘Subject‘] = ‘Zabbix Screen Report: %s‘ % screen_name
    msg[‘From‘] = me
    msg[‘To‘] = ‘;‘.join(to_list)
    msg.preamble = ‘This is a multi-part message in MIME format.‘
    contents = "<h1>Screen %s</h1><br>" % screen_name
    contents += "<table>"

    zbxText = MIMEText("""
<strong>内容</strong><br /><br />
<table border="0">
<tr>
<td>前3个图</td>
</tr>
<tr>
<td><img src="cid:image0"></td>
<td><img src="cid:image1"></td>
<td><img src="cid:image8"></td>
</tr>
<td>中间3个图</td>
</tr>
<tr>
<td><img src="cid:image2"></td>
<td><img src="cid:image3"></td>
<td><img src="cid:image7"></td>
</tr>
<td>最后3个图</td>
</tr>
<tr>
<td><img src="cid:image4"></td>
<td><img src="cid:image5"></td>
<td><img src="cid:image6"></td>
</tr>
</table>
    """,‘html‘,‘utf-8‘)
    msg.attach(zbxText)

    for n in range(len(graphid_list)):
        zbx_img = open(r‘%s.jpeg‘%graphid_list[n], ‘rb‘)
        msgImage = MIMEImage(zbx_img.read())
        zbx_img.close()
        msgImage.add_header(‘Content-ID‘, ‘<image%s>‘%n)
        msg.attach(msgImage)
    msg_text = MIMEText(contents, ‘html‘)
    msg_alternative = MIMEMultipart(‘alternative‘)
    msg_alternative.attach(msg_text)
    msg.attach(msg_alternative)
    return msg
  try:
    server = smtplib.SMTP()
    server.connect(‘smtp.%s‘ % EMAIL_DOMAIN)
    server.login(‘%[email protected]%s‘ % (EMAIL_USERNAME, EMAIL_DOMAIN), EMAIL_PASSWORD)
    server.sendmail(me, to_list, _create_msg().as_string())
    server.close()
    print ‘send mail Ok!‘
  except Exception, e:
    print e
if __name__ == ‘__main__‘:
    import sys,re,os,smtplib
    from email.MIMEText import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email import Utils,Encoders
    Save_Graph(zabbix_host,username,password,width,height,period)
    send_mail(Save_Graph, recipients, [‘[email protected]‘])

最后,获得如下图形

时间: 2024-10-10 23:41:39

利用Zabbix通过邮件发送Screen图形报表实现的相关文章

利用phpmailer类邮件发送

<?php require("class.phpmailer.php"); //下载的文件必须放在该文件所在目录 $mail = new PHPMailer(); //建立邮件发送类 $address = "接收方邮箱"; //接收方地址 $mail->IsSMTP(); //使用SMTP方式发送 $mail->Host = "发送者邮箱smtp"; //您的企业邮局域名 $mail->SMTPAuth = true; /

zabbix 使用邮件发送告警信息

配置系统mail命令,使其可以发送外网邮件 mail 命令配置 修改zabbix_server配置文件,使其可以执行告警脚本 [[email protected] etc]# vim /usr/local/zabbix/etc/zabbix_server.conf 474 ### Option: AlertScriptsPath 475 # Full path to location of custom alert scripts. 476 # Default depends on compil

zabbix设置邮件发送报警

找到QQ邮件服务器地址 打开QQ邮箱-设置-账户 开启POP3/SMTP服务 生成授权码,记住这个授权码 找到QQ的SMTP服务器地址 配置发件人Email信息 管理-报警媒介类型-Email 填写相关信息如下 配置收件人Email信息 选择用户-Admin 选择报警媒介-添加 启用报警 配置-动作-Report problems to Zabbix administrators 配置相关报警信息 启用报警 自定义报警信息 发送警告 默认标题: 故障{TRIGGER.STATUS},服务器:{H

使用phantomjs实现highcharts等报表通过邮件发送

使用phantomjs实现highcharts等报表通过邮件发送(本文仅提供完整解决方案和实现思路,完全照搬不去整理代码无法马上得到效果) 前不久项目组需要将测试相关的质量数据通过每日自动生成报表展示,并自动通过将报表作为邮件正文内容知会到干系人邮箱.那么问题来了,报表生成了,但是邮件怎么发送,因为highcharts等报表都是通过JS和HTML在前端浏览器进行渲染生成的,而最要命的是邮箱为了安全起见一般都不支持JS,所以就算后台计算出了报表所需的数据,但是也无法在邮件内容中生成报表. 后来想到

Python脚本通过邮件发送zabbix报警图片

Python脚本通过邮件发送zabbix报警图片流程如下: 通过zabbix传递给脚本的message参数,筛选出报警信息的itemid; 通过获取的itemid,在数据库中查找对应的grpahid; 拉取对应graphid的图片并保存; 将报警信息和图片组装成html; 发送邮件. Python脚本如下: #!/usr/bin/python #coding=utf-8 from email.mime.text import MIMEText from email.mime.multipart 

zabbix使用脚本发送外网邮件告警(msmtp + mutt)

1.安装msmtp和mutt 相关软件可自行网上搜索 1.1.msmtp安装 tar  -xf  msmtp-1.6.2.tar.xz              cd  msmtp-1.6.2              ./configure              make  &&  make  install 1.2.mutt安装 yum  -y  install  mutt 2.配置msmtp和mutt 2.1.配置msmtp vim /usr/local/etc/msmtprc 

利用PHPMailer 来完成PHP的邮件发送 #转载自:大菜鸟在云端#

利用PHPMailer 来完成PHP的邮件发送 1.首先是下载PHPMailer http://code.google.com/a/apache-extras.org/p/phpmailer/ 2.解压 从中取出class.phpmailer.php 和 class.smtp.php 放到你的项目的文件夹,因为我们等下会引用到它们. 3.创建发送邮件的函数,其中你需要配置smtp服务器 function postmail($to,$subject = '',$body = ''){ //$to

使用phantomjs实现highcharts等报表通过邮件发送(本文仅提供完整解决方案和实现思路,完全照搬不去整理代码无法马上得到效果)

前不久项目组需要将测试相关的质量数据通过每日自动生成报表展示,并自动通过将报表作为邮件正文内容知会到干系人邮箱.那么问题来了,报表生成了,但是邮件怎么发送,因为highcharts等报表都是通过JS和HTML在前端浏览器进行渲染生成的,而最要命的是邮箱为了安全起见一般都不支持JS,所以就算后台计算出了报表所需的数据,但是也无法在邮件内容中生成报表. 后来想到phantomjs这个神器,它是一个基于webkit的内核浏览器,可以不弹出浏览器界面在内存中模拟打开网页,进而加载需要的东东(当然包括hi

php编程语言中利用邮件发送接口调用流程

对于如何利用smtp类发送邮件的过程,对于很多技术初学者都是不太理解的,通常会在编程过程中遇到许多问题,有些甚至不太清楚接口的调用流程,那么对于这种情况话,下面就跟大家讲解一下关于php编程语言中如何利用邮件发送接口调用的流程.实现代码与注释如下:1.打开php.ini,找到extension=php_openssl.dll,将前面的分号去掉,重启服务器.若此配置已打开,跳过这一步.2.发送邮件代码$MailServer = "smtp.163.com"; //SMTP服务器(若不是1