Zabbix 邮件报警配置是监控体系的“最后一公里”,配置得当可让故障响应从小时级缩短到分钟级
在运维实践中,告警通道的可靠性往往比监控指标本身更重要,Zabbix 作为开源监控利器,其邮件报警功能是绝大多数团队的首选方案,但很多管理员在配置后遇到“收不到邮件”“告警风暴”“重复通知”等问题,根源并非 Zabbix 缺陷,而是配置逻辑不完整,本文基于生产环境实战,给出从脚本、媒介、用户到触发器的全链路配置方案,并融入酷番云云主机的部署经验,帮助你一次性搞定稳定可靠的邮件告警。
配置前的三个关键决策
邮件发送方式选择:脚本发送 vs SMTP 认证
Zabbix 官方默认支持多种媒介类型,但 生产环境强烈推荐使用“脚本”方式调用外部邮件工具(如 mailx、sendEmail),原因有二:
- 脚本方式可灵活处理附件、HTML 格式、多收件人,且便于故障排查;
- 直接使用 Zabbix 内置的“SMTP 认证”类型时,部分邮件服务商(如 QQ 邮箱、网易)需要独立授权码,且对发送频率有限制,容易触发风控。
独立见解:不要为了省事而选择最简单的“SMTP 认证”,脚本方式虽然多一步,但可控性和扩展性远胜内置方案,尤其适合后续对接短信、钉钉等多元告警。
邮件服务器选型:企业邮局 vs 云邮件服务
如果公司有自建邮局,优先使用自建;如果没有,推荐使用 简米云邮件推送、酷番云SES等专业服务,避免使用个人免费邮箱,免费邮箱有每日发送量限制,且大量监控邮件易被判定为垃圾邮件。
告警接收人划分:按角色而非按人
在 Zabbix 用户配置中,建议为“运维值班组”“开发组”“管理层”分别创建用户组,并绑定不同媒介,这样可避免全员收到无关告警,减少告警疲劳。
邮件报警配置完整实操(基于 Zabbix 6.0 LTS)
第一步:准备邮件发送脚本
以 CentOS 7/8 + mailx 为例,安装并配置外部 SMTP:

yum install -y mailx vi /etc/mail.rc
在文件末尾追加(以 QQ 企业邮箱为例):
set smtp=smtps://smtp.exmail.qq.com:465
set smtp-auth=login
set smtp-auth-user=alert@yourdomain.com
set smtp-auth-password=授权码
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nss
然后创建 Zabbix 调用脚本 /usr/lib/zabbix/alertscripts/sendmail.sh:
#!/bin/bash echo "$3" | mail -s "$2" "$1"
赋予执行权限:
chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh chown zabbix:zabbix /usr/lib/zabbix/alertscripts/sendmail.sh
注意:脚本路径必须在 Zabbix 配置文件 zabbix_server.conf 中 AlertScriptsPath 指定的目录下,默认即为上述路径。
第二步:配置管理媒介(Media Type)
在 Zabbix Web 界面:报警媒介类型 → 创建媒体类型,参数设置如下:
- 名称:
sendmail.sh - 类型:脚本
- 脚本名称:
sendmail.sh - 脚本参数:
{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
保存后点击“测试”,填写一个测试邮箱并发送,验证脚本是否正常工作。
第三步:为用户分配邮件媒介
管理 → 用户 → 选择用户(如 Admin)→ 报警媒介 → 添加,选择刚创建的媒介,填写接收邮箱,并设置告警级别(建议勾选“灾难”“严重”“一般”),启用时间设为“1-7,00:00-24:00”表示全天候。
第四步:创建告警动作(Action)
配置 → 动作 → 创建动作,这是整个配置中最核心的一步,推荐设置两个动作:
- 动作1(故障告警):触发条件设为
{TRIGGER.STATUS}=PROBLEM,操作中发送消息给运维组,主题用【故障】{TRIGGER.NAME}建议包含主机、时间、当前值、事件ID。 - 动作2(恢复通知):触发条件设为
{TRIGGER.STATUS}=OK,主题用提示“故障已解决,请确认”。
【恢复】{TRIGGER.NAME}
独立见解:不要忽略恢复通知,很多团队只配置了故障通知,导致故障修复后没有闭环确认,时间长了告警接收者会逐渐失去信任感,恢复通知是运维工作闭环的重要一环。
第五步:触发器告警级别与间隔优化
在触发器配置中,将严重级别与媒介绑定对应(如“灾难”级别才发送邮件),同时设置 {TRIGGER.EVENT_DATE} 和 {TRIGGER.EVENT_TIME} 变量,确保邮件内容有时间戳,告警升级建议使用 动作的“升级”功能,10 分钟未处理,发送第二次通知给值班主管。
酷番云实战经验:稳定告警的四个“潜规则”
作为酷番云运维团队,我们在管理数千台云主机时总结了以下经验,直接决定邮件告警的可靠性:
- 独立告警子账号:在酷番云服务器上单独创建一个系统用户
zabbix_alert,专门运行邮件脚本,避免因权限不足导致脚本无法执行。 - 邮件队列监控:Zabbix 自身监控
/var/spool/mail队列大小和 sendmail 进程存活,一旦队列积压超过 100,立即触发二次告警,这是容易忽略的盲区很多团队只看邮件是否发出,却不检查邮件是否真正投递成功。 - 外网依赖检查:酷番云内部网络默认关闭 25 端口,需在云安全组中放行 465 或 587 端口,否则脚本报错。这一步是大多数云上部署失败的直接原因。
- 故障自愈联动:在酷番云控制台,我们通过 API 将 Zabbix 告警与云监控打通,当检测到某台云主机 CPU 持续 100% 时,自动触发告警邮件,同时创建工单并附上主机 ID,这个经验是:告警只是起点,自动化处理才是价值倍增器。
常见问题排查清单(核心速查)
- 邮件发送失败:查看
/var/log/zabbix/zabbix_server.log和/var/log/maillog,注意 Zabbix 服务账号是否有权限读取脚本。 -

收到测试邮件但无法收到实际告警:检查动作的“条件”是否包含主机或触发器,且用户是否在“收件人”列表中。
- 告警重复轰炸:在动作步骤中设置“仅发送一次”,或配置触发器为“恢复后重新计数”。
相关问答模块
问题1:Zabbix 使用脚本发送邮件时,脚本测试正常但实际告警收不到,是什么原因?
解答:最常见的三个原因依次为:第一,Zabbix Server 的执行用户(通常为 zabbix)没有脚本执行权限,检查脚本属主和权限(chown zabbix:zabbix 和 chmod 755);第二,动作中未正确关联“用户”和“媒介”,比如用户虽然配置了邮件媒介,但动作的操作里没有选择该用户组或用户;第三,触发器事件未触发动作,确认动作的触发条件(如主机组、严重性)是否与触发器匹配,建议先用“测试”按钮发送,再在“报告 → 动作日志”中查看发送记录,定位具体报错。
问题2:如何防止 Zabbix 邮件告警风暴(比如网络抖动导致大量主机同时告警)?
解答:建议从三个层面控制:一是触发器设置依赖,例如不要对每台主机的 ping 丢包单独设触发器,而是设置“主机不可达”的聚合触发器,或设置 nodata() 函数的时间窗口大于 5 分钟;二是动作启用“告警升级”和“重复告警抑制”,在动作步骤中设置“最多发送 3 次,间隔 30 分钟”;三是使用维护周期,在计划维护期间自动禁用告警,酷番云的经验是:为触发器设置“严重性”为“信息”或“警告”的,不发送邮件,只记录在事件日志中,只对“严重”及以上级别发送邮件,有效降低噪音。
互动引导
你在配置 Zabbix 邮件报警时遇到过哪些“诡异”问题?比如脚本超时、邮件进垃圾箱、还是端口不通?欢迎在评论区留言,我们会挑选典型问题在下一期实战专题中详细拆解,如果你觉得本文有帮助,点赞收藏,让更多运维伙伴少踩坑。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/726038.html

