蚂蚁集团智能监控的时序异常检测:基于 CNN 神经网络的异常检测

4,571 阅读10分钟

一. 背景

在蚂蚁集团智能监控领域,时序异常检测是极重要一环,异常检测落地中,业务方参考业界标准输出 Metrics 指标数据,监控不同业务、应用、接口、集群的各项指标,包含 Metrics 指标(总量、失败量、耗时等)和系统服务指标(CPU、MEM、DISK、JVM、IO 等)。早期的时序异常检测是由 SRE 结合长期运维经验通过配置专家规则来完成,随着 AI 技术的普及,异常检测逐步 AI 化,在现实场景中,AI 算法常常面临如下挑战:

  • 每日不同时段,业务时序曲线呈现不同的局部均值/方差特性;
  • 特殊日期如大型节假日、大促日,时序数据与日常差异巨大,甚至与往年同期也存在不小差异;
  • 每日或间隔几日固定时间段中随机时刻发生的偏定时事件;
  • 海量监控业务,很难针对单独指标一一建模;

下图是一组耗时指标时序数据,按分钟采样,存在明显日周期性,在每日不同时段,均值/方差差异明显;凭专家经验按时间段强行设置阈值,难度大准确度低;使用回归模型拟合数据分布,精度高,但难以泛用到其他指标。

图1 耗时时序曲线

图1 耗时时序曲线

本文基于 CNN 神经网络方向进行了一些探索,在保证检测准确率与召回率的同时,也能保证模型有较好的泛用性

二. 算法调研

下图整理出部分时序数据异常检测涉及算法,这里不一一详述,有兴趣自行查询相关算法原理。

图2 异常检测相关算法

图2 异常检测相关算法

从是否依赖标注训练样本的角度看,算法主要分为有监督和无监督两个方向(半监督这里就不介绍了)。无监督算法免去了标注样本耗费的大量人力,适合冷启动,但最终还需算法开发人员持续调参去寻找最优分类决策平面,在调参过程中还需兼顾不同监控业务的自身特点;有监督算法则相反,但往往模型可解释性较差,日常运维中用户会经常询问:为啥告警/为啥没告警,运维人员这时可能会风中凌乱,同时不同业务 owner 对异常评判的标准是存在差异的,如果不能在异常评判的标准上达成一致,使用有监督算法往往需为不同的评判标准维护多套样本集。

CNN 的卷积层在提取异常波形特征上有明显的优势,复杂度合适的全连接层理论上也可拟合出所有的非线性关系;还有一点,网络结构的设计是一件灵活的工作,算法工程师有较大的发挥空间,而非仅仅涉及调参。

三. 算法原理

此章从特征工程,样本增强,神经网络设计三部分介绍基于 CNN 模型方案,还是以耗时指标为例进行说明。

3.1 特征工程

不同样本的均值/方差/趋势差异明显,需要将原始时序数据映射到统一量纲的空间。

模型原始输入为5组输入通道:

  1. 当日数据: 前 n 分钟到当前预测时间点时序数据;
  2. 同比数据(前1天):1天前当前时刻为参考点,前 n 分钟到后 m 分钟内时序数据;
  3. 同比数据(前2天):2天前当前时刻为参考点,前 n 分钟到后 m 分钟内时序数据;
  4. 同比数据(前7天):7天前当前时刻为参考点,前 n 分钟到后 m 分钟内时序数据;
  5. 同比数据(前14天):14天前当前时刻为参考点,前 n 分钟到后 m 分钟内时序数据;

同比数据时段选择前 n 分钟到后 m 分钟,是因为某些周期性事件并非在一个固定时间点发生,而是在一个固定时间段中随机取值。在作者实践中 n=60,m=30。

主要解决问题:

  1. 消除了不同日期时序数据水位差异带来的影响;
  2. 消除了不同日期时序数据抖动幅度差异带来的影响;
  3. 消除了不同指标的值域范围差异带来的影响;

整个数据处理流程按如下几环节顺序进行。

3.1.1 方差标准化

方差体现了时序数据在统计时段内的抖动剧烈程度,在真实样本中,当日方差与往期同比时段方差可能存在较大差异,如果不做标准化处理,会导致抖动剧烈的时序数据很容易产生误报。

图3 处理前后对比

图3 处理前后对比

3.1.2 去均值

均值体现了时序数据在统计时段内水位,在真实样本中,当日均值与往期同比时段均值是不相等的,需要对齐水位。对每组输入通道中时序数据取中位数,以中位数为0点进行平移,注意是中位数不是统计均值。

图4 处理前后对比

图4 处理前后对比

关于为何使用中位数,而不使用统计均值,使用均值会出现下图所示问题,没达到对齐效果。

图5 中位数和统计均值差异

图5 中位数和统计均值差异

3.1.3 提取趋势基线

滑动平均,滚动窗口提取参考时段内的趋势基线,需要对窗口内数据集进行一定比率的去噪。

图6 提取趋势基线

图6 提取趋势基线

3.1.4 去趋势

