半夜三点,机房温度突然飙升,交换机也跟着罢工。可奇怪的是,监控系统明明开着,却一条告警都没发出来。等到早上发现时,业务已经中断了好几个小时。这种情况并不少见,很多人以为设置了监控就万事大吉,其实中间一两个环节出问题,通知就石沉大海了。
检查通知通道是否真正启用
最常见的问题是:压根就没打开通知功能。比如用 Zabbix 或 Prometheus 搭的监控平台,默认安装完只是采集数据,并不会自动推送消息。你得手动去“告警媒介”里配置邮件、短信或企业微信机器人。有些人配完以为搞定,结果没点“启用”,等于门没开,消息根本出不去。
邮箱或手机号写错了
别笑,真有人把邮箱填成 admin@compay.com,少了个 n。还有人绑企业微信时用了离职同事的账号,自己却不知道。建议每季度做一次通知测试,直接发一条“测试告警”到手机,看能不能收到。
防火墙拦了通知出口
有些公司安全策略严,服务器只能进不能出。监控系统要发邮件,得走 SMTP 端口(通常是25或465),但这些端口被防火墙堵死了,日志里能看到连接超时。这时候得找安全团队开白名单,或者改用支持 HTTPS 的推送方式,比如通过钉钉/企微的 Webhook 接口。
告警规则设得太死
有人怕误报,把阈值设得极高。比如内存占用超过95%才触发,结果设备在94%来回波动,始终不达标,告警一直不发。另一种情况是触发条件太复杂,比如“连续5次异常才通知”,但系统只采样一次就恢复了,条件永远凑不齐。建议先用宽松规则跑几天,观察日志再逐步调整。
脚本类通知执行失败
自定义脚本发通知也很常见。比如写个 Shell 脚本调用短信接口,但脚本权限没给 execute,或者依赖的 curl 命令没装。这类问题看日志最直观:
<?php
exec("/usr/local/bin/send-sms.sh '交换机离线' 2>&1", $output, $status);
if ($status !== 0) {
error_log("通知脚本执行失败:" . implode("\n", $output));
}
?>
记得加上错误捕获,不然脚本静默失败,你完全不知道它没跑。
设备本身没上报状态
监控系统收不到数据,自然也不会发通知。可能是 SNMP 被禁用,或是 ICMP 被过滤,ping 不通就判定离线。但有些老旧交换机默认关掉了响应包,你以为它挂了,其实是“沉默型选手”。这时候得登录设备确认管理接口是否开启,ACL 是否放行监控IP。
监控不是设完就高枕无忧的事。就像家里的烟雾报警器,电池耗尽也不会响。定期做一次端到端验证,从设备异常模拟开始,一路看到通知是否准时到达手机,这才是真正的闭环。