众所周知,Zabbix有很多告警方式,邮件作为最原始留档的一种方式,也是最基础的,在告警体系里也是应该掌握的一种方式,因为这种方式甚至都不需要机器访问外网(自有邮件服务器)就可以实现。在以往的zabbix版本,自带的php mail会导致zabbix server服务异常重启,在5.0之后就已经解决了,所以既可以傻瓜式,也可以脚本化实现,之前我翻阅过大部分的这方面的文章,sh脚本基本通过mailx这种方式,虽然这种方式也可以,但是还有多多少少有点缺陷,所以今天带来两种方式,分别是zabbix原生和基于Python。
正文
环境
Zabbix版本为5.2.3,Python版本为2.7.
脚本内容
- #!/usr/bin/python2
- #coding:utf-8
- import smtplib
- from email.mime.text import MIMEText
- import sys
- mail_host = 'xxxxxxxxx' #######邮箱server
- mail_user = 'xxxxxxxxx' #####不要带后缀
- mail_pass = 'xxxxxxxxxx' ####此处为您的密码或授权码
- mail_postfix = 'yeah.net'
- 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()
- 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])
脚本使用注意
本脚本只需要改mail_host,mail_user,mail_pass,mail_postfix,me部分,默认使用smtp 25端口。
脚本存放位置
在Zabbix server配置文件里查看AlertScriptsPath根目录,并将脚本放入,修改权限及所属者。
- chown zabbix:zabbix mail.py
- chmod +x mail.py
![](https://s6.51cto.com/oss/202012/31/d52260336663020c1123833ee80d3c9a.png)
查找告警脚本存放目录
![](https://s6.51cto.com/oss/202012/31/e3e6d8f6923d2618f7c4a559ea0a950b.png)
修改权限及所属者
邮箱配置(以网易为例)
![](https://s5.51cto.com/oss/202012/31/cb4613f1c06e35b207cf701129dacbfc.png)
打开设置
![](https://s5.51cto.com/oss/202012/31/f28c0bb2185d1bc4fb3f8edb766fd64c.png)
点击开启SMTP,随便一个就可以
![](https://s2.51cto.com/oss/202012/31/4583bf979c98dda3ee804fd8ca4e8c59.png)
用微信扫描二维码发送短信
![](https://s2.51cto.com/oss/202012/31/dbc9e52d31503c9161d2df56a29e1138.png)
发送短信完成后获取到授权码,该码为密码
![](https://s2.51cto.com/oss/202012/31/7df0f7768308974f8370e51bfc594823.png)
找到服务器地址(主要是smtp服务器地址)
修改脚本文件
修改以下几处,mail_host,mail_user,mail_pass,mail_postfix(mail_postfix比较特殊,为@后缀名,举个例子,zabbix@zabbix.com,该后缀为@zabbix.com)。
![](https://s2.51cto.com/oss/202012/31/4640eb047043eabdb1561b9f38b93343.png)
修改脚本文件
测试脚本
- ./mail.py
执行完成之后发现报错
该报错为python2没有安装,所以需要安装python2
![](https://s4.51cto.com/oss/202012/31/9dda6bb195b26fed1bc35bb179f528da.png)
安装python2
![](https://s3.51cto.com/oss/202012/31/c5d4a4a8099c46cea28fb5b856feeb65.png)
创建告警媒介
告警媒介填写
类型为脚本
传递值为{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}
![](https://s5.51cto.com/oss/202012/31/7aa33d4bfe48896d6bb2fa12a3f044a6.png)
填写告警媒介内容
![](https://s3.51cto.com/oss/202012/31/3b02a851d4f7f298c276f4bb9d24901c.png)
填写用户媒介内容
![](https://s4.51cto.com/oss/202012/31/e4353981cb862a3b1be7c78598407cad.png)
创建动作,哪些主机需要告警
![](https://s5.51cto.com/oss/202012/31/6b4602d817fdadd7d5e4ed395a13da5f.png)
填写操作内容,调用脚本
![](https://s2.51cto.com/oss/202012/31/bb304a7f51e083372ea801bcade2e831.png)
创建测试主机,采用ICMP模板
效果
![](https://s3.51cto.com/oss/202012/31/35f741fa647bdc78bb2f7c9d3a690613.png)
效果1
![](https://s2.51cto.com/oss/202012/31/46476167f797ddbdb61e933bd6f7e316.png)
效果2
部分朋友反应采用阿里云机器会封25号端口,所以建议采用SSL(465端口)
需要将s=smtplib.SMTP()改为s = smtplib.SMTP_SSL(mail_host,465)
![](https://s5.51cto.com/oss/202012/31/f57ab3fa56ffcf2d4ced94b8530bd2d2.png)
改为SSL连接
Zabbix原生方式
![](https://s4.51cto.com/oss/202012/31/e3cf6007b1e90d52bbb043d6d4aaee63.png)
在告警媒介里选择Email,填写相关信息
![](https://s5.51cto.com/oss/202012/31/e3fb95fc5ee9561285b29946c07dcfe2.png)
测试正常
效果正常
由于篇幅有限,就不再做一遍
总结
从整体测试情况来看,互联网的免费邮箱多多少少有点问题,建议采用企业邮箱,目前是qq邮箱要更友好一点,网易邮箱多多少少都会存在一些发送的问题,例如543,需要列表带有自身邮箱才行。这个需要自己实际测试才知道。