Zabbix6 严重告警电话通知配置方法
本文档为脱敏版本,域名、IP、电话号码等已替换为示例值,仅供流程参考。
ENV
| 项目 | 信息 |
|---|---|
| K8s 节点 | zabbix38(control-plane,单节点) |
| 节点 OS | Ubuntu 20.04.6 LTS,Kernel 5.4.0-216 |
| K8s | v1.29.10,containerd 1.6.28 |
| Namespace | zabbix |
| Zabbix Server | 6.0.46(Pod 内 Ubuntu 24.04) |
| 组件 Pod | zabbix-zabbix-server、zabbix-postgresql-0、zabbix-zabbix-web |
| Web | https://zabbix-hu.igozhang.cn |
| 告警脚本目录 | /usr/lib/zabbix/alertscripts(Pod 内) |
| 电话 API | http://10.10.10.177:8080/call/tts |
| 被叫号码 | 13088888888 |
| 主叫显示 | 057188887718 |
| TTS 模板 | TTS_326260143 |
1. 需求
- Zabbix High(严重)+ Disaster(灾难) 触发器告警时,拨打固定号码
13088888888 - 告警内容通过阿里云 TTS 语音播报
- 恢复时不打电话
- 主机 Agent 不可用视为 High 级别(默认 Average 不触发电话)
2. 解决方案
2.1 部署告警脚本(K8s ConfigMap + 挂载)
执行位置: zabbix38
变更说明: 创建 ConfigMap,修改 Deployment,触发 zabbix-server Pod 滚动重启。
cat > /igo/zabbix-phonecall.sh << 'SCRIPT_EOF'
#!/bin/bash
TO="${1:-13088888888}"
MESSAGE="${3:-Zabbix告警}"
MESSAGE=$(echo "$MESSAGE" | tr '\n\r' ' ' | head -c 150)
MSG_ESC=$(printf '%s' "$MESSAGE" | sed 's/\\/\\\\/g; s/"/\\"/g')
PAYLOAD="{\"called_number\":\"${TO}\",\"called_show_number\":\"057188887718\",\"tts_code\":\"TTS_326260143\",\"tts_param\":\"{\\\"info\\\": \\\"${MSG_ESC}\\\"}\"}"
wget -q --timeout=10 --header="Content-Type: application/json" --post-data="$PAYLOAD" -O /dev/null http://10.10.10.177:8080/call/tts
exit $?
SCRIPT_EOF
chmod 755 /igo/zabbix-phonecall.sh
kubectl create configmap zabbix-alertscripts -n zabbix \
--from-file=phonecall.sh=/igo/zabbix-phonecall.sh \
--dry-run=client -o yaml | kubectl apply -f -
kubectl patch deployment zabbix-zabbix-server -n zabbix --patch '
spec:
template:
spec:
volumes:
- name: alertscripts
configMap:
name: zabbix-alertscripts
defaultMode: 0755
containers:
- name: zabbix-server
volumeMounts:
- name: alertscripts
mountPath: /usr/lib/zabbix/alertscripts
'
验证脚本部署:
kubectl rollout status deployment/zabbix-zabbix-server -n zabbix --timeout=60s
kubectl exec -n zabbix deploy/zabbix-zabbix-server -c zabbix-server -- \
ls -la /usr/lib/zabbix/alertscripts/phonecall.sh
验证外呼(会真实拨打电话):
kubectl exec -n zabbix deploy/zabbix-zabbix-server -c zabbix-server -- sh -c \
'/usr/lib/zabbix/alertscripts/phonecall.sh "13088888888" "Test" "Zabbix电话告警测试,请忽略"; echo "exit_code=$?"'
预期:exit_code=0,手机接到测试电话。
2.2 Web 配置:媒介类型
路径: 管理 → 报警媒介类型 → 创建
Media type 标签页:
| 字段 | 值 |
|---|---|
| 名称 | Phone Call TTS |
| 类型 | Script |
| 脚本名称 | phonecall.sh |
| 脚本参数 | {ALERT.SENDTO} / {ALERT.SUBJECT} / {ALERT.MESSAGE} |
| 已启用 | ✅ |
Message templates 标签页 → Add(必填,否则报 No message defined for media type):
| 字段 | 值 |
|---|---|
| Message type | Problem |
| Subject | {TRIGGER.NAME} - {HOST.NAME} |
| Message | 主机{HOST.NAME}触发告警{TRIGGER.NAME},请及时处理 |
Script 类型无 Web 测试按钮,用 2.1 命令行测试即可。
2.3 Web 配置:用户媒介
路径: 管理 → 用户 → 目标用户 → 报警媒介 → 添加
| 字段 | 值 |
|---|---|
| 类型 | Phone Call TTS |
| 发送到 | 13088888888 |
| 如果已启用 | ✅ |
| 严重性 | 仅勾选 灾难、严重 |
保存用户(须点用户页底部 Update)。
2.4 Web 配置:触发器动作
路径: 配置 → 动作 → 触发器动作 → 创建
| 页签 | 配置 |
|---|---|
| 动作 | 名称 Phone alert High Disaster,已启用 ✅ |
| 条件 | 触发器严重性 ≥ 严重 |
| 操作 | 发送消息给用户;仅发送到 Phone Call TTS;默认操作步骤持续时间 86400(24h,避免重复拨打) |
| 恢复操作 | 留空(恢复不打电话) |
重载配置缓存:
kubectl exec -n zabbix deploy/zabbix-zabbix-server -c zabbix-server -- \
zabbix_server -R config_cache_reload
验证 DB 配置入库:
kubectl exec -n zabbix zabbix-postgresql-0 -- psql -U zabbix -d zabbix -Atc \
"SELECT 'action|'||name||'|enabled='||(CASE WHEN status=0 THEN 'yes' ELSE 'no' END) FROM actions WHERE eventsource=0 AND name ILIKE '%phone%';
SELECT 'media|'||name FROM media_type WHERE name ILIKE '%phone%';
SELECT 'user_media|'||u.username||'|sendto='||m.sendto FROM media m
JOIN users u ON u.userid=m.userid
JOIN media_type mt ON mt.mediatypeid=m.mediatypeid WHERE mt.name ILIKE '%phone%';"
2.5 主机不可用告警升级为 High
默认 Linux: Zabbix agent is not available 严重性为 Average(3),不满足电话动作条件(≥ High)。
路径: 配置 → 模板 → Linux by Zabbix agent → 触发器
| 触发器 | 修改 |
|---|---|
Linux: Zabbix agent is not available |
严重性改为 High |
加快 Not available → Problem 延迟(可选):
路径: 配置 → 模板 → Linux by Zabbix agent → 宏
| 宏 | 默认 | 建议 |
|---|---|---|
{$AGENT.TIMEOUT} |
3m |
1m |
面板 Not available 即时更新;Problem 需等待
{$AGENT.TIMEOUT}窗口。改小会加快告警,但误报风险增加。
2.6 端到端验证
- 停目标主机 Agent:
systemctl stop zabbix-agent - 等待
{$AGENT.TIMEOUT}(如 1m 或 3m) - 监测 → 问题 出现 High 级
Zabbix agent is not available - 点击 Actions 列,
Phone Call TTS状态应为 Sent - 手机
13088888888接到语音告警
查日志(可选):
kubectl exec -n zabbix deploy/zabbix-zabbix-server -c zabbix-server -- sh -c \
'grep -iE "phonecall|Phone Call|executing script|No message" /var/log/zabbix/zabbix_server.log | tail -30'
验证完成后恢复 Agent:
systemctl start zabbix-agent
附录:常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| Not available 有,Problems 无 | 触发器等待 {$AGENT.TIMEOUT} |
等待或调小宏 |
| 有 High Problem,电话 Failed | Message templates 未配置 | 补 Problem 模板 |
| 有 Problem 但不打电话 | 严重性 < High 或动作/用户媒介未保存 | 查 DB 验证命令 |
| Script 无 Web 测试 | Zabbix 6.0 正常行为 | 用命令行测试脚本 |