1. SLO 基础概念:什么是 SLO、SLI、SLA,三者的区别与联系

在构建自动化故障响应体系之前,必须首先理解三个核心度量指标:SLI(Service Level Indicator,服务等级指标)、SLO(Service Level Objective,服务等级目标)和 SLA(Service Level Agreement,服务等级协议)。这三者构成了从“测量”到“承诺”的完整链路,也是后续所有告警阈值、自愈策略和故障降级的数学基础。

1.1 核心定义

术语 英文全称 核心定义 典型示例
SLI Service Level Indicator 对服务某个维度(如延迟、错误率、吞吐量)的实际测量值,是原始数据。 过去 5 分钟 P99 延迟 = 120ms
SLO Service Level Objective 对 SLI 设定的目标阈值,是团队内部承诺的“好服务”边界。 P99 延迟 ≤ 200ms,每月 99.9% 的时间满足
SLA Service Level Agreement 与客户或业务方签订的正式合同条款,通常附带经济惩罚或补偿。 P99 延迟 ≤ 500ms,每月 99.5% 的时间满足,否则赔偿 10% 月费
关键认知: SLO 是内部工程目标,通常比 SLA 更严格(SLO 阈值 < SLA 阈值),为故障响应预留了“燃烧预算”缓冲空间。

1.2 三者的区别与联系

三者的关系可以用“测量 → 目标 → 承诺”的递进链条来理解。SLI 是原始观测数据,SLO 是基于 SLI 设定的内部质量红线,SLA 则是将 SLO 转化为对外的商业契约。

  • SLI → SLO: 从“实际值”到“期望值”的转化。例如,将“请求延迟”这个 SLI 设定为“99% 的请求在 200ms 内完成”这个 SLO。
  • SLO → SLA: 从“内部目标”到“外部承诺”的转化。SLA 通常比 SLO 宽松,因为需要预留安全边际,避免因内部波动直接触发赔偿。
  • SLA 依赖 SLO: 没有 SLO 的 SLA 是盲目的。SLA 的阈值和持续时间必须基于 SLO 的历史数据和燃烧速率来制定。
工程实践建议: 建议将 SLO 设置为 SLA 的 70%-80%。例如,如果 SLA 要求 99.9% 可用性,内部 SLO 应设为 99.95% 或更高,这样即使 SLO 短暂被违反,仍有缓冲空间避免 SLA 违约。

1.3 为什么 SLO 是自动化故障响应的基石?

自动化故障响应(告警自愈)的核心逻辑是:当系统状态偏离预期时,自动触发纠正动作。而“预期”的数学定义正是 SLO。没有 SLO,告警阈值只能靠“拍脑袋”,自愈动作也无法量化评估效果。

SLO 在自动化故障响应中扮演三个关键角色:

  1. 定义“故障”的数学边界: 故障不再是“系统挂了”这种二元状态,而是“SLI 违反 SLO 的持续时间或燃烧速率”。例如,错误率 SLI 超过 SLO 阈值持续 5 分钟,即定义为一次“事件”。
  2. 提供自愈触发与终止条件: 自愈动作的启动条件 = SLI 进入 SLO 燃烧预算的“危险区”;自愈动作的终止条件 = SLI 恢复到 SLO 安全范围内。
  3. 量化自愈效果: 通过对比自愈前后的 SLI 恢复时间(MTTR)和 SLO 燃烧速率,可以客观评估自动化策略的有效性。
常见误区: 不要将告警阈值直接设置为 SLO 边界。SLO 是长期统计目标,而告警需要更灵敏的“燃烧速率”检测。例如,SLO 是“月度 99.9%”,告警应在“过去 10 分钟燃烧速率达到月度预算的 10%”时触发,而不是等到月底才发现 SLO 被违反。

1.4 从 SLI 到 SLO 再到告警自愈的链路

下图展示了 SLI 采集、SLO 计算、燃烧速率告警与自愈动作之间的完整数据流:

SLI → SLO → 告警自愈链路图 SLI → SLO → 告警自愈链路 SLI 采集 延迟 / 错误率 / 吞吐量 SLO 计算 月度 99.9% / 燃烧预算 燃烧速率检测 窗口 10min / 消耗预算 10% 告警触发 → 自愈动作 自动扩容 / 流量切换 / 重启 / 降级 反馈:SLI 恢复验证 链路说明: 1. 系统持续采集 SLI(延迟、错误率等原始指标)。 2. 将 SLI 聚合为 SLO 燃烧预算,定义“好服务”与“坏服务”的边界。 3. 当燃烧速率超过阈值时,触发告警并执行自愈动作。 4. 自愈完成后,重新检测 SLI 是否回到 SLO 安全区,形成闭环。

1.5 SLO 燃烧预算:自动化决策的量化依据

SLO 燃烧预算(Error Budget)是连接 SLO 与自动化故障响应的核心桥梁。它将抽象的“可用性百分比”转化为可消耗的“时间预算”或“错误次数预算”。

燃烧预算的计算公式:

Error Budget = (1 - SLO) × 总时间窗口

示例:
SLO = 99.9%(月度)
总时间窗口 = 30天 × 24小时 × 60分钟 = 43200 分钟
Error Budget = (1 - 0.999) × 43200 = 43.2 分钟

含义:整个月内,系统最多允许 43.2 分钟的“坏服务”时间。

自动化故障响应系统通过监控“燃烧速率”(即单位时间内消耗的 Error Budget 比例)来决定告警优先级和自愈策略的激进程度:

燃烧速率等级 消耗预算比例(10分钟窗口) 告警级别 推荐自愈动作
正常 < 2% 无 无需动作
警告 2% - 5% P3 自动扩容 / 预热缓存
严重 5% - 10% P2 流量切换 / 重启异常实例
危急 > 10% P1 全自动降级 / 回滚 / 限流
核心原则: 燃烧速率越快,自愈动作的侵入性可以越大。因为快速消耗 Error Budget 意味着如果不立即干预,SLO 将在短时间内被彻底违反。自动化系统应基于燃烧速率动态调整自愈策略的“激进程度”。

1.6 本章小结

SLI、SLO、SLA 构成了服务可靠性管理的度量金字塔。SLI 是原始数据,SLO 是内部目标,SLA 是外部承诺。SLO 之所以成为自动化故障响应的基石,是因为它提供了:

  • 明确的故障定义: 不再是模糊的“系统挂了”,而是“SLI 违反 SLO 阈值”。
  • 量化的决策依据: 燃烧预算和燃烧速率决定了告警的优先级和自愈动作的强度。
  • 闭环的验证标准: 自愈是否成功,取决于 SLI 是否恢复到 SLO 安全范围内。