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