3. SLO 定义与度量:SLI 指标选取、SLO 目标设定与违约阈值

在 Operator 控制面蓝图中,SLO(Service Level Objective)是连接用户期望与系统行为的契约。本章聚焦于如何为控制面核心组件选取正确的 SLI(Service Level Indicator),设定可量化的 SLO 目标,并定义违约阈值以触发资源边界处置动作。

3.1 SLI 指标选取:延迟、吞吐与错误率

控制面蓝图的 SLI 应覆盖三个黄金信号:延迟(Latency)、吞吐(Throughput) 和 错误率(Error Rate)。每个信号对应不同的控制面行为维度。

黄金信号 控制面典型指标 采集来源 说明
延迟 API Server 请求 P99 延迟、Reconciler 循环执行耗时 Prometheus Histogram / 链路追踪 反映控制面响应用户请求或调谐资源的速度
吞吐 每秒 API 请求数(QPS)、每秒调谐次数、Webhook 调用量 Prometheus Counter / Gauge 衡量控制面处理能力的上限与饱和度
错误率 API 请求 5xx 比例、Reconciler 失败次数、Webhook 拒绝率 Prometheus Counter / 日志指标 直接反映控制面健康状态与稳定性
实践建议: 对于 Operator 控制面,优先选取 Reconciler 循环 P99 延迟 和 API Server 请求错误率 作为核心 SLI。这两个指标直接反映控制面调谐能力与用户交互质量,且易于与资源边界处置策略联动。

3.2 SLO 目标设定:从基线到契约

SLO 目标不是凭空设定的,而是基于历史基线、业务容忍度和技术可行性综合得出的。设定过程应遵循以下步骤:

  1. 采集基线数据: 在正常负载下运行 Operator 至少 7 天,收集 SLI 的 P50、P95、P99 值。
  2. 定义目标窗口: 确定 SLO 评估的时间窗口(例如 30 天滚动窗口或 7 天滑动窗口)。
  3. 设定目标值: 在基线 P99 基础上增加 20%-50% 的余量作为初始 SLO 目标。
  4. 迭代校准: 根据实际违约频率和业务影响,每季度调整一次 SLO 目标。
SLI 指标 基线 P99 初始 SLO 目标 评估窗口
API Server 请求延迟 200ms ≤ 300ms (P99) 30 天滚动
Reconciler 循环延迟 500ms ≤ 800ms (P99) 7 天滑动
API 请求错误率 0.1% ≤ 0.5% 10 分钟窗口
Webhook 拒绝率 0.05% ≤ 0.2% 10 分钟窗口
常见陷阱: 不要将 SLO 目标设定得过于激进(如 P99 < 50ms),这会导致频繁违约和无效的资源边界处置。SLO 应反映“足够好”的服务质量,而非理论最优值。

3.3 违约阈值定义:多级触发与处置决策

违约阈值是 SLO 目标的具体量化边界。当 SLI 持续超过阈值时,系统应判定为 SLO 违约,并触发资源边界处置流程。建议采用 多级阈值 设计,避免单一阈值导致的抖动。

多级阈值模型:
  • 警告阈值(Warning): SLO 目标的 80% 水位线。触发告警但不执行自动处置。
  • 违约阈值(Breach): SLO 目标的 100% 水位线。触发自动资源边界处置(如扩容、限流)。
  • 严重违约阈值(Critical): SLO 目标的 150% 水位线。触发紧急处置(如重启组件、回滚配置)。

以下 SVG 展示了从 SLI 采集到违约处置的完整流程:

SLI 采集 → SLO 评估 → 违约阈值 → 资源边界处置流程 SLI 采集 指标聚合 SLO 评估 阈值判断 正常(无动作) 警告(告警) 违约(自动处置) 严重违约(紧急处置) 阈值说明: • 警告阈值:SLO 目标的 80% • 违约阈值:SLO 目标的 100% • 严重违约阈值:SLO 目标的 150%

3.4 违约窗口与燃烧率

仅靠瞬时阈值判断 SLO 违约容易产生误报。引入 违约窗口(Breach Window) 和 燃烧率(Burn Rate) 概念,可以更准确地评估 SLO 健康度。

  • 违约窗口: 定义 SLI 持续超过阈值的最小时间长度(例如连续 5 分钟)。只有窗口内持续违约才触发处置。
  • 燃烧率: 单位时间内 SLO 预算消耗的速度。燃烧率 = 1 表示按预期消耗,燃烧率 > 1 表示加速消耗。
燃烧率区间 含义 建议动作
0 - 0.5 SLO 预算充足,系统健康 常规监控
0.5 - 1.0 SLO 预算正常消耗 关注趋势
1.0 - 2.0 SLO 预算加速消耗 触发警告阈值,准备资源边界处置
> 2.0 SLO 预算快速耗尽 触发违约阈值,立即执行资源边界处置
Operator 控制面实践: 对于 Reconciler 循环延迟 SLI,建议设置违约窗口为 3 分钟,燃烧率超过 1.5 时触发自动扩容。这可以有效避免因瞬时负载尖峰导致的误处置。

3.5 与资源边界处置的联动

SLO 违约阈值直接驱动资源边界处置策略。以下 SVG 展示了不同违约等级对应的处置动作:

违约等级 → 资源边界处置映射 警告违约 违约 严重违约 告警通知 + 日志记录 自动扩容 + 限流降级 重启组件 + 回滚配置 处置原则: 1. 警告:仅通知,不自动干预 2. 违约:自动调整资源边界 3. 严重违约:强制恢复操作 4. 所有处置需记录审计日志
关键要点总结:
  • SLI 选取应覆盖延迟、吞吐、错误率三个黄金信号,优先关注 Reconciler 循环延迟和 API 错误率。
  • SLO 目标基于历史基线设定,保留 20%-50% 余量,并定期迭代校准。
  • 违约阈值采用多级设计(警告/违约/严重违约),结合违约窗口和燃烧率避免误判。
  • 不同违约等级对应不同的资源边界处置动作,从告警到自动扩容再到紧急恢复,形成完整的处置链路。