1. SLO 基础概念:定义 SLO、SLI、错误预算

在可靠性工程与 Kubernetes 容器编排的联动实践中,SLO(Service Level Objective)是衡量服务健康状态的核心契约。理解 SLO 及其关联概念 SLI 和错误预算,是构建自愈剧本的前提。

1.1 核心术语定义

术语 英文全称 定义 示例
SLI Service Level Indicator 服务质量的量化指标,直接反映用户体验 请求延迟 P99 ≤ 200ms
SLO Service Level Objective SLI 的目标阈值,是团队与用户之间的可靠性承诺 99.9% 的请求延迟 ≤ 200ms
错误预算 Error Budget 1 - SLO,表示允许服务不可靠的时间或次数 99.9% SLO → 0.1% 错误预算
关键理解:SLI 是“测量什么”,SLO 是“目标是多少”,错误预算则是“允许犯多少错”。三者构成可靠性管理的闭环。

1.2 SLO 在可靠性工程中的核心地位

SLO 不仅是技术指标,更是业务决策的锚点。它决定了:

  • 故障响应优先级:消耗错误预算的速度决定是否触发告警或自愈动作。
  • 发布节奏控制:错误预算充足时允许快速迭代;不足时冻结变更。
  • 资源投入依据:SLO 达标率指导扩容、架构优化或混沌实验的投入方向。
核心公式:错误预算 = 1 - SLO(以百分比计)。例如 SLO = 99.9%,则每月(43200 分钟)允许宕机 43.2 分钟。

1.3 SLI 的常见类型与采集方式

SLI 类型 描述 Kubernetes 采集方式
延迟(Latency) 请求处理时间,通常用 P50/P95/P99 衡量 Prometheus Histogram + Istio/Envoy 指标
流量(Traffic) 系统承载的请求量或吞吐量 Kubernetes Metrics Server / Kube-state-metrics
错误(Errors) HTTP 5xx、超时、异常比例 Prometheus Counter + 应用日志
饱和度(Saturation) 资源使用程度(CPU、内存、连接数) Node Exporter / cAdvisor

1.4 SLO 与错误预算的联动关系

错误预算的消耗速率直接驱动自愈决策。当错误预算快速下降时,系统应自动触发 Kubernetes 层面的弹性伸缩、Pod 重启或流量切换。

# 错误预算消耗速率计算示例(PromQL)
# 过去 1 小时错误预算消耗百分比
(1 - (sum(rate(http_requests_total{status=~"5.."}[1h])) / sum(rate(http_requests_total[1h])))) / 0.999 * 100
实践注意:错误预算不应仅用于告警,更应作为 Kubernetes 自愈剧本的输入信号。例如:当错误预算剩余 < 20% 时,自动触发 HPA 扩容或 Pod 驱逐。

1.5 SLO 生命周期与自愈触发

SLO 生命周期与自愈触发流程 SLI 采集 延迟/错误/饱和度 SLO 计算 与目标阈值对比 错误预算 消耗速率监控 阈值判断 错误预算 < 20%? 自愈动作 HPA/重启/流量切换 反馈闭环 更新 SLO 目标 说明 虚线表示反馈回路 持续优化 SLO 阈值

1.6 错误预算驱动的自愈决策矩阵

错误预算剩余 消耗速率 自愈动作 Kubernetes 操作
> 50% 正常 无动作,持续监控 —
20% ~ 50% 加速 预扩容、Pod 健康检查 HPA 扩容副本数、重启异常 Pod
< 20% 快速消耗 强制自愈、流量切换 Pod 驱逐、Service 流量切换至备用集群
< 5% 临界 紧急降级、熔断 触发 Circuit Breaker、限流、降级非核心服务
最佳实践:在 Kubernetes 中,将错误预算暴露为自定义指标(Custom Metrics),通过 HPA 或 Operator 直接驱动自愈剧本,实现从“监控告警”到“自动修复”的闭环。