Zabbix、Prometheus 这些监控工具能发现问题,但默认报警往往只停留在页面和邮件里,值班人不盯着屏幕就会错过。把预警通知接口接进去,让监控一发现异常就自动打电话、发短信,是运维自动化里性价比很高的一步。 监控联动的整体架构 思路…
Zabbix、Prometheus 这些监控工具能发现问题,但默认报警往往只停留在页面和邮件里,值班人不盯着屏幕就会错过。把预警通知接口接进去,让监控一发现异常就自动打电话、发短信,是运维自动化里性价比很高的一步。
监控联动的整体架构
思路很简单:监控系统触发告警时,调用一个我们自己的中转脚本或 Webhook,由中转脚本再去请求互亿无线预警通知接口。这样解耦的好处是,通道选择、去重、升级策略都集中在中转层管理,监控系统本身只负责"发现异常"。中转层还可以按告警名称决定走语音还是短信,不必在监控侧写死通道逻辑。
Zabbix 联动配置示例
在 Zabbix 里创建一个 Media Type,类型为 Script,脚本内容如下:
#!/usr/bin/env python3
import sys, os, requests
subject = sys.argv[1]
body = sys.argv[2]
try:
requests.post("https://api.ihuyi.com/voice/vm", data={
"account": os.environ["IHUYI_APIID"],
"password": os.environ["IHUYI_APIKEY"],
"mobile": "值班人手机号",
"content": (subject + body)[:70]
}, timeout=(5, 10))
except requests.RequestException as e:
print("alert send failed:", e)
保存为 alert.py 并赋予执行权限,在 Media Type 里把它设为告警脚本,绑定到值班用户即可。建议把账号密钥放进环境变量,不要写死在脚本里。
Prometheus Alertmanager 联动
Alertmanager 支持 webhook 接收器,部署一个小服务接收告警 JSON,提取摘要后调用语音接口即可。配置要点:
- webhook 路径在 Alertmanager 配置里指向你的中转服务地址。
- 中转服务解析 alerts 数组,把 annotations.summary 作为语音播报内容。
- 对同一告警名设置 group_interval,避免重复电话轰炸。
- 严重等级为 critical 时走语音,warning 级别只发短信。
联动时的常见坑
- Zabbix 默认把告警分发给用户,要确认绑定的值班用户手机号是当前在用的。
- Alertmanager 的 group_by 配置不当会导致同一告警反复触发,配合 inhibit_rules 抑制衍生告警。
- 中转服务要做超时与异常捕获,监控侧不能因为发送失败而阻塞告警队列。
联动后的效果
监控发现 CPU 飙高、磁盘快满、服务端口不通时,几秒内值班人的手机就会响起来电铃声,同时收到一条带主机名和指标的短信。互亿无线三网直连、通道故障自动备用,让监控告警不再"看得见、听不见"。
中转层该沉淀哪些能力
监控联动接入后,建议把中转层做成一个独立小服务,长期沉淀三类能力:通道路由(按等级选语音或短信)、去重合并(抑制告警风暴)、升级链路(未确认自动升级)。这样以后接新的监控系统,直接复用这个中转服务即可。
- Zabbix 用脚本传参,Prometheus 用 webhook,两种入口都指向同一个中转服务。
- 中转服务记录每条告警的流水号,方便和控制台发送记录对账。
- 对监控侧屏蔽通道细节,监控只管发摘要,不用关心底层接口地址。
互亿无线三网直连、智能路由,中转层只需要处理业务逻辑,线路质量交给服务商兜底。
联动后的演练
接好之后要做一次演练:在测试环境制造一个 CPU 飙高,看值班人手机几秒内是否响起来电。发现链路断在哪个环节,就回去补哪一段。演练每月一次,能及时发现值班表过时、手机号失效这类隐蔽问题。
把监控数据转化为真实触达的告警电话,注册免费试用接一条告警链路试试。