配置Zabbix自定义告警媒介以实现脚本化通知
在Zabbix系统中,告警媒介用于将监控事件通知给指定接收者。常见的支持类型包括邮件、脚本、短信(依赖外部网关)、即时通讯等。其中,邮件和自定义脚本是最灵活且易于实现的方案。
要启用基于脚本的告警功能,需先创建一个自定义报警媒介。进入Zabbix前端管理界面,导航至"管理" → "报警媒介类型",点击"创建媒介类型"。选择"脚本"作为类型,并配置相关参数。
以下是一个用于发送邮件的Shell脚本示例(mail.sh):
#!/bin/bash
recipient="$1"
subject="$2"
message="$3"
echo "$message" | mail -s "$subject" "$recipient"
该脚本接收三个参数:收件人邮箱、邮件主题与正文内容。但仅靠脚本无法完成邮件发送,还需配置邮件客户端环境。编辑 /etc/mail.rc 文件,添加如下SMTP认证信息:
set from=your-email@example.com
set smtp=smtp.example.com
set smtp-auth-user=your-email@example.com
set smtp-auth-password=your-app-password
set smtp-auth=login
确保使用的是授权码而非账户密码,并已开启对应邮箱的SMTP服务。
接下来,必须将脚本放置于Zabbix服务器识别的目录下。通过查看 /etc/zabbix/zabbix_server.conf 中的 AlertScriptsPath 参数,可获取默认路径。例如:
AlertScriptsPath=/usr/lib/zabbix/alertscripts
将 mail.sh 放入此目录,并赋予执行权限:
chmod +x /usr/lib/zabbix/alertscripts/mail.sh
返回前端界面,点击"添加"按钮,创建名为"MailScript"的报警媒介,设置脚本名称为 mail.sh,并保留其他默认值。
为了使用户能接收此类通知,需为其分配该媒介。进入"管理" → "用户",选择目标用户(如管理员),切换到"报警媒介"选项卡,点击"添加",选择"MailScript"类型,填写邮箱地址后保存。
随后,在"配置" → "动作"中创建触发动作。设定条件为特定触发器状态变化(如故障或恢复),并配置操作步骤。例如:
故障触发消息:
故障{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}
在"操作"设置中,将执行步骤设为"1-1"表示仅触发一次;若改为"1-0",则会持续重复发送,适用于需要高频提醒的场景。默认间隔为60秒,长时间故障将导致大量通知。
最后,创建一个测试用的触发器,如监控CPU使用率,设定阈值极低以便快速触发。在仪表板中观察事件状态,确认告警被正确生成并发送邮件。
登录邮箱检查是否收到通知。若成功接收,则说明自定义脚本告警媒介配置生效。调整数值后再次验证恢复通知是否正常送达。
整个流程实现了基于脚本的灵活告警机制,可根据实际需求扩展更多逻辑,如调用Webhook、推送至企业微信或钉钉等。