做个简单的映射操作,真实值-趋势基线值,提取出去趋势后的残差时序。

图7 去趋势

图7 去趋势

3.1.5 标准化

对残差时序做一个标准化操作。

图8 标准化

图8 标准化

3.1.6 数据截取

通过上述几个步骤,将当日与往期共5个通道时序数据映射到了新的空间;在进行异常检测时,由于只需检测当前时刻是否异常,所以送入神经网络的当日时序输入只需截取最近 c 分钟即可,在作者实践中,c=7。

3.2 数据增强

模型训练前,可以做适量的数据增强,不仅能提升模型泛用性,还能在训练收敛过程中更容易提取到异常波形特征,对准确/召回率有比较大的提升。数据增强在特征工程之后。

  • 交换往期参考日输入通道的数据,如下例中就交换了 y7 和 y14 通道的输入;

图9 交换通道输入

图9 交换通道输入

  • 修改异常样本当前时刻值,随机设置到指定阈值之下,把一个异常样本变成一个正常样本;

图10 修改当前时刻值

图10 修改当前时刻值

  • 修改异常样本中当日输入通道的向量,向量整体做大尺度负向平移,把一个异常样本变成一个正常样本;

图11 修改当天输入向量

图11 修改当天输入向量

  • 模拟周期事件,随机抽取几个往期通道,在输入时序中生成与今日异常波形相似的数据;

图12 模拟周期事件

图12 模拟周期事件

3.3 神经网络设计

相比于复杂的图像识别,异常波形的图像特征要简单的多,在满足准召率的前提下,尽可能用更少的隐层,更少的参数去解决问题,模型结构中有2个关键点:

  1. 每个输入通道共享相同卷积层,因为每个通道需提取的波形特征是一致的,共享卷积层可以节约计算性能;
  2. MaxPool 层实质对每个通道做的是一个取向量最大元素操作,所以不管 Input 层输入向量长度如何变化,MaxPool 层输出数据结构都是固定的,所以在模型做预测时,输入通道是可灵活输入不同的长度时序数据;

模型 Keras 定义代码:

模型 Keras 定义代码

模型结构打印:

图13 网络结构

图13 网络结构

四. 效果评估

4.1 标注样本集评估结果

当前在 10000+ 训练样本集上准确率可达 98.9%,因为打标数据中有一些模棱两可的标注数据,不同的业务人员判断很难达到统一,通过提高模型复杂度去强行拟合训练样本集,这样可能会影响模型的泛用性。

image.png

4.1 线上预测评估结果

最近一期评审数据:准确78%,召回96%,误报主要原因分析:

  • 部分业务人员判定持续时间较短的毛刺为误报,但训练样本集中是存在这种毛刺异常标注,可以添加一条简单的后置规则对异常持续时长进行过滤;
  • 在当日原始输入为1小时左右的时长跨度中,异常波形较明显,但拉长时轴,在更长的时间跨度下看涨跌幅度正常;可以通过给原始输入更久时序数据减少此类误报,或者基于历史数据离线统计出一些合适的最小涨跌阈值进行过滤;
  • 小数据/稀疏数据模型表现较差;
  • 周期性差,当日走势和历史差异极大;

一些发现的异常,红色为异常点。

image.png

图14 检测的异常

图14 检测的异常

五. 当前面临的一些问题和思考

随着接入的监控业务不断增多,不同的业务间,我们发现异常标准定义很难达到完全统一,业务人员 A 认可的异常在业务人员 B 眼中是正常现象,这意味着使用有监督方案需要维护多份训练集,这在实际操作中是不太现实的。同时这种方案在实时预测时会产生大量时序数据查询请求,需要平台强力支持。在我们的实际探索中,发现单一的算法解决不了所有问题,不同算法都有其优势及不足,都有其契合及尴尬的场景,合适的方法才是最好的方法。

作者介绍

王睿,花名汴南,蚂蚁集团技术专家,一直从事 AIOps 算法相关研究工作。目前是蚂蚁集团智能监控团队算法组负责人。

关于我们

欢迎来到「蚂蚁智能运维」的世界。本公众号由蚂蚁集团技术风险中台团队出品,面向关注智能运维、技术风险等技术的同学,将不定期与大家分享云原生时代下蚂蚁集团在智能运维的架构设计与创新方面的思考与实践。

蚂蚁技术风险中台团队,负责蚂蚁集团的技术风险底座平台建设,包括智能监控、资金核对、性能容量、全链路压测以及风险数据基础设施等平台和业务能力建设,解决世界级的分布式处理难题,识别和解决潜在的技术风险,参与蚂蚁双十一等大型活动,通过平台能力保障整体蚂蚁系统在极限请求量下的高可用和资金安全。

关于「智能运维」有任何想要交流、讨论的话题,欢迎留言告诉我们。

PS:技术风险中台正在招聘技术专家,欢迎加入我们,有兴趣联系 techrisk-platform-hire@list.alibaba-inc.com

公众号:蚂蚁智能运维