zabbix邮件报警
作者:综合 来源:综合 浏览: 【大 中 小】 发布时间:2026-10-17 06:20:45 评论数:
Zabbix 监控再好,邮件报警发不出去等于白装。邮件我见过太多人把服务器、邮件交换机、邮件数据库全接进 Zabbix,邮件仪表盘花花绿绿挺好看,邮件结果磁盘爆了没人知道——因为邮件报警没配通。邮件这事儿的邮件核心就一句话:Zabbix 自己不负责发邮件,它只负责把报警事件交给外部程序,邮件剩下的邮件活儿是 sendmail、postfix 或者第三方 SMTP 的邮件事。
先看一个真实场景。邮件去年帮朋友排查,邮件他 Zabbix 里触发器明明亮了,邮件Media 也绑了用户,邮件就是收不到信。查了半天,问题出在 /etc/zabbix/zabbix_server.conf 里 AlertScriptsPath 指向的目录压根没放脚本。Zabbix 默认路径是 /usr/lib/zabbix/alertscripts,但很多发行版装完是空的。你往里面扔个脚本,还得保证 zabbix 用户有执行权限,否则它连报错都不给你,静默失败最要命。
脚本本身不复杂。写个 shell,接收三个参数:收件人、主题、正文。Zabbix 传参的顺序是固定的,$1 是收件地址,$2 是标题,$3 是消息体。下面这个片段我用了好几年,走本地 mail 命令,简单可靠:
#!/bin/bash echo -e "$3" | mail -s "$2" "$1" 注意 echo -e 里的 -e,不然正文换行全变成 \n,收件人看到一坨乱码。还有,脚本里别写死发件人,交给系统 MTA 去处理。如果服务器上没装 mailx,yum install mailx 或 apt install mailutils 先补上。
脚本放好,权限给足:chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh,属主改成 zabbix:zabbix。然后进 Zabbix 前端,Administration → Media types,新建一个类型,Type 选 Script,脚本名填 sendmail.sh,三个参数按顺序填 { ALERT.SENDTO}、{ ALERT.SUBJECT}、{ ALERT.MESSAGE}。这一步错了,后面全白搭。
接下来是用户侧。每个要收报警的人,在 User settings → Media 里加一条,Type 选你刚建的脚本,Send to 填邮箱地址。别漏了 Enabled 勾选。触发器动作那边,Configuration → Actions,新建 Trigger action,Conditions 里至少加一条 Trigger severity ≥ Warning,Operations 里选 Send message to user,用户和 Media type 对上。
有个坑我踩过:Zabbix 默认对同一事件只发一次,恢复通知要单独在 Recovery operations 里配。很多人只配了 Problem operations,故障恢复后收不到“已恢复”的邮件,以为报警系统挂了。其实不是,是没开恢复动作。另外,动作里的 Default message 可以用宏,比如 { HOST.NAME}、{ TRIGGER.NAME},邮件里带上主机名和触发器名,一眼就知道哪台机器出了什么事,比光看“Problem”强太多。
最后说个排查技巧。脚本手动跑一遍:./sendmail.sh your@email.com "test" "hello",看能不能收到。能收到,问题在 Zabbix 配置;收不到,问题在 MTA 或网络。再看 /var/log/zabbix/zabbix_server.log,搜 alert 关键字,脚本报错会写在这里。别去翻 /var/log/messages,那里面只有 MTA 的日志,Zabbix 自己调脚本失败不会往那儿写。
邮件报警配通一次,后面就是复制粘贴的事。但第一次配,不踩几个坑根本过不去。我见过有人折腾一整天,最后发现是 AlertScriptsPath 路径后面多了个空格。这种细节,文档里不会写,只有真配过的人才知道。
