0

Zabbix 5.2.3 实现邮件告警

Zabbix有很多告警方式,邮件作为最原始留档的一种方式,这种方式甚至都不需要访问外网(自有邮件服务器)就可以实现。在以往的zabbix版本,自带的phpmail会导致zabbix server服务异常重启,在5.0之后就已经解决了,通过mailx这种方式,虽然也可以,但是多多少少还是有点缺陷,所以今天分享基于Python脚本方式。

Zabbix版本为5.2.3,Python版本为3.6.8,建议用QQ邮箱,163邮箱会报Exception (554, b'DT:SPM 163 smtp9 错误,记得将465或25端口在安全组放行;阿里云服务器关闭了25号端口,所以建议采用SSL(465端口),如果用smtp 25端口

需要将脚本里的s = smtplib.SMTP_SSL(mail_host,465)改为s=smtplib.SMTP()

脚本里需要修改mail_host,mail_user,mail_pass,mail_postfix部分;并将脚本放在AlertScriptsPath目录下并修改权限及所属者。AlertScriptsPath目录可在Zabbix server配置文件里查看(通过命令:find / -name alertscripts 查找)。

chown zabbix:zabbix mail.py
chmod +x mail.py
Zabbix 5.2由浅入深系列之邮箱告警邮箱配置(以Yeah.net为例),建议用QQ邮箱。
Zabbix 5.2由浅入深系列之邮箱告警

Zabbix 5.2由浅入深系列之邮箱告警

Zabbix 5.2由浅入深系列之邮箱告警

Zabbix 5.2由浅入深系列之邮箱告警

Zabbix 5.2由浅入深系列之邮箱告警

脚本

#!/usr/bin/python3
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.qq.com' 邮箱smtp server
mail_user = '10001'  #####不要带后缀
mail_pass = 'password'   ####您的授权码
mail_postfix = 'qq.com'
def send_mail(to_list,subject,content):
    me = "Zabbix"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib.SMTP_SSL(mail_host,465)
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception as e:
        print ('Exception',e)
        return False
if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

最后到zabbix后台配置告警媒介填写

类型为脚本,传递值为{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}

Zabbix 5.2由浅入深系列之邮箱告警

填写告警媒介内容

Zabbix 5.2由浅入深系列之邮箱告警

Zabbix 5.2由浅入深系列之邮箱告警

创建动作,哪些主机需要告警

Zabbix 5.2由浅入深系列之邮箱告警

Zabbix 5.2由浅入深系列之邮箱告警
文章转自于今日头条:IT小白Kasar
   
微信 支付宝    

如果文章对您有帮助,欢迎打赏作者!

欢迎评论