zabbix设置告警的完整流程:
zabbix设置邮件报警大体可以分为两大类:
使用Zabbix服务端本地邮箱账号发送邮件
zabbix 3.0之后,默认的Email报警添加了用户名密码验证功能,所以可以直接通过Email设置企业邮箱来发送邮件。
1.在“管理-报警媒介类型”中设置邮箱信息,这里以个人qq邮箱为例:
使用qq邮箱要确保开启SMTP服务,认证的密码要使用QQ邮箱生成的16位安全码
2.在“管理-用户-报警媒介”中设置邮件接收地址
3.设置触发报警的动作:
配置动作:
状态:{TRIGGER.STATUS}
主机:{TRIGGER.NAME}
监控项:{ITEM.KEY1}): {ITEM.VALUE1}
邮件报警详细配置动作:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
设置触发条件及操作
4.关闭agent,测试邮件报警
也可以在“报表-动作日志”中查看发送状态:
自定义脚本告警步骤:
自定义脚本存放路径:(配置文件中指定的路径)
/usr/lib/zabbix/alertscripts
# grep "alertscripts" /etc/zabbix/zabbix_server.conf
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
其他配置与使用Email配置类似。
脚本代码如下:
# cat /usr/lib/zabbix/alertscripts/pymail.py
#!/usr/bin/python
#coding: utf-8
import smtplib
import sys
from email.mime.text import MIMEText
from email.header import Header
from email.Utils import COMMASPACE
receiver = sys.argv[1]
subject = sys.argv[2]
mailbody = sys.argv[3]
smtpserver = 'smtp.qq.com'
username = '[email protected]'
password = 'xxxxxxxxx'
sender = username
msg = MIMEText(mailbody,'html','utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = username
msg['To'] = receiver
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.starttls()
smtp.sendmail(msg['From'], msg['To'], msg.as_string())
smtp.quit()
发往服务器本地的脚本如下:
# cat sms.sh
#!/bin/bash
ALTER_TO=$1
ALTER_TITLE=$2
ALTER_BODY=$3
echo $ALTER_TO >> /tmp/sms.log
echo $ALTER_TITLE >> /tmp/sms.log
echo $ALTER_BODY >> /tmp/sms.log
3.使用Zabbix服务端本地邮箱账号发送邮件
Zabbix服务端只是单纯的发送报警邮件到指定邮箱,发送报警邮件的这个邮箱账号是Zabbix服务端的本地邮箱账号,只能发送,不能接收外部邮件。
使用zabbox服服务端本地邮箱账号发送邮件,需要安装两个软件达到报警邮件转发至指定邮箱。Sendmail或postfix(两个软件各选择一个,但不能同时运行)和mailx邮件客户端。
什么是MTA?什么是MUA?
通俗的说MUA就是用户使用的客户端,而MTA则是真正发送邮件的发送进程,MUA编写的邮件最终也交由MTA发送至目标端。
mailx即为负责查看、编写邮件和向MTA发送邮件的MUA。
Sendmail和postfix即为负责邮件在网络上传输的MTA,将邮件从一个MTA传送至另一个MTA。
yum install -y mailx
systemctl start postfix #centos7 自带postfix
现在可以测试一下邮件是否能发送成功:
echo "test" | mail -s 'test linux' 1109206195@qq.com
使用默认的localhost.localdomain发送邮件容易被当做垃圾邮件拦截,建议通过主机名设置。