阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

提取Zabbix监控平台单台服务器图形并发邮件Python实现

197次阅读
没有评论

共计 4324 个字符,预计需要花费 11 分钟才能阅读完成。

需求:希望每天邮件发出当天某台服务器的监控状态,如果某天都登陆 zabbix 截图很麻烦,而且并不能保证每天都准点操作,于是写了一段脚本实现自动抓取图片,并组装成 html,通过定时邮件发送,实现日报自动化。

一、效果图:

提取 Zabbix 监控平台单台服务器图形并发邮件 Python 实现

二、代码:
#!/usr/bin/env Python
# -*- coding: utf-8 -*-
import MySQLdb
import datetime
import cookielib, urllib2,urllib
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
# 数据库相关信息
dbhost = “ 服务器 IP”
dbport = 3306
dbuser = “zabbix 登录用户 ”
dbpasswd = “zabbix 数据库密码 ”
dbname = “zabbix”
# 发送邮件配置:
receiver = ‘ 收件人邮箱地址 ’
Subject = ‘zabbix 监控平台数据 ’
smtpserver = ‘smtp.exmail.qq.com’
mail_username = ‘ 发送邮箱地址 ’
mail_password = ‘ 密码 ’
# 查找 zabbix 的 Hostname
HostName = “Zabbix server”
# 查找图像名称
GraphsName = “CPU utilization”
# 此 url 是获取图片是的,请注意饼图的 URL 和此 URL 不一样,请仔细观察!
gr_url=”http://zabbix.XXXX.com/chart2.php”
# 登陆 URL
indexURL=”http://zabbix.XXXX.com/index.php”
username=”sunday”
password=”Aa(2016)”
# 用于图片存放的目录
image_dir=”/tmp/zabbix”

class ReportForm:
    def __init__(self):
        #打开数据库连接
        self.conn = MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpasswd,db=dbname,port=dbport,charset=’utf8′)
        self.cursor = self.conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

    def getGraphID(self,HostName,GraphsName):
        #获取 graphid
        sql = ‘select distinct graphs_items.graphid from items join graphs_items on graphs_items.itemid=items.itemid join graphs on graphs_items.graphid=graphs.graphid  where items.hostid=(select hostid from hosts where host=”%s”) and graphs.name=”%s”‘ % (HostName,GraphsName)
        if self.cursor.execute(sql):
            graphid = self.cursor.fetchone()[‘graphid’]
        else:
            graphid = None
        return graphid

    def __del__(self):
        #关闭数据库连接
        self.cursor.close()
        self.conn.close()

class ZabbixGraph(object):
    def __init__(self,url,name,password):
        self.url=url
        self.name=name
        self.password=password
        #初始化的时候生成 cookies
        cookiejar = cookielib.CookieJar()
        urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
        values = {“name”:self.name,’password’:self.password,’autologin’:1,”enter”:’Sign in’}
        data = urllib.urlencode(values)
        request = urllib2.Request(url, data)
        try:
            urlOpener.open(request,timeout=10)
            self.urlOpener=urlOpener
        except urllib2.HTTPError, e:
            print e
    def GetGraph(self,url,values,image_dir):
        data=urllib.urlencode(values)
        request = urllib2.Request(url,data)
        url = self.urlOpener.open(request)
        image = url.read()
        imagename=”%s/%s_%s.png” % (image_dir, values[“graphid”], values[“stime”])
        f=open(imagename,’wb’)
        f.write(image)

    def SendMail(self,receiver,Subject,smtpserver,mail_username,mail_password,values,image_dir,HostName,GraphsName):
        msgRoot = MIMEMultipart(‘related’)
        msgRoot[‘Subject’] = Subject
        msgRoot[‘From’] = mail_username
 sendText='<b> 服务器:<i>”%s”</i></b>  提取的图像名称为 <b>”%s”</b><br><img src=”cid:image1″><br> 多谢!’ % (HostName,GraphsName)
        msgText = MIMEText(sendText,’html’,’utf-8′)
        msgRoot.attach(msgText)
        sendpng=”%s/%s_%s.png” % (image_dir, values[“graphid”], values[“stime”])
        fp = open(sendpng, ‘rb’)
        msgImage = MIMEImage(fp.read())
        fp.close()
        msgImage.add_header(‘Content-ID’, ‘<image1>’)
        msgRoot.attach(msgImage)
        smtp = smtplib.SMTP()
        smtp.connect(smtpserver)
        smtp.login(mail_username, mail_password)
        smtp.sendmail(mail_username, receiver, msgRoot.as_string())
        smtp.quit()

if __name__ == “__main__”:
    Report = ReportForm()
    get_graphid=Report.getGraphID(HostName,GraphsName)
    #图片的参数,该字典至少传入 graphid。
    stime=datetime.datetime.now().strftime(‘%Y%m%d%H%M%S’)
    values={“graphid”:get_graphid,”stime”:stime,”period”:86400,”width”:800,”height”:200}
    ZabbixG=ZabbixGraph(indexURL,username,password)
    ZabbixG.GetGraph(gr_url,values,image_dir)
    ZabbixG.SendMail(receiver,Subject,smtpserver,mail_username,mail_password,values,image_dir,HostName,GraphsName)

通过以上获取的图片,在组装 html,然后使用系统计划任务可实现自动化日报发送。

一些 Zabbix 相关教程集合

Ubuntu 14.04 下 Zabbix2.4.5 源码编译安装  http://www.linuxidc.com/Linux/2015-05/117657.htm

安装部署分布式监控系统 Zabbix 2.06 http://www.linuxidc.com/Linux/2013-07/86942.htm

《安装部署分布式监控系统 Zabbix 2.06》http://www.linuxidc.com/Linux/2013-07/86942.htm

CentOS 6.3 下 Zabbix 安装部署 http://www.linuxidc.com/Linux/2013-05/83786.htm

Zabbix 分布式监控系统实践 http://www.linuxidc.com/Linux/2013-06/85758.htm

CentOS 6.3 下 Zabbix 监控 apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm

CentOS 6.3 下 Zabbix 监控 MySQL 数据库参数 http://www.linuxidc.com/Linux/2013-05/84800.htm

64 位 CentOS 6.2 下安装 Zabbix 2.0.6   http://www.linuxidc.com/Linux/2014-11/109541.htm

ZABBIX 的详细介绍:请点这里
ZABBIX 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-01/127979.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4324字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中