告警、SLI 与 SLO¶
告警的目标是让值班人员处理会影响用户或即将耗尽恢复空间的问题,不是把所有异常指标都发送到群里。无法行动、无负责人、无说明的告警只会制造噪声。
从服务目标开始¶
| 概念 | 含义 | 示例 |
|---|---|---|
| SLI | 实际测量的服务质量 | 成功请求数 / 有效请求数 |
| SLO | 目标水平和时间窗口 | 30 天成功率 99.9% |
| Error Budget | 目标允许的失败空间 | 30 天约 43.2 分钟不可用预算 |
| SLA | 对外合同承诺 | 可能包含赔偿和排除项 |
SLO 应从用户体验定义。Pod 存活率通常不是好的业务 SLI,因为 Pod 全部 Running 时,登录或支付仍可能失败。
告警分层¶
Prometheus 告警示例¶
groups:
- name: service-slo
rules:
- alert: ServiceHighErrorRate
expr: |
sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m])) by (service)
/
sum(rate(http_server_requests_seconds_count[5m])) by (service)
> 0.05
for: 10m
labels:
severity: page
annotations:
summary: "{{ $labels.service }} 5xx 错误率持续高于 5%"
runbook_url: "https://runbook.example.com/service-high-error-rate"
规则提交前运行 promtool check rules,并用历史数据验证是否频繁误报。
Alertmanager 路由¶
Alertmanager 负责聚合、去重、路由、静默和抑制。标签至少要能决定团队、环境、严重级别和服务。节点断联时可抑制该节点上大量派生告警,但不能用长期 Silence 隐藏未解决问题。
一条高质量告警¶
- 描述用户影响,而不只是阈值。
- 包含服务、环境、范围、当前值和持续时间。
- 关联 Dashboard、日志/Trace 查询和 Runbook。
- 明确负责人和升级路径。
- 恢复条件稳定,避免频繁 Firing/Resolved。
- 定期回顾是否被处理、是否真正有用。
Prometheus 官方建议优先对用户症状告警,并避免没有可执行动作的通知。参见告警实践和 Alertmanager 概览。