3. 异常检测基础:定义、常见类型与检测方法概述
异常检测是可观测性体系中“发现未知故障”的第一道防线。与基于静态阈值的告警不同,异常检测旨在从时序数据中自动识别偏离正常行为模式的观测点,从而在用户感知之前捕获系统隐患。本节将系统梳理异常检测的核心定义、四大常见异常类型以及主流检测方法的技术选型逻辑。
3.1 异常检测定义
在 Metric 可观测性语境下,异常检测是指:通过统计或机器学习方法,对时序指标(如 QPS、P99 延迟、错误率、CPU 使用率)建立正常行为基线,并实时判断当前观测值是否显著偏离该基线的过程。
关键公式(Z-Score 基础模型)
Z = (X - μ) / σ
其中:
X = 当前观测值
μ = 滑动窗口内的均值(基线)
σ = 滑动窗口内的标准差
|Z| > 3 → 通常判定为异常(3σ 原则)
实际生产环境中,基线 μ 和 σ 需考虑周期性(日/周/月)与趋势成分,避免将正常业务高峰误报为异常。
3.2 常见异常类型
根据时序曲线的形态变化,异常可归纳为四种典型模式。理解这些模式是设计检测算法和 MTTR 复盘口径的前提。
| 异常类型 | 定义 | 典型场景 | MTTR 复盘关注点 |
|---|---|---|---|
| 突增 (Spike) | 指标在短时间内急剧上升,超出基线上限 | 流量突增、缓存穿透、DDoS 攻击 | 触发时间、扩容响应、限流生效时间 |
| 突降 (Drop) | 指标在短时间内急剧下降,跌破基线下限 | 服务宕机、网络分区、上游依赖中断 | 故障发现延迟、恢复操作耗时 |
| 抖动 (Jitter) | 指标在短时间内频繁、不规则地上下波动 | GC 抖动、网络重传、资源争抢 | 抖动频率、根因定位难度、临时止血措施 |
| 漂移 (Drift) | 指标长期缓慢偏离基线,呈单调上升或下降趋势 | 内存泄漏、数据量持续增长、慢查询累积 | 趋势拐点、容量规划、代码/配置变更关联 |
实战建议:在 MTTR 复盘时,应首先确认异常类型。突增/突降通常对应明确的故障事件,MTTR 以分钟计;抖动和漂移往往需要更长的根因分析链路,复盘口径应包含“首次抖动时间”和“漂移开始时间”两个关键时间戳。
3.3 异常检测方法概述
异常检测方法的选择直接影响检测延迟、误报率和运维成本。以下从工程落地角度,将主流方法分为三类进行对比。
3.3.1 方法分类与对比
| 方法类别 | 代表算法 | 适用异常类型 | 计算开销 | 可解释性 | 生产推荐度 |
|---|---|---|---|---|---|
| 统计方法 | 3σ、MAD、IQR、EWMA | 突增、突降 | 低 | 高 | ★★★★★ |
| 时间序列分解 | STL、Prophet、移动平均分解 | 漂移、周期性异常 | 中 | 中 | ★★★★☆ |
| 机器学习方法 | Isolation Forest、LOF、Autoencoder | 抖动、复杂多维异常 | 高 | 低 | ★★★☆☆ |
3.3.2 检测流程与选型逻辑
一个生产级的异常检测系统通常遵循以下流水线:
- 数据预处理:填充缺失值、去除毛刺、重采样对齐。
- 基线建模:根据指标周期(如 7 天同时间窗口)计算 μ 和 σ,或训练分解模型。
- 异常评分:计算当前点与基线的偏离程度(Z-Score、残差、密度距离)。
- 阈值判定:静态阈值 + 动态阈值结合,减少误报。
- 告警抑制:连续 N 个点异常才触发告警,避免毛刺干扰。
避坑提示:不要对所有指标使用同一套检测参数。QPS 适合用统计方法 + 短窗口;内存使用率适合用漂移检测 + 长窗口;错误率适合用突增检测 + 低阈值。MTTR 复盘时,如果发现检测延迟过高,应优先检查基线窗口长度和告警抑制策略是否合理。
3.4 异常检测与 MTTR 复盘的关系
异常检测的质量直接决定了 MTTR 复盘中的两个核心指标:检测时间 (TTD) 和 诊断时间 (TTDx)。一个设计良好的检测系统应满足:
- 低延迟:异常发生后 1-2 个数据点内触发告警。
- 高精度:误报率 < 5%,避免运维团队“告警疲劳”。
- 可解释:告警信息中附带基线值、偏离程度、异常类型,加速诊断。
MTTR 复盘口径设计示例(异常检测阶段)
| 复盘字段 | 数据来源 | 说明 |
|---------------------|------------------------------|----------------------------------------|
| 异常首次发生时间 | 检测系统告警时间戳 | 精确到秒 |
| 异常类型 | 检测算法分类结果 | 突增/突降/抖动/漂移 |
| 检测延迟 | 告警时间 - 指标实际异常时间 | 目标 < 60s |
| 基线窗口 | 检测算法配置 | 如:7天同时间窗口 + 30分钟滑动窗口 |
| 误报/漏报标记 | 事后人工确认 | 用于持续优化检测阈值 |