你的服务器监控,是不是总在“马后炮”?

凌晨两点手机狂震,你摸黑点开告警——服务已经挂了半小时。
或者更糟:用户在群里发截图“网站打不开”,你才翻出监控看,发现告警压根没响。

别自责,这太常见了。问题不在你没配,而在告警没真正“长脑子”。

告警配置的核心三要素是什么?

指标、规则、渠道——就这三个词,少一个都不行。

  • 指标:你盯谁?CPU、内存、磁盘、端口通不通、数据库连没连上。
  • 规则:怎么才算出事?不是“CPU 超了就喊”,而是“CPU 持续超 85% 超过 2 分钟”。
  • 渠道:消息发给谁?发到哪?钉钉群?企业微信?还是直接电话打给你?

我见过最扎心的案例:告警规则全对,渠道填的是前年离职同事的邮箱。磁盘爆满那晚,所有告警安静得像没发生过——直到第二天早上数据库写不进去了。
配完务必自己试一次:找台测试机,手动塞满磁盘,看消息是不是真进了你手机。

如何选择关键的监控指标?

别贪多。先保住业务不崩,再谈优化。

我们按影响链条分四层来看:

  • 基础设施层:CPU、内存、磁盘、网络丢包
  • 应用服务层:Nginx/Java 进程还在不在、80 端口有没有监听
  • 业务层:支付接口成功率、首页加载时间、订单创建失败率
  • 依赖层:MySQL 连接池满了没、Redis 命中率掉没、调第三方 API 是否超时

真实教训:有次用户疯狂反馈“付款卡住”,我们盯着 CPU 和内存看了半小时,一切正常。最后查才发现是慢 SQL 把数据库连接池占满了——而这个指标,我们压根没加告警。
记住:用户点不了支付按钮,比服务器风扇转得快十倍更值得你半夜爬起来。

阈值设置有哪些门道?

别抄网上“CPU > 80% 就告警”的模板。你得看自己家的数据。

打开过去一周的监控曲线图,观察 CPU 是常年在 30% 打晃,还是下午三点准时冲到 70%。如果平时就在 40%-60% 波动,设 75% 当阈值可能刚刚好;如果它日常就是 15%,那 85% 才算异常。

更要防“一秒假高潮”。比如 GC 触发时 CPU 瞬间飙到 100%,持续 0.8 秒——这种不用叫你起床。加个“持续时间”条件,比如“> 85% 且连续 2 分钟”,误报立刻少一半。

对磁盘这种只增不减的指标,光看当前使用率不够。试试“预测告警”:根据最近 24 小时增长斜率,算出“按这速度,48 小时后就要写满”,提前给你留出扩容时间。

如何设计有效的告警分级?

所有告警都打电话?三天你就关掉通知。

我们按“用户能不能用”来分三级:

  • P0(立刻处理):核心服务宕了、主库连不上、支付网关全挂——电话必须响,人必须醒。
  • P1(尽快处理):首页接口平均响应超 2 秒、错误率突然翻倍——钉钉强提醒,但不用立刻爬起来。
  • P2(记下来就行):某台后台机器磁盘用了 82%、某个非核心页面偶发 500——发到运维群,白天再看。

关键是把“影响面”和“紧急度”对应上。比如“用户登录失败”是 P0,“管理员后台导出日志失败”就是 P2。
P0/P1 告警我们配了电话接力:第一通没人接,自动打给第二人。P2 就只走钉钉,不 @,不弹窗。

告警风暴来了怎么办?

一个 Redis 挂了,你收到 300 条“缓存连接失败”,手机震到发烫——这不是监控在帮忙,是在搞你。

我们靠三招收住局面:

  • 抑制:当检测到 redis-master VIP 不可达时,自动屏蔽所有依赖它的应用告警。
  • 聚合:同一分钟内,12 台机器同时报“网络延迟高”,合并成一条:“华东区 A 机房共 12 台主机网络异常,平均延迟 380ms”。
  • 静默:每月 2 号凌晨 2 点做数据库备份,提前 1 小时把相关指标告警临时关掉。

上次缓存集群故障,我们靠抑制规则,把 200+ 条重复告警压成 1 条根因提示。你点开就能修,不用在信息洪流里捞针。

告警配置如何持续优化?

告警不是上线就完事。它得跟着业务一起长。

我们每季度做一次“告警复盘”,就盯两件事:

  • 漏报:那次支付失败为什么没告?是没监控连接池,还是阈值设太高?
  • 误报:为什么凌晨三点因为一次 DNS 解析超时就打你电话?是不是该加个“连续失败 3 次”条件?

还建了个简易“告警档案”:用飞书文档记下每次重大告警的原因、怎么处理的、后续改了哪条规则。复盘发现,不少夜间 P1 告警,白天其实也有类似波动——只是大家习惯了忽略。后来我们给夜间加了宽松阈值,睡眠质量肉眼可见变好。
好的告警系统,是越用越懂你业务节奏的。

今天下班前就能做的一个动作

打开你天天用的监控平台(Zabbix / Prometheus / 阿里云 ARMS / 腾讯云可观测平台),花 15 分钟,做完这三步:

  1. 测渠道:找一台测试服务器,手动 dd if=/dev/zero of=/tmp/fill bs=1M count=2000 塞满磁盘,看告警是不是真进了你的钉钉/企业微信群,消息里有没有写清楚“哪台机器、什么指标、现在多少、建议查什么”。
  2. 砍一级:翻出上周所有 P0/P1 告警列表,逐条问:“如果现在重来,它还配得上这个级别吗?” 配高了的,直接拖到 P2。
  3. 加个预测项:在你最重要的生产服务器上,给磁盘使用率加一条规则:“按当前增长趋势,预计 72 小时后将超过 90%”,设为 P2 级。明天你打开监控,就能看到这条预警静静躺在那里——不吵你,但托住了底线。