zabbix实现Python邮件报警

zabbix是个非常强大的监控工具,可以监控linux和windows的服务器数据,也可以通过自定义key来扩展默认的监控项,但是自带的邮件报警提供的信息却不太友善。本文想通过自定脚本的方式,实现在报警邮件的同时发送对应的图像和url连接。

步骤如下:

  1. 创建一个脚本媒体报警:修改zabbix脚本报警配置路径:AlertScritpPath为存放脚本的路径
  2. ### Option: AlertScriptsPath
    # AlertScriptsPath=${datadir}/zabbix/alertscripts
    #AlertScriptsPath=/usr/lib/zabbix/alertscripts
    AlertScriptsPath=/etc/zabbix/alert
  3. 点击创建媒体类型,并关联默认动作报警

  4. 为用户启用报警脚本

  5. 修改第一步关联的报警动作,让其使用脚步发送报警,注意修改仅发送到的报警方式,还要修改报警的触发模版中带上Itemid这个参数(为脚本报警提供参数)

  6. 最后,准备工作都已完成,将python脚本上传到第1步的路径中即可,此脚本的思路是通过动作报警中的itmeid去获取监控项的item值,并通过history.php获取图形,并提供url连接

    将下面脚本中#注意修改下面的zabbix地址 修改到你实际的zabbix server地址哦!

    #注意修改日志路径 修改到你实际日志的路径

#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys,os,re,smtplib,mimetypes,pycurl,json,urllib,StringIO,time,traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
leng=len(sys.argv)
def log4py(logpath,logtxt):
   f=open(logpath,‘a‘)
   logtime=time.strftime(‘%Y%m%d%H%M%S‘,time.localtime())
   f.writelines(logtime+":")
   f.writelines(logtxt)
   f.writelines(‘\n‘)
   f.close()
def printmlinestr(mlinestr):
   d=mlinestr.splitlines()
   res=""
   for i in d:
      i="<br>"+i+"</br>"
      res+=i+‘\n‘
   return res
#getvalue 通过正则表达式获取对应itemID
def getvalue(string,rexp):
    r=re.compile(rexp,re.M)
    #r=re.compile("^ITEMID:[0-9]*",re.M)
    log4py(logpath,‘method getvalue‘)
    log4py(logpath,‘string‘)
    log4py(logpath,string)
    #for i in string:
    d=r.findall(string)
    log4py (logpath,‘rexp:‘)
    log4py (logpath,rexp)
    str1=d[0] 
    log4py(logpath, ‘rexresult:‘)
    log4py(logpath,str1)
    print str1
   # arrstr=str.split("\xa3\xba")
    arrstr=str1.split(":")
    result=arrstr[1]
    log4py(logpath,‘result:‘)
    log4py(logpath,result)
    log4py(logpath,‘end method getvalue‘)
    return result
#getpic 获取报警图片,写入文件
def getpic(itemid):
        log4py(logpath,‘method getpic‘)
   # try:   
        c = pycurl.Curl()
        pathroot=‘/etc/zabbix/alert/‘
        #path=‘c:/alert.png‘
        #head=‘Content-Type:application/json‘
        global stime
        endtime=time.strftime(‘%Y%m%d%H%M%S‘,time.localtime())
        tmptime=int(endtime)-10000
        stime = repr(tmptime)
        post_data_dic={"itemid":itemid,"period":"3600","stime":stime}
picpath=(pathroot)+(stime)+(itemid)+‘.png‘
print ‘picpath:‘+picpath
        str=file(picpath,‘wb‘)
        #注意修改下面的zabbix地址
        c.setopt(pycurl.URL, "http://10.1.1.67/zabbix/chart.php")
        c.setopt(pycurl.WRITEFUNCTION, str.write)
        c.setopt(pycurl.FOLLOWLOCATION, 1)
        #c.setopt(pycurl.HEADER, True)
        c.setopt(c.POSTFIELDS,urllib.urlencode(post_data_dic))
        c.perform()
        log4py(logpath,‘end method getpic‘)
return picpath
   # except Exception,e:
   #     f.writelines(‘expforgetpic:\n‘)
   #     f.writelines(e)
def SendMail(receivers,subject,data,picpath,itemid):
    msg = MIMEMultipart()
    msg[‘From‘] = "[email protected]"
    #msg[‘To‘] = "[email protected]"
    receives=receivers
    msg[‘To‘] = receivers
    msg[‘Subject‘] = subject
    body=printmlinestr(data)
    file1 = picpath
    image = MIMEImage(open(file1,‘rb‘).read())
    image.add_header(‘Content-ID‘,‘<image1>‘)
    msg.attach(image)
    #print txt
    #print ‘txt end‘
    #print type (txt)
    #注意修改下面的zabbix地址
    url=" 
    #msg.attach(txt)
    html =  """ 
    <html> 
      <body>
    """
    html+=body   
    html+="<br><img src=cid:image1></br>"
    html+="<p><a href="+url+">URLLINK</a></p>"
    
    html+="""     
        </body> 
    </html>
    """
    htm = MIMEText(html,‘html‘,‘gb2312‘)
    msg.attach(htm)
    server = smtplib.SMTP()
    server.connect(‘mail.huazhu.com‘)
    #server.login(‘htinns\qinlaw‘,‘~liuqing0530‘)
    #server.sendmail(msg[‘From‘],msg[‘To‘],msg.as_string())
    server.sendmail(msg[‘From‘],receives,msg.as_string())
    server.quit()
#if __name__ == "__main__":
   
