深色模式
基于 SLO 的告警
摘要:传统“CPU>80% 就告警”常常误报。基于 SLO 的告警关注“还会不会达标”:用多窗口燃尽率判断错误预算消耗速度,只在真正威胁 SLO 时才叫人。
适用环境
- 已定义好 SLI/SLO(如 99.9% 可用性)
- Prometheus 能算
错误率 = 错误请求 / 总请求
操作步骤
1. 算错误率
promql
# 请求成功率(示例:HTTP)
sum(rate(http_requests_total{code!~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))1
2
3
4
2
3
4
2. 用快速燃尽率告警
yaml
groups:
- name: slo
rules:
- alert: SloBurnFast
# 14.4 = 1h 烧光 30d 预算的速率阈值
expr: |
(1 - (sum(rate(http_requests_total{code!~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])))) > (1 - 0.999) * 14.4
for: 2m
labels:
severity: critical
annotations:
summary: "SLO 快速燃尽,1 小时内可能烧光预算"1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
3. 配合慢速窗口减少抖动
yaml
- alert: SloBurnSlow
expr: |
(1 - (sum(rate(http_requests_total{code!~"5.."}[1h]))
/ sum(rate(http_requests_total[1h])))) > (1 - 0.999) * 6
for: 15m
labels:
severity: warning1
2
3
4
5
6
7
2
3
4
5
6
7
DANGER
14.4、6 这类系数依赖你定的 SLO 与窗口,照搬别人的数字会不匹配;用 MWMB 公式(见 SLO 分类)反推。
验证
bash
amtool alert add alertname=SloBurnFast severity=critical
amtool config routes test alertname=SloBurnFast severity=critical
# 在 Grafana 用 burnrate 函数验证速率1
2
3
2
3
常见坑
WARNING
- 只配快速窗口会有抖动误报,必须“快速+慢速”双窗口配合(见 SLO 分类多窗口多燃尽告警)。
- 错误预算耗尽后还继续告警没意义,应切换为“停止发布”策略。