4. 异常检测基础:什么是异常检测、异常检测在SRE中的价值、常见异常类型(突增、突降、抖动、平头)
4.1 什么是异常检测
异常检测(Anomaly Detection)是指通过统计学、机器学习或规则引擎,从时序指标数据中识别出与预期行为模式显著偏离的数据点或数据段。在 SRE 领域,异常检测的核心目标是:在用户感知之前,发现系统状态的异常变化。
核心公式: 异常 = 观测值 − 预期值 > 阈值(或置信区间边界)
异常检测不是简单的“超过固定阈值就报警”。它需要动态理解指标的周期性、趋势性和季节性特征,从而区分“正常波动”与“真实异常”。
4.2 异常检测在SRE中的价值
| 价值维度 | 说明 | 典型场景 |
|---|---|---|
| 缩短MTTD | 自动发现异常,减少人工巡检和被动投诉 | 错误率突增、延迟飙升 |
| 减少误报 | 区分业务高峰与真实故障,降低告警疲劳 | 双11大促 vs 服务雪崩 |
| 容量预警 | 在资源耗尽前发现增长趋势异常 | 磁盘使用率、连接池耗尽 |
| 根因定位辅助 | 多指标异常关联,缩小排查范围 | CPU + 延迟 + 错误率同时异常 |
| 自动化运维基础 | 异常检测是自动扩缩容、自愈流程的触发信号 | HPA触发、故障自愈 |
经验法则: 一个成熟的 SRE 团队,异常检测应覆盖 80% 以上的核心黄金信号指标,且误报率应控制在 5% 以下。
4.3 常见异常类型
时序指标异常通常表现为四种基本形态。理解这些形态是设计检测算法的前提。
4.3.1 突增(Spike)
指标值在短时间内急剧上升,超出正常波动范围。常见于流量突增、缓存失效、代码缺陷导致重复请求等场景。
- 特征: 上升幅度大、持续时间短(秒级到分钟级)
- 典型指标: 请求量、错误率、CPU使用率
- 检测难点: 与正常业务高峰难以区分,需要结合历史同期对比
4.3.2 突降(Drop)
指标值在短时间内急剧下降,通常意味着服务不可用、流量丢失或采集故障。
- 特征: 下降幅度大、可能持续到恢复操作完成
- 典型指标: 成功请求数、活跃连接数、吞吐量
- 检测难点: 零值或低值可能被静态阈值忽略,需要动态基线
4.3.3 抖动(Jitter / Flapping)
指标在短时间内频繁上下波动,呈现“锯齿状”形态。通常反映系统不稳定、资源竞争或网络抖动。
- 特征: 高频振荡、振幅可能不大但持续存在
- 典型指标: 延迟P99、GC暂停时间、网络重传率
- 检测难点: 单点阈值难以捕捉,需要检测波动频率或方差变化
4.3.4 平头(Flatline / Level Shift)
指标值突然变为恒定值(通常为零或某个固定值),失去正常波动。通常意味着采集中断、服务挂起或死锁。
- 特征: 方差趋近于零、数值长时间不变
- 典型指标: 心跳、活跃线程数、队列深度
- 检测难点: 需要区分“正常空闲”与“异常停滞”
4.4 异常检测在容量压测中的特殊意义
在容量压测场景下,异常检测的目标从“发现故障”转变为“发现性能拐点”。压测过程中,指标从线性增长变为非线性增长的点,就是容量瓶颈点。
| 压测阶段 | 异常检测关注点 | 典型异常形态 |
|---|---|---|
| 低负载阶段 | 基线建立,排除初始异常 | 偶发抖动(环境预热) |
| 线性增长阶段 | 验证指标与负载呈线性关系 | 突增(资源竞争开始) |
| 拐点附近 | 发现延迟/错误率突增点 | 突增 + 抖动(临界状态) |
| 过载阶段 | 确认系统保护机制是否生效 | 平头(限流/熔断)或突降(崩溃) |
常见误区: 压测时只关注“是否超过固定阈值”,而忽略了指标从“平稳”到“异常”的转变过程。真正的容量水位线应该定义在异常发生前的那个数据点,而不是异常发生后的报警点。
4.5 异常检测的典型工作流程
- 数据采集与预处理: 去噪、填充缺失值、重采样到统一时间粒度
- 基线建模: 根据历史数据建立动态基线(周期 + 趋势 + 残差)
- 异常评分: 计算观测值与基线的偏差程度(如 z-score、偏离百分比)
- 阈值判定: 将异常评分与动态/静态阈值比较,输出异常标签
- 告警收敛: 去重、聚合、抑制,避免告警风暴
- 反馈闭环: 人工确认结果反馈回模型,持续优化检测精度
4.6 异常检测的常见挑战与应对
| 挑战 | 表现 | 应对策略 |
|---|---|---|
| 季节性波动 | 白天高、夜晚低,周末与工作日不同 | 使用STL分解或Prophet建模周期性 |
| 趋势漂移 | 业务增长导致指标长期缓慢上升 | 动态基线 + 趋势分量分离 |
| 突发噪声 | 偶发尖刺但非真实故障 | 中位数滤波、连续异常计数 |
| 多指标关联 | 单指标正常但组合异常 | 多维度异常检测(如PCA、Hotelling T²) |
| 冷启动 | 新服务无历史数据 | 静态阈值 + 自适应学习期 |
最佳实践: 在 Metric Design 阶段,就为每个指标定义其“预期行为模式”(周期/趋势/噪声水平),这能大幅降低后续异常检测算法的调参成本。