#def main
#获取zbx的传入参数 ,参数1-收件人地址,参数2-邮件主题,参数3-报警内容
#注意修改日志路径
global logpath
logpath=‘/etc/zabbix/alert/ts.log‘
log4py(logpath,"--------------------------startx")
rece=sys.argv[1]
subject=sys.argv[2]
data=sys.argv[3]
#picpath=‘c:/alert.png‘
#picpath=‘/etc/zabbix/alert/alert.png‘
#\xa3\xba代表中文的冒号
#以后要加上异常处理,如果没有找到ID或者图片
#itemid=getvalue(data,"^ITEMID\xa3\xba[0-9]*")
#itemid=getvalue(data,"^ITEMID:[0-9]*)
#f.writelines(data)
try:
   itemid=getvalue(data,"ITEMID:[0-9]*")
   picpath= getpic(itemid)
   SendMail(rece,subject,data,picpath,itemid)
   os.remove(picpath)
except Exception,e:
   log4py(logpath,e)
   #os.system(‘echo $3|mail -s $2 $1 ‘)
   shellcmd=‘echo ‘+data+‘|mail -s ‘+subject+‘ ‘+rece
   print shellcmd 
   os.system(shellcmd)
log4py(logpath,"--------------------------end")

补上效果图:

时间: 2024-10-01 04:20:35

zabbix实现Python邮件报警的相关文章

Zabbix 配置Python邮件告警(3)

title: Zabbix 配置Python邮件告警(3) date: 2018-12-10 09:34:07 tags: Zabbix categories: Zabbix copyright: true --- Zabbix是一个非常强大的监控系统,是企业级的软件,来监控IT基础设施的可用性和性能.它是一个能够快速搭建起来的开源的监控系统,Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位解决存在的各种问题,Zabbix系统几乎可用于任何系统

[Zabbix] 如何实现邮件报警通知以及免费短信报警通知

 前提条件: (1) zabbix服务器端已经成功安装并且运行. (2) zabbix客户端已经成功建立并且运行. 1 下载并且安装msmtp软件 Wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download   tar jxvf msmtp-1.4.32.tar.bz2 cd msmtp-1.4.32 ./configure--prefix=/usr/local/msmtp

zabbix在配置邮件报警遇到的一些坑

了解了zabbix的强大,公司便决定将公司使用腾讯云的监控搬到了zabbix上.(这里的问题仅是配置邮件问题)br/>问题描述:由于在配置邮件报警的时候,超过触发器并没有报警,发送邮件失败.超时情况,如下图:![](http://i2.51cto.com/images/blog/201811/07/be0c7af10e12b3d040a733e708116a67.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,col

Zabbix 监控交换机 邮件报警

Zabbix监控交换机设置方法 Zabbix邮件报警设置方法

[Zabbix] 怎样实现邮件报警通知以及免费短信报警通知

 前提条件: (1) zabbixserver端已经安装成功而且执行. (2) zabbixclient已经成功建立而且执行. 1 下载而且安装msmtp软件 Wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download   tar jxvf msmtp-1.4.32.tar.bz2 cd msmtp-1.4.32 ./configure--prefix=/usr/local

zabbix实现QQ邮件报警通知(最详细)--技术流ken

前言 前几天搜了下网上使用zabbix邮件报警通知的文章,大多数还是使用mailx的方法,过程配置起来比较冗余繁琐,这几天想着把自己平时用到的qq邮件报警的方法分享出来供大家参考,以此减少不必要的步骤. zabbix监控端添加客户端 关于如何实现添加主机这里就不再赘述,相信大家对于这个已经很熟练了,大家也可以参考我的博客<分布式系统监视zabbix讲解一之zabbix安装--技术流ken> 第一步:添加监控主机 无需添加模版,我们来自定义监控项 第二步:添加监控点 点击你添加的监控项,创建一个

zabbix监控及邮件报警

一.zabbix 客户端的安装既然要监控我们就要添加要监控的主机,在添加主机之前我们首先要在被检测主机上面安装agent,安装 agent 比较简单,我们也是按照安装 server 的流程,下载软件包,在编译的时候,我们只选择 agent192.168.1.20 作为 zabbix 的被监控端,提供 web 和 mysql 应用1.安装 Zabbix,配置 Zabbix agent:21 rz (上传zabbix-3.2.1.tar.gz)22 ls23 tar zxf zabbix-3.2.1

Python通过smtp服务发送电子邮件给指定用户(适用于Zabbix邮件报警)

当下免费的邮件服务很多,例如163企业邮箱.QQ企业邮箱等.不需要自己搭建邮件服务器发送邮件给指 定用户,只需要注册任何一个支持smtp协议的邮箱就可以实现发送邮件.发送邮件可以通过Linux命令.自己编写的Shell脚本,也可以通过Python写的Python脚本. 如下代码是一个简单却实用的示例.默认无参数执行时,发送预设的邮件主题和邮件内容到预设的用户.带参数执行时将指定的主题和邮件内容发送到指定的用户.带参数执行可用于Zabbix邮件报警脚本. 对于Zabbix2.x可以直接填写脚本名字

zabbix监控之同时向多人邮件报警

zabbix做为一款监控软件,报警是必不可少的,该文章主要介绍zabbix向多人邮件报警的配置过程. zabbix邮件报警配置步骤说明: 1.  准备一个发送邮件的脚本 2.  修改zabbix配置文件中指定的脚本路径 3.关联脚本名称 4.用户设置收件邮箱与报警时间 5.配置报警触发器 6.添加多个用户,同时给多个人发邮件 7.邮件接收测试 1.准备一个发送邮件的脚本 发送邮件有很多方法,自己写脚本的话,只要遵循zabbix传参的格式即可. zabbix发送邮件传参格式:./sendmail.