可观测性

Prometheus 告警设计:从有数据到可行动

2026-07-28 #监控#SRE#Prometheus

设计能说明影响、持续时间和处理动作的告警,减少噪声。

核心思路

优先监控用户可感知的延迟、错误率与可用性,再补充资源指标。短暂尖峰使用 for 抑制,告警标签标明服务、环境和严重等级。

落地步骤

每条告警都应有负责人、仪表盘和处理手册。定期回顾无人处理或频繁自愈的告警,删除无行动价值的规则。

验证清单

实施后不要只确认“能运行”,还应检查错误率、延迟、资源占用和异常路径。把验证命令、预期结果和回滚方式写进变更记录,后续维护会轻松很多。

小结

好的工程实践不是堆叠工具,而是用清晰边界、可观察结果和可逆变更降低长期成本。先解决最重要的问题,再逐步自动化。

可执行实践

从用户可感知的可用性、延迟和错误率定义告警,再补充容量与饱和度。用 for 过滤短尖峰,Annotations 写清影响、仪表盘和处理手册。

验证与退出条件

用历史数据回放规则,确认阈值在正常高峰不误报、真实故障能及时触发。每月统计告警数量、确认时间和无行动告警,持续删减噪声。

实践场景

以“为订单接口设计能行动的告警”为例。实施前先保存当前版本、配置和关键指标基线,写明成功条件与停止条件;涉及生产数据或外部写入时,先在隔离环境验证。

分步实施

先从用户可见的错误率与延迟设告警,再补容量和依赖信号;表达式设置持续窗口并附上 runbook、owner 和看板链接。每完成一步都记录可观察结果,不把命令返回零等同于业务正确。

故障演练

回放短尖峰、持续失败和无流量场景,确认不会因瞬时噪声报警,也不会把无数据当健康。演练应使用可清理的测试数据,并验证告警、日志和恢复路径,而不只是确认系统最终又能访问。

观测与回滚

记录告警精确率、确认时长和静默次数;阈值变更可独立回退并保留历史对比。变更单中应写清负责人、观察窗口、阈值和回滚触发器,避免故障发生后再临时争论。

完成后把使用的版本、关键命令、观测窗口和结果写入变更记录。没有验证证据的“已完成”不能作为上线结论。

第二轮实践复核

可复用交付物: 告警规则、单元测试样本和 Runbook。复用时先固定软件版本、依赖锁文件、测试数据规模和运行环境;文章中的命令包含占位符,必须替换成自己的非生产目标后再执行。

最低验证: promtool check rules alerts.yml && promtool test rules alerts.test.yml

执行记录要保存命令、退出码、关键输出、观察窗口和回滚结果。若验证会产生写入,先使用隔离环境或 dry-run;任何失败都不能通过扩大权限、关闭校验或跳过测试来“解决”。

完整实战:用错误预算告警订单 API

假设订单 API 的可用性 SLO 为 30 天 99.9%,SLI 定义为“非预期 5xx 的请求比例”。告警不直接写“5 分钟错误率大于某个固定数”,而是比较当前消耗错误预算的速度,并组合长短窗口:短窗口发现剧烈故障,长窗口过滤瞬时噪声。

1
2
3
4
5
6
7
8
9
10
11
(
sum(rate(http_requests_total{service="order-api",status=~"5.."}[5m]))
/
sum(rate(http_requests_total{service="order-api"}[5m]))
) > (14.4 * 0.001)
and
(
sum(rate(http_requests_total{service="order-api",status=~"5.."}[1h]))
/
sum(rate(http_requests_total{service="order-api"}[1h]))
) > (14.4 * 0.001)

倍数和窗口只是演示,需按本项目 SLO、流量和通知响应时间推导。低流量路由还应设置最小请求量,避免一次失败触发毫无行动价值的百分比告警。

一条可执行告警包含什么

1
2
3
4
5
6
7
8
9
annotations:
summary: "订单 API 正在快速消耗错误预算"
impact: "部分用户可能无法创建或查询订单"
dashboard: "https://monitor.example.invalid/d/order-api"
runbook: "https://docs.example.invalid/runbooks/order-api-errors"
labels:
severity: page
service: order-api
owner: checkout

标签必须低基数且稳定,不要把 pod、异常文本或用户 ID 放进告警标签。runbook 应写首个只读检查、常见原因、止损动作、升级路径和验证恢复的查询。

演练 预期
单实例 5xx 聚合告警一次,能下钻到实例
短暂尖峰 短窗口变化但不持续通知
全区域故障 快速 page,路由到实际值班人
指标停止上报 独立“遥测缺失”信号,不误报服务健康
故障恢复 满足恢复窗口后自动解除并保留事件

用历史数据回放规则,统计本应触发和不应触发的时间段;上线先静默观察,再接低打扰渠道,最后才 page。每月检查告警量、有效率、确认时间、修复时间和无人负责的规则。临时静默必须有范围、原因和到期时间,不能通过永久加大阈值消除噪声。

一手资料

资料与版本边界复核日期:2026-08-22。工具行为可能演进,实施前以锁定版本对应的官方文档为准。

评论
分享

评论