我们部署一套监控软件,报警这一块自然不可或缺,接下来我们看看zabbix如何实现邮件报警。
1、编写发送邮件的脚本
zabbix通脚本发送邮件,遵循的传参格式为:
脚本 收件人 标题 邮件内容
先来看看脚本(sendmail_zabbix.py):
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
import sys
def formatAddr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def send_mail(to_list,subject,content):
mail_host = 'smtp.exmail.qq.com'
mail_user = 'llll@xxx.com'
mail_pass = '^4ypfadfasdfadfladfjll77=2nwr32iy'
#以上内容根据你的实际情况进行修改
msg = MIMEText(content,'','utf-8')
msg['Subject'] = Header(subject, 'utf-8').encode()
msg['From'] = formatAddr('zabbix监控 <%s>' % mail_user).encode()
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(mail_user,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])
2、在zabbix配置文件中指定的脚本路径
修改zabbix_server.conf
AlertScriptsPath=/data/zabbix/externalscripts #我的脚本放在此目录下,不同路径手动修改即可
修改完成后重启zabbix_server服务。
3、关联脚本名称
【zabbix主面板->管理->报警媒介类型->创建媒体类型】
输入脚本名称,类型选择脚本
添加以下3个参数,分别对应sendEmail.sh脚本需要的3个参数:收件人地址、主题、详细内容
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
很多人安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。
这是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。
在2.x版本不存在这个问题,默认会传3个参数。
4、用户收件邮箱与报警时间设置
【zabbix主面板->管理->用户->点击用户->报警媒介】
5、配置报警触发器
【配置->动作->创建动作】
配置好名称,其它默认。
条件:
操作:
6、邮件接收测试
停掉client节点的zabbix_agentd服务。等待邮件报警,默认agent发邮件是5分钟,即5次没有获取到数据则报警。
收到邮件: