zoukankan      html  css  js  c++  java
  • 通过脚本发送zabbix邮件报警

    zabbix原生的报警媒介类型中,邮件报警是我们常用的方式。当我们在CentOS6上面安装zabbix3.0并配置邮件报警的时候,在邮件配置正确的前提下,不管触发器如何触发,邮件总是发送不出去,但是在CentOS7上面安装的zabbix3.0却可以正常发送邮件。究其原因,是因为zabbix3.0对服务器上的libcurl版本有要求(CentOS6.9上的默认curl版本为7.19.7,而CentOS7.2上的默认libcurl版本为7.29.0),zabbix3.0所要求的的版本说明在zabbix3.0的官方文档上面可以找到

    https://www.zabbix.com/documentation/3.0/manual/installation/install,官网指出从zabbix3.0.0以来的libcurl会影响邮件服务器的认证,其版本必须为7.20.0或更高

    要想通过邮件发送报警,可以选择的解决方法有两种:自定义邮件报警脚本或者升级libcurl版本。后者从理论来讲当然可以实现,但是升级版本会由于依赖关系变得复杂,因此可以采取第一种解决方法,通过使用python脚本来发邮件

    1、web界面新增报警媒介类型

    名称自定义即可,类型选择脚本,脚本名称为所写的脚本的名称,这里的python脚本通过qq邮箱来做服务,脚本的三个参数都是zabbix内置变量,分别为:报警收件人:{ALERT.SENDTO},报警标题:{ALERT.SUBJECT},报警内容:{ALERT.MESSAGE},在zabbix中自定义报警媒介的脚本默认存放路径(yum安装zabbix)为/usr/lib/zabbix/alertscripts

    添加完报警媒介类型后勾选启用

    2、关于脚本

    脚本内容不做过多说明,需要了解含义请自行百度,脚本使用的是python语言,在语法上要求较严格。 qq邮箱使用了ssl/tls加密465端口,网易163邮箱使用默认方式25端口,因此脚本内容会有一些差别,脚本如下

    [root@zabbix alertscripts]# pwd

    /usr/lib/zabbix/alertscripts

    [root@zabbix alertscripts]# cat mail_qq.py

    #!/usr/bin/python

    #coding:utf-8

    import smtplib

    from email.mime.text import MIMEText

    import sys

    mail_user = '111111111@qq.com'

    mail_pass = 'xxxxxxxxxxx'

     

    def send_mail(to_list,subject,content):

    me = "zabbix 监控告警平台"+"<"+mail_user+">"

    msg = MIMEText(content, 'plain', 'utf-8')

    msg['Subject'] = subject

    msg['From'] = me

    msg['to'] = to_list

    try:

    s = smtplib.SMTP_SSL("smtp.qq.com", 465)

    s.login(mail_user,mail_pass)

    s.sendmail(me,to_list,msg.as_string())

    s.close()

    return True

    except Exception,e:

    print str(e)

    return False

    if __name__ == "__main__":

    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

    mail_user为邮箱地址,mail_pass为邮箱服务商提供的客户端授权码,获得授权码的方式也可以参考百度,要说明的是目前网易邮箱客户端授权码支持自定义,qq邮箱客户端授权码不支持自定义,需要生成、这里也附上使用163邮箱的脚本

    [root@zabbix alertscripts]# cat mail_163.py

    #!/usr/bin/python

    #coding:utf-8

    import smtplib

    from email.mime.text import MIMEText

    import sys

    mail_user = '1232323232@163.com'

    mail_pass = 'xxxxxxxxxx'

     

    def send_mail(to_list,subject,content):

    me = "zabbix 监控告警平台"+"<"+mail_user+">"

    msg = MIMEText(content, 'plain', 'utf-8')

    msg['Subject'] = subject

    msg['From'] = me

    msg['to'] = to_list

    try:

    s = smtplib.SMTP("smtp.163.com", 25)

    s.login(mail_user,mail_pass)

    s.sendmail(me,to_list,msg.as_string())

    s.close()

    return True

    except Exception,e:

    print str(e)

    return False

    if __name__ == "__main__":

    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

    脚本编写完成之后需要为脚本添加执行权限

    [root@zabbix alertscripts]# chmod +x mail_qq.py

    3、测试

    命令行测试脚本能否成功执行

    [root@zabbix alertscripts]# ./mail_qq.py xxx@163.com "测试" 'test'

    测试参数为三个,分别为收件人邮箱地址,邮件标题,邮件内容

    测试的时候如果出现错误提示缺少smtplib,解决方法为使用pip进行安装:pip install smtplib

    测试完成了就可以通过zabbix进行触发报警了

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/ssgeek/p/9223554.html
Copyright © 2011-2022 走看看