在后端系统运行中,“出问题才发现” 是最被动的状态 —— 用户投诉、业务中断后才开始排查,已造成损失。监控告警体系通过实时采集系统指标、业务指标,设定合理阈值,在问题影响用户前主动告警,如同为系统装上 “听诊器”,提前发现健康隐患。
监控告警的核心价值
监控告警的核心是 “主动发现问题,减少故障影响”,具体价值:
- 实时感知:实时监控系统状态(CPU、内存、接口响应时间)
- 提前预警:指标超过阈值时及时告警,给工程师处理时间
- 根因分析:通过指标关联分析,快速定位问题根源(如数据库慢查询导致接口超时)
- 容量规划:基于历史指标趋势,提前扩容(如预判促销活动的流量峰值)
主流监控架构:Prometheus + Grafana
1. 核心组件与工作流程
-
Prometheus:时序数据库,负责指标采集、存储和查询(核心)
-
Exporter:指标暴露组件(如 Node Exporter 暴露服务器指标,MySQL Exporter 暴露数据库指标)
-
Grafana:指标可视化平台(绘制仪表盘、图表)
-
Alertmanager:告警管理组件(去重、分组、路由到邮箱 / 钉钉 / Slack)
工作流程:
- Exporter 在目标服务 / 服务器上运行,暴露指标接口(如
/metrics) - Prometheus 定期(如 15 秒一次)从 Exporter 拉取指标,存储为时序数据
- Grafana 连接 Prometheus,通过 PromQL 查询指标,绘制可视化仪表盘
- Prometheus 配置告警规则(如 “接口错误率> 5% 持续 1 分钟”),触发告警后发送到 Alertmanager
- Alertmanager 处理告警(去重、合并),并发送到指定渠道
2. 必监控的三类指标
1. 系统资源指标(服务器 / 容器)
- CPU 使用率:核心指标,持续 > 80% 可能导致响应缓慢
- 内存使用率:避免 OOM,关注内存泄漏(持续增长不释放)
- 磁盘 I/O:磁盘读写速度、使用率(避免磁盘满导致服务崩溃)
- 网络流量:流入 / 流出带宽,异常波动可能是攻击或 bug
2. 应用性能指标(接口 / 服务)
-
四大黄金指标(Google SRE 提出):
- 延迟(Latency):接口响应时间(P50/P95/P99 分位数,关注长尾延迟)
- 流量(Traffic):QPS/RPS(衡量系统负载)
- 错误率(Errors):接口失败次数 / 总次数(如 5xx 错误、业务错误)
- 饱和度(Saturation):服务资源饱和程度(如线程池使用率)
3. 业务指标(与业务强相关)
- 订单量:每分钟下单数,突降可能是下单接口故障
- 支付成功率:低于 99% 需告警(可能是支付渠道问题)
- 活跃用户数:异常波动可能是登录 / 注册功能故障
告警策略设计原则
1. 告警分级:避免 “告警风暴”
- P0(紧急) :核心业务中断(如支付失败、全站不可用),需立即处理(5 分钟内响应)
- P1(重要) :非核心功能异常(如评论功能故障),工作时间内处理
- P2(提示) :性能退化(如接口响应时间从 50ms 增至 200ms),可计划性优化
2. 告警规则设计技巧
- 避免重复告警:同一问题只告警一次(如 “接口错误率高” 和 “数据库连接满” 可能是同一原因,只告最根本的)
- 设置合理阈值:结合历史数据(如 “错误率> 历史均值 3 倍” 而非固定值 5%)
- 添加持续时间:避免瞬时波动误告警(如 “错误率> 5% 持续 1 分钟” 而非一次超过就告警)
3. 告警渠道选择
- P0:电话 + 短信 + 钉钉群 @所有人(最高优先级)
- P1:钉钉群 + 邮件
- P2:邮件 + 系统内通知
避坑指南
-
避免 “指标泛滥”:只监控核心指标(20% 的指标解决 80% 的问题),避免监控上千个无用指标
-
告警需带 “行动建议”:如 “接口超时告警,建议检查数据库慢查询(SQL ID: xxx)”,而非只说 “接口超时”
-
定期演练告警:模拟故障(如人为制造高 CPU),验证告警是否触发、处理流程是否顺畅
监控告警体系的成熟度,体现了后端团队的工程能力。一个 “恰到好处” 的监控系统 —— 既不会因告警太少而遗漏问题,也不会因告警太多而让人麻木 —— 能让系统在稳定运行的同时,给工程师足够的 “安全感”。这正是 “预防性运维” 替代 “救火式运维” 的关键。