4. 基线定义与度量:系统基线、KPI/SLI 选取与阈值设定

在混沌工程实践中,系统基线是衡量系统健康状态的“标尺”。没有基线,混沌实验就失去了判断成功或失败的依据。本章将深入讲解如何定义基线、选取关键指标以及设定合理的阈值。

4.1 什么是系统基线

系统基线是指在正常生产负载下,系统各项可观测指标所呈现的稳定状态范围。它不是一个单一数值,而是一个包含时间窗口、统计分布和业务上下文的动态参考系。

核心观点: 基线不是“理想值”,而是“正常值”。混沌实验的目标是验证系统在故障注入后,能否恢复到基线范围内,而非追求零故障。

基线的建立通常包含以下三个步骤:

  1. 数据采集: 在无故障的“黄金时段”内,收集系统各层级的指标数据(如 CPU、内存、延迟、错误率)。
  2. 统计分析: 计算指标的均值、P50、P95、P99 分位数以及标准差,形成分布模型。
  3. 动态更新: 基线应随业务周期(如大促、版本发布)自动调整,避免使用过时的静态数据。
系统基线构成示意图 系统基线构成 数据采集 统计分析 动态基线 关键要素: • 时间窗口:通常取最近 7 天或 30 天的同一时段数据 • 统计口径:P50(典型值)、P95(轻度异常)、P99(严重异常) • 排除噪音:剔除已知故障窗口、计划内停机、压测数据

4.2 关键性能指标(KPI)与服务水平指标(SLI)的选取

KPI 和 SLI 是基线定义的核心。KPI 偏向业务视角,SLI 偏向技术视角。两者需要协同选取,才能全面反映系统状态。

4.2.1 KPI 与 SLI 的区别

维度 KPI(关键性能指标) SLI(服务水平指标)
关注点 业务价值与用户体验 技术系统内部状态
示例 订单成功率、支付转化率、页面加载时间 请求延迟 P99、错误率、CPU 使用率
受众 产品经理、业务方、管理层 开发、运维、SRE 工程师
混沌实验用途 判断故障是否影响业务 判断故障是否影响系统稳定性

4.2.2 选取原则

  • 可观测性: 指标必须能被持续采集,且采集成本可控。
  • 可量化: 避免主观描述,使用具体数值或比率。
  • 业务关联: 优先选取与用户直接体验相关的指标(如登录耗时、下单成功率)。
  • 覆盖全链路: 至少包含基础设施层、中间件层、应用层和业务层各一个指标。
实践建议: 对于混沌实验,建议选取 3~5 个核心 SLI 作为“黄金指标”。例如:延迟(Latency)、流量(Traffic)、错误(Errors)、饱和度(Saturation)——即 Google SRE 提出的“USE 方法”扩展。

4.3 基线阈值设定方法

阈值是基线的“警戒线”。设定过严会导致误报,过松则无法发现真实问题。以下是三种常用的阈值设定方法。

4.3.1 方法对比

方法 原理 适用场景 优点 缺点
固定阈值 根据经验或 SLA 设定固定数值 延迟、错误率等稳定指标 简单直观,易于理解 无法适应业务波动
动态阈值(3σ) 基于历史数据的均值 ± 3 倍标准差 CPU、内存等周期性指标 自动适应负载变化 对突发噪音敏感
分位数阈值 设定 P95 或 P99 作为上限 延迟分布不均匀的场景 排除极端值干扰 需要较大数据样本

4.3.2 动态阈值计算示例(Python)

import numpy as np

def calculate_dynamic_threshold(metric_values, multiplier=3):
    """
    基于 3σ 原则计算动态阈值
    :param metric_values: 历史指标数据列表
    :param multiplier: 标准差倍数,默认 3
    :return: (下限, 上限)
    """
    mean = np.mean(metric_values)
    std = np.std(metric_values)
    lower = mean - multiplier * std
    upper = mean + multiplier * std
    return round(lower, 2), round(upper, 2)

# 示例:CPU 使用率历史数据
cpu_data = [45.2, 48.1, 50.3, 47.8, 52.0, 46.5, 49.9]
low, high = calculate_dynamic_threshold(cpu_data)
print(f"CPU 基线范围: {low}% ~ {high}%")
# 输出: CPU 基线范围: 40.12% ~ 56.68%
三种阈值设定方法对比 阈值设定方法对比 固定阈值 设定:延迟 < 200ms 错误率 < 1% 优点:简单,适合 SLA 硬约束 动态阈值 (3σ) 设定:均值 ± 3σ 自动适应负载变化 优点:适合周期性指标 分位数阈值 设定:P99 < 500ms 排除极端值干扰 优点:适合长尾分布 选择建议 固定阈值 + 动态阈值组合使用:固定阈值用于硬性 SLA,动态阈值用于日常监控

4.4 基线核验流程

在混沌实验中,基线核验分为实验前、实验中、实验后三个阶段:

  • 实验前: 确认当前系统指标是否在基线范围内。若已偏离基线,则需先排查问题,不执行实验。
  • 实验中: 持续监控指标变化,记录偏离基线的幅度和持续时间。
  • 实验后: 验证系统是否自动恢复到基线范围内。若无法恢复,则实验失败,需触发告警或回滚。
常见误区: 不要将基线阈值设定为“固定死线”。例如,将 CPU 使用率阈值设为 80%,但业务高峰期正常值就是 85%,此时应使用动态阈值或分位数阈值来避免误报。

4.5 本章小结