核心概念:SLO、SLI、SLI与告警阈值的关系、错误预算
在构建可靠的告警体系与压力测试异常响应流程之前,必须统一团队对服务可靠性的度量语言。SLO、SLI 与错误预算正是这套语言的核心词汇。理解它们之间的逻辑关系,是制定科学告警阈值的前提。
2.1 什么是 SLI(Service Level Indicator,服务等级指标)
SLI 是对服务某个特定维度的直接量化测量值。它回答的是“服务现在表现如何”这个事实性问题。
- 常见 SLI 类型:
- 延迟(Latency):如 95% 请求在 200ms 内完成。
- 错误率(Error Rate):如 HTTP 5xx 响应占总请求的百分比。
- 吞吐量(Throughput):如每秒处理的请求数(RPS)。
- 可用性(Availability):如服务成功响应请求的时间占比。
- 测量方式:通常通过服务端埋点、负载均衡器日志或客户端合成监控采集。
实践要点:选择 SLI 时应遵循“用户视角”原则。例如,用户感知的延迟是端到端延迟,而非仅服务端处理时间。错误的 SLI 选择会导致告警与用户体验脱节。
2.2 什么是 SLO(Service Level Objective,服务等级目标)
SLO 是为 SLI 设定的目标阈值或目标范围。它回答的是“我们希望服务表现成什么样”这个期望性问题。SLO 是团队与业务方达成的内部契约。
| 维度 | SLI 示例 | SLO 示例 |
|---|---|---|
| 延迟 | P99 延迟 | P99 延迟 ≤ 500ms,在 99.9% 的滚动窗口内满足 |
| 错误率 | HTTP 5xx 占比 | 错误率 ≤ 0.1%,在 99.5% 的滚动窗口内满足 |
| 可用性 | 成功响应时间占比 | 月度可用性 ≥ 99.99% |
关键区别:SLO 比 SLA(Service Level Agreement,服务等级协议)更严格。SLA 是面向客户的对外承诺,通常比内部 SLO 宽松(例如 SLO 为 99.99%,SLA 可能为 99.9%),以预留安全缓冲。
2.3 SLI 与告警阈值的关系
告警阈值并非直接等于 SLO 边界。合理的告警阈值设计应遵循“燃烧速率”原则,在 SLO 被违反之前提前预警。
- 直接关系:告警阈值通常基于 SLI 的短期窗口(如 5 分钟、10 分钟)设定,而 SLO 基于长期窗口(如 30 天、季度)评估。
- 设计原则:
- 多级阈值:设置 Warning(警告)和 Critical(严重)两级阈值。
- 燃烧速率告警:当错误预算消耗速度超过预期时触发告警,而非仅当 SLI 超过 SLO 时才告警。
常见误区:直接将 SLO 的 99.9% 可用性作为告警阈值。当 SLI 跌至 99.9% 时,错误预算可能已耗尽,此时告警为时已晚。正确做法是设置更严格的阈值(如 99.95%),提前介入。
2.4 错误预算(Error Budget)的概念
错误预算 = 1 - SLO。它表示服务在 SLO 允许范围内可以出现故障或性能下降的时间总量。
- 计算示例:
- 若 SLO 为 99.9%(月度),则错误预算 = 0.1% × 30 天 × 24 小时 × 60 分钟 = 43.2 分钟/月。
- 若 SLO 为 99.99%(季度),则错误预算 = 0.01% × 90 天 × 24 小时 × 60 分钟 = 12.96 分钟/季度。
- 核心作用:
- 决策依据:当错误预算充足时,团队可以更激进地发布新功能或进行架构变更;当错误预算紧张时,应冻结发布,优先提升稳定性。
- 告警触发:基于错误预算消耗速率的告警(如“过去 1 小时消耗了 10% 的月度错误预算”)比基于 SLI 绝对值的告警更早发现问题。
核心公式:
错误预算 = 1 - SLO
错误预算消耗率 = (1 - 当前 SLI) / (1 - SLO) × 100%
当消耗率超过预设阈值(如 10%/小时)时,触发告警。
2.5 四者关系总结
| 概念 | 本质 | 时间窗口 | 与告警的关系 |
|---|---|---|---|
| SLI | 实时测量值 | 短(秒/分钟) | 告警的直接数据源 |
| SLO | 长期目标 | 长(月/季度) | 告警阈值的参考基准 |
| 告警阈值 | 短期预警边界 | 短(分钟/小时) | 基于 SLI 和 SLO 的燃烧速率计算 |
| 错误预算 | 可容忍的故障总量 | 与 SLO 一致 | 告警优先级和响应策略的决策依据 |
最佳实践:在压力测试场景中,应同时监控 SLI 的实时变化和错误预算的消耗速率。当压力测试导致错误预算消耗速率超过 10%/小时时,即使 SLI 尚未跌破 SLO,也应视为异常并启动响应流程。