监控的层次

一、基础设施监控:CPU、内存、磁盘、网络、进程存活。

二、应用性能监控(APM):响应时间、错误率、吞吐量、数据库查询耗时、外部调用耗时。

三、业务监控:注册数、订单量、支付成功率、关键漏斗转化率。

四、日志与链路追踪:用于定位具体问题的根因。

可观测性的三个支柱

指标(Metrics):数值型的时间序列数据。聚合度高、存储成本低,适合监控和告警。

日志(Logs):离散的事件记录。信息详细,适合排查问题,但数据量大。

链路追踪(Traces):一次请求在分布式系统中的完整路径。用于定位跨服务的问题。

三者互补,缺一不可。

告警设计的常见错误

一、基于"原因"而非"症状"告警

例如:CPU 使用率超过 80% 就告警。

问题是:CPU 高不一定意味着有问题(可能是正常的批处理任务)。这类告警会产生大量噪音。

更好的做法:基于症状告警——也就是用户实际感受到的问题:

  • 错误率上升;
  • 响应时间变慢;
  • 订单成功率下降。

CPU 高这类"原因"指标,应该作为排查时的辅助信息,而不是告警本身。

二、阈值设置过于敏感

阈值太紧,稍有波动就告警;太松,真正的问题被漏掉。

改进:

  • 使用持续时长条件(如"错误率连续 5 分钟超过 5%"而非"某一刻超过 5%");
  • 结合同比/环比(与昨天同一时间、上周同一时间对比),过滤掉周期性的正常波动;
  • 用统计方法(如标准差、分位数)动态确定阈值,而非拍脑袋定一个固定值。

三、告警没有分级

所有告警都一样"紧急",导致真正紧急的被淹没。

建议分级:

  • P0(紧急):影响核心业务,需要立即处理,通常触发电话/短信通知;
  • P1(重要):影响部分功能或指标恶化,需要在数小时内处理;
  • P2(提示):需要关注但不紧急,进入工单队列。

四、告警没有可操作性

收到告警的人不知道该做什么。

每条告警都应该附带:

  • 问题描述;
  • 可能的影响范围;
  • 排查方向或 Runbook(处置手册)链接;
  • 相关仪表盘的链接。

五、重复告警与告警风暴

一个根因触发几十条告警,接收者被淹没,反而忽略了关键信息。

应对:告警收敛与聚合(把相关告警合并成一条),以及抑制(上游故障已告警时,抑制下游的连锁告警)。

告警疲劳的代价

当团队习惯了"大部分告警都无所谓",就会开始忽略告警。

真正的故障发生时,可能被淹没在噪音中,或者被值班人员当作"又是误报"而忽略。

这是最危险的后果:监控系统完好无损地运行着,但没人相信它。

几条实践建议

  • 定期审计告警:哪些告警在过去三个月从未被处理过?哪些一直在响?删掉或调整它们;
  • 每次故障后复盘:告警是否及时?是否准确?有没有噪音干扰?;
  • 值班轮转要合理,避免单人长期承担告警压力;
  • 建立告警—响应—复盘的闭环。

一句话

监控的目标是让人在正确的时间知道正确的事,而不是让人收到尽可能多的通知。

说明:本文为运维实践的知识整理。