告警设计入门:怎么定阈值、怎么分级,才不吵又不漏
监控上线第一周,群里被告警刷屏;一个月后,大家都学会了"已读不回"。这就是告警设计失败的典型:告警疲劳。反过来,为了不吵把阈值调得过高,故障又会在用户投诉后才被发现。好的告警设计要同时做到"不吵"(有效信息)和"不漏"(关键故障必达)。本文讲清三件事:阈值怎么定、分级怎么做、闭环怎么跑,并附一组可直接照抄的规则示例。
一、阈值怎么定:别拍脑袋
阈值定太低,天天误报;定太高,真出事也不知道。三个实用方法:
- 基线法:先跑 1-2 周只采集不告警,观察指标的"正常波动区间",再把阈值设在区间之外留出缓冲。比如 CPU 平时 20%-40% 波动,阈值定 80% 就合理;定 45% 就会天天响。
- 双阈值法(预警+严重):比如磁盘 >80% 发"预警"通知,>90% 才"严重"告警。给处理留出缓冲时间,避免一上来就最高级别。
- 持续时间法:单次瞬时超过阈值可能是抖动,加上"持续 5 分钟"才触发。例如"CPU >90% 持续 10 分钟"比"CPU >90%"可靠得多,可过滤绝大多数瞬时毛刺。
一个原则:告警要能落在"你可以做点什么"的地方。如果收到告警后只能看着、什么都做不了,这个告警就是噪音。
二、告警分级 P1-P4:让"紧急"真的紧急
把所有告警混在一个级别,等于没有级别。通用分级如下:
| 级别 | 含义 | 示例 | 响应要求 |
|---|---|---|---|
| P1 | 核心服务不可用/数据损坏 | 网站全挂、支付失败率飙升 | 立即响应,15 分钟内介入 |
| P2 | 功能受损但未全挂 | 单个接口 5xx 率升高、慢查询 | 工作时间 1 小时内介入 |
| P3 | 影响有限/潜在风险 | 磁盘 >80%、证书将过期 | 工作日当天处理 |
| P4 | 提示性信息 | 负载偶尔升高、访问量变化 | 记录观察,不强制立即处理 |
关键点:P1/P2 走电话/短信等强提醒,P3/P4 走群消息/邮件等弱提醒。别让"明天再处理"的事半夜把值班人吵醒——把 P3/P4 的通知时间窗设成工作时间。
三、避免告警疲劳的五个动作
- 告警去重:同一故障不要反复触发同一条告警。例如"错误率 >5%"每 5 分钟查一次,触发后应"静默",等恢复再重置,而不是每小时刷 12 条。
- 分组与路由:把告警按团队/系统分组(基础设施、支付、营销),只通知相关的人;谁负责的才发给谁。
- 抑制与依赖:服务器挂了会连带几十条服务告警——用"父告警抑制子告警":主机不可达时,其上的所有服务告警自动抑制。
- 分级降噪:用 P1-P4 分级决定通知渠道和对象,见上表。
- 定期评审:每月看一次告警统计,删掉"从未行动过"的规则,修正反复误报的阈值。
告警疲劳的完整治理与值班机制,见告警疲劳与值班实践。
四、告警→通知→响应:闭环才算数
一条告警只有走完"产生 → 通知 → 有人响应 → 处理 → 关闭 → 复盘"整个闭环才有价值。落地要点:
- 产生:规则触发,带上足够上下文(哪台机器、哪个指标、当前值、时间)。
- 通知:按级别走对应渠道(P1 电话/短信,P3 群消息),消息里写清"是什么、影响多大、先看哪里"。
- 响应:有人认领(acknowledge),超时未认领自动升级(如 15 分钟没响应,通知主管)。
- 处理:按预案操作;事件复盘模板见事件响应手册。
- 关闭与复盘:确认恢复后关闭,事后记录"为什么会发生、告警有没有漏、阈值合不合理"。
另一个进阶概念:给告警绑定 SLO(服务等级目标),只对"会影响 SLO 的故障"告警,能显著降低噪音,详见SLO 与错误预算实践。
五、告警规则示例:可直接照抄
以 Prometheus 语法风格为例(具体字段随平台略有差异):
- name: infra-critical
rules:
- alert: DiskWillFill
expr: disk_usage_percent > 90
for: 5m
labels: { severity: P2 }
annotations:
summary: "磁盘使用率超过 90%(当前 {{ $value }}%)"
runbook: "清理日志或扩容,步骤见 wiki/DiskRunbook"
- alert: High5xxRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
for: 3m
labels: { severity: P1 }
annotations:
summary: "5xx 错误率超过 5%"
runbook: "查看最近发布与错误日志"
- alert: ApiLatencyP99High
expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) > 2
for: 5m
labels: { severity: P2 }
annotations:
summary: "接口 P99 延迟超过 2 秒"
三条例子分别覆盖:容量(磁盘)、可靠性(错误率)、体验(延迟)。更完整的规则设计方法论见Prometheus 告警规则设计,搭建整套监控报警见Prometheus + Grafana 基础。
六、常见问题
Q1:没有专人值班,告警设计还要做分级吗?
要,甚至更重要。个人或小团队没有值班,分级决定"这条要不要半夜爬起来"。P3/P4 设成工作时间通知,能保住睡眠,也不会漏掉真故障。
Q2:怎么判断告警设计是否健康?
看两个数字:告警量趋势(应下降或稳定)和漏报事件数(用户先于你发现的问题)。最好的告警是"想起来的少,但每次都有用"。
Q3:误报太多,直接调高阈值行吗?
先找误报根因(是阈值问题、采集问题还是抖动),再决定。直接调高阈值会把真故障一起"调没"。建议配合持续时间法和双阈值法。
Q4:更多监控报警内容去哪看?
本站监控报警分类下有监控搭建、指标体系、SLO 等完整体系,可与本文化为一条学习路径。