码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-17 14:25:55      阅读:1723      评论:0      收藏:0      [点我收藏+]

标签:程序   password   python   admin   import   

最近,在练习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 = ‘p@ssw0rd‘

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 <%s@%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(‘%s@%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, [‘13434111885@139.com‘])

最后,获得如下图形

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享


本文出自 “Microsoft” 博客,请务必保留此出处http://1238306.blog.51cto.com/1228306/1725589

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

标签:程序   password   python   admin   import   

原文地址:http://1238306.blog.51cto.com/1228306/1725589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!