自动化时序异常检测的可扩展通用框架

译自Generic and Scalable Framework for Automated Time-series Anomaly Detection

作者:Nikolay Laptev, Saeed Amizadeh, Ian Flint

背景

虽然计算软硬件的快速发展已经极大地提高了应用的性能,但大型集群中依然存在各类软硬件问题,影响了用户体验和收益。系统需要不间断运行,对系统的监控也必须持续进行。从数据分析角度来看,只有不间断监控大量时序数据才能监测到潜在的故障或异常。由于系统异常或软件bug很多,人工监控几乎是不可能的,因此非常有必要通过机器学习和数据挖掘技术进行自动化异常检测。

本文介绍了雅虎开发的大规模时序数据自动化异常检测的可扩展通用框架EGADS。异常检测对于维护数据一致性非常重要,能够有效拦截恶意攻击。现有的异常检测工具在扩展性、用例限制、使用难度等方面存在很大局限。EGADS通过多种异常检测和预测模型构建了异常过滤层,实现了准确的时序数据检测。相比其他异常检测工具,EGADS在准确度和召回率方面有了50-60%的提升。EGADS框架与异常检测基准数据均已开源,旨在建立异常检测标准。

1. EGADS架构

EGADS框架由三个主要部分组成:时间序列建模模块(TMM)、异常检测模块(ADM)和报警模块(AM)。给定一个时间序列,TMM组件针对时间序列建模,生成预期值;预期值由ADM和AM组件进行消费处理。其中,ADM负责计算误差,AM负责过滤无关异常。

EGADS是一个框架,便于与现有监控基础设施集成。雅虎内部监控工具雅虎监控服务(YMS)每秒处理数百万个数据点。因此,对YMS进行精准可扩展的自动化异常检测至关重要。下面将详细介绍与YMS的集成。

1.1系统集成

EGADS作为独立平台运行,可用作大型系统中的库。因此,EGADS与YMS之间的接口至关重要。YMS每秒处理数百万个数据点。因此,很多集成架构决策主要关注优化实时数据处理。EGADS与YMS的集成架构图如下所示。

此外,还需要几个支持组件。首先,所有异常检测模型都是离线批处理(batch)产生的,然后应用到实时环境(real time)。其中批处理由三个步骤组成:

  1. 监控数据(即监控的时间序列数据)批量存储在Hadoop集群上。
  2. 批量模型生成器基于监控数据运行,并为目标时间序列构建模型。
  3. 模型存储在模型数据库中。

接下来,在线实时流便会使用这些存储下来的模型,具体步骤如下:

  1. 数据流入Storm进行流式处理。
  2. 集群中的一个模块调用EGADS ADM,根据存储在模型数据库中的模型来评估流入的数据点。
  3. 如果存在异常,则将其发送到辅助规则流。辅助规则流由组合规则和基于特定用例的逻辑组成。
  4. 根据规则,如果异常是报警事件,则生成事件,将事件存储在状态数据库中,并转发到报警路由系统。
  5. 报警路由系统应用路由配置规则将报警发送给相应的报警对象。

1.2可扩展性

EGADS的监控用例每秒需要分析亿级时间序列的百万级数据点,要求CPU负载、I/O和内存占用方面均具有可扩展性,且数据点的处理效率需要尽可能高,因此需要对大量模型进行预计算。考虑到性能消耗,针对每个数据点逐次从磁盘读取模型并不现实。因此模型应该存储在内存中。此外,出于控制成本的考虑,模型应尽可能小。

多个相似时序共享模型便是一种有效的优化方式。这种方式尤其适用于大型Web服务环境,因为在这种环境中,应用分布在相似服务器的水平层上。这种优化方式能够有效减少模型数据库的内存消耗、批处理工作量,提升I/O性能。

自调优模型是另一种优化方式。通过在线学习,这种模型能够根据入站数据流实现自动更新。这类模型需要批量初始化,但整体上能够减少批处理工作量。不过这种方式可能增加模型数据库的写工作量。

模型大小、训练速度和准确度之间的平衡也是一种选择。根据时序特征,轻量快速的预测模型的准确性也很不错。

2.异常检测算法

本节汇总了EGADS支持的异常检测算法。目前EGADS能够检测三类异常:

(a) 异常值:在给定时间序列X上,某个时间戳值对(T, Xt)中的观测值Xt与期望值E(Xt)显著不同。

(b) 变点:给定时间序列x在某个时间戳t的状态(行为)与相邻值显著不同。

(c) 异常时间序列:在给定的一组时间序列X = {X(i)}中,与大多数时间序列不一致的序列。

2.1异常值检测

异常值检测是很多监控应用中最重要的功能。本文中,除有特殊说明,异常值均指缺省异常。

2.1.1插件法

这类方法对时间序列的正常行为进行建模,明显偏离模型的数据便是异常值。为了模拟已有时间序列的正常行为,可以根据应用和时序数据的特征插入大量的时间序列模型和预测模型(例如ARIMA、指数平滑、Kalman滤波、状态空间模型等)。因此,我们称这种方法为插件法。在EGADS中,这些模型均用于时间序列预测,这也是该框架的另一个特征。由于本文的重点是异常检测,因此不再对EGADS的建模和预测特征进行深入讨论。

我们提出的插件框架包括两个主要组件:时间序列建模模块(TMM)和异常检测模块(ADM)。给定时间序列X ={Xt∈R : ∀t ≥0},TMM提供时间t的预测值Xt,记为Ut。该值也被称为预期值xt (不同于数学中的期望值概念)。TMM可以是机器学习模型,基于训练数据或规则系统进行预测,挖掘数据点Xt 在时间t的行为。我们可以将TMM理解为一个可以产生预测的黑匣子模块。从这个意义上来说,EGADS框架是通用的,不依赖于任何特定的时间序列建模框架。

给定预测值Ut 和实际观测值Xt,ADM便会计算偏差度量。衡量偏差最简单的方法是预测误差,即:PEt=Xt-Vt。如果偏差超出阈值,则发送报警。这种方法无法捕获相对偏差,因而仅适用于少数场景。相对偏差计算公式为REt=(Xt-Vt)/Vt=Xt/Vt。

对相对误差进行阈值处理后便可以检测异常值,同时调整期望值范围。阈值决定了异常检测模块的敏感度。相对误差虽然是常用的有效度量,但未必是所有时间序列异常检测的最佳度量。事实上,给定时间序列的最优度量取决于时间序列的性质以及TMM性能。针对非常规则的时间序列,如果存在准确模型,使用预测误差进行异常检测可能就足够了。因为根据预期,异常的分布是有规律的。在其他情况下,最佳度量可能介于预测误差和相对误差之间。因此,EGADS默认跟踪一组偏差度量。用户可以创建自己的误差度量。报警模块(AM)使用这些误差度量和其他功能(如时间序列特征)来了解用户的偏好,过滤不重要的异常。

2.1.2分解法

EGADS中第二类异常值检测方法基于时间序列分解的思想。时间序列通常被分解为趋势、季节性和噪声的三个要素。通过监测噪声可以捕获异常值。准确来说,如果点Xt噪声的绝对值大于某个阈值,则可以认为Xt 为异常值。

时间序列分解可以通过时域平滑实现,也可以通过频域频谱分解实现。STL是最常用的平滑分解方法。频域分解又可以进一步分为参数性频域分解和非参数性频域分解。参数性频谱分解基于已知参数形式;非参数性频域分解则基于数据。

2.2变点检测

变点即时间序列的行为偏离预期的时间点。变点与异常值的主要区别在于,变点往往是持续一段时间的变化,而异常值则是波动性变化。文献中提到的常有的变点检测方法是将时间序列上的两个窗口并列平铺,计算两个窗口中时间序列的行为差异。

根据时间序列中的值、基序、频率等的分布,对每个窗口中时间序列的行为建模。这种方法不对时间序列的预期行为作出具体推测,因而被称为绝对方法。

目前EGADS采用的是基于模型的方法。这些方法通过前文提到的建模技巧对时间序列的预期行为进行建模。EGADS结合插件法来计算已知时间序列的残差序列(或模型偏差),然后采用绝对变点检测残差分布。EGADS采用内核密度估值(Kernel DensityEstimation)来估计残差分布,采用Kullback-Leibler来测算分布变化。

在实际应用中,基于模型的变点检测方法比绝对方法更常用,因为超过一定的时间点后,模型便无法再解释时间序列的行为;而变点则能解释这些行为。如果超过绝对变点后,模型依然能够解释时间序列的行为,则该时间点就不需要再被视为变点,即变点是相对的。因此,相对变点检测技术也随之诞生。

2.3异常时间序列检测

EGADS还支持检测异常时间序列。异常时间序列T是指平均偏差与其他时间序列存在明显差别的时间序列。假设所有的时间序列是均匀、同源(即来自同一集群)的,则可以计算时间序列(i)相对于其他时间序列的平均偏差。目前,EGADS基于各种时间序列特征(包括趋势和季节性、光谱熵、自相关、平均欧几里德距离等)将时间序列聚类到一组集群中。聚类后,通过测量集群内和集群之间时间序列的偏差,实现时间序列的异常检测。这种异常检测方式常用于分类。如果网络工程师需要从数百万个时间序列中找到异常服务器,此前的方法显然不适用。因为建模是针对每个时间序列的,不考虑其他度量的行为。这种异常检测方式还可以用于发现类似异常。

3.报警

异常检测的最终目的是产生准确及时的报警。EGADS首先通过设置阈值产生一组候选异常,然后过滤掉与给定用例不相关的异常。

3.1设置阈值

设置阈值的目的是为异常检测模块(ADM)产生的偏差度量选择合适的阈值。目前,EGADS根据Kσ偏差和密度分布采用以下两种阈值设置算法:

第一种算法是参数方法,假定数据正态分布,且有明确的平均值和标准偏差。根据高斯分布,可以采用“3sigma原则”,即99.73%的样本在平均值的三个标准偏差范围之内。因此,根据Kσ中的K值,可以确定在时间t观测到样本的可能性。根据所需的敏感度,可以测算当K = 2或1时,给定的样品是否在所有样品的95.45%或68.27%之内。注意此处是假设偏差度量是正态分布的。

第二种算法是非参方法,且适用于偏差度量为非正态分布的场景,主要目的是找到偏差度量分布的低密度区域。一种方法是使用像局部异常值因子(LOF)这样的算法。通过对比某一个点与其相邻点的局部密度,识别具有相似密度的区域以及密度明显低于相邻点的点。这些点被视为异常值。

3.2过滤

过滤是对异常的最后一次处理。过滤阶段的候选异常虽然具有统计学意义,但并非所有的候选异常都与特定用例相关。有些应用对时间序列中的峰值感兴趣,有些应用对谷值感兴趣,还有些应用对变点感兴趣。 EGADS提供了一个简单直观的界面,支持用户标记时间序列中的异常区域。然后EGADS结合标记数据、时间序列和模型特征训练分类器,该分类器用于预测异常与用例是否相关。EGADS使用的时间序列的特征如下表所示。和其他组件一样,过滤组件的模型和特征均可扩展。

下图为样本时间序列的特征曲线。注意,以dc开头的度量是从调整后的时间序列(即删除趋势和季节性数据)上得到的。

4.实验研究

下文介绍了建模实验、异常检测实验和报警实验。

4.1数据

实验数据集由合成数据和真实数据按照1:1的比例混合而成。雅虎开发了合成时间序列的生成工具,该工具已与框架和基准数据一起开源。使用该工具可以生成指定长度、幅度、异常数量、异常类型、异常大小、噪声水平、趋势和季节性的合成时间序列。真实数据集使用了雅虎会员登录数据(YML)。合成时间序列和真实时间序列均包含3000个数据点。除非另有说明,所有实验均包含1000个随机选取的时间序列,结果取平均值。此外,合成数据和真实数据都有异常标签,方便测量精度和召回率。

4.2建模实验

时间序列建模(由TMM组件捕获)是异常检测的基本构成。通常情况下,异常检测的效果取决于底层时间序列模型。因此模型选择至关重要。此外,时间序列特征和可用资源也会影响选模。下面的实验体现了时间序列特征对模型性能的影响以及精度、内存消耗与训练时间之间的平衡。实验中使用的模型和误差度量见下表。

4.2.1时间序列特征与模型性能

为了验证时间序列特征对模型性能的影响,我们比较了不同模型应用于具有不同特征的时间序列时的误差度量。下图表明,时间序列特征在模型行为中起着重要作用。例如,Olympic模型为季节性模型,当应用于没有季节性和明显趋势特征的数据集时便会表现不佳。据此,EGADS便会根据上表中的误差度量选择最佳模型(给定时间序列特征)。实际上,基于数据特征选择模型比针对每个模型执行交叉验证更有效率。

具有明显趋势特征的时间序列的模型性能

具有明显季节性特征的时间序列的模型性能

4.2.2时间序列模型的可扩展性

时序模型依赖高性能技术才能完成大规模(如每秒数百万点)数据流的实时计算,因此需要在模型大小、训练时间和准确性之间进行权衡。从下图中可以看出,季节性模型训练时间段,但内存消耗大,平均误差高。雅虎的做法是先设定资源和模型训练时间目标,然后选择相应的模型,即目标是在限制资源和模型建立时间的前提下,将错误数量控制在最低。

模型大小与训练时间之间的平衡

模型准确度

4.3异常检测实验

下图表明,目前不存在适合所有业务场景的异常检测模型。Twitter在TS-2数据集上表现最好,ExtremeLowDensity模型在TS-3上表现最好。EGADS的设计初衷是在对数据中的时间序列类型和异常类型不了解的情况下,系统能够优雅稳健地处理数据中的各种异常。因此,EGADS被构建成一个库,将一组异常检测模型组合成一个最佳框架。模型中的异常被转发到过滤组件,进行精确的异常检测。

异常模型在不同数据集上的表现

4.4异常过滤实验 实际应用场景决定了异常是否重要。有些用户可能关注与恶意攻击相关的时间序列行为,有些用户则更关注对与收入下降相关的时间序列行为。

为满足不同的需求,EGADS在过滤阶段扫描所有模型的所有异常,然后为不同的异常匹配相应的模型。YM用例在过滤阶段使用的模型是基于AdaBoost的增强树模型。AdaBoost的核心原理是为不断变化的数据匹配弱学习器(如小决策树),然后进行组合加权计算,得出最终结果。经过迭代,较难预测的样例的权重会逐渐变大,弱学习器也会相应地关注被之前的学习器漏掉的样例。下图实验结果表明,过滤后的结果准确度更高,召回率更低。这些实验表明,异常与具体用例密切相关,完全自动化的可扩展解决方案是实现有效异常检测的最佳解决方案。

不同类型特征在过滤阶段的准确度

5.结论

异常检测是许多实时监控系统的核心部分,具有故障检测、欺诈检测和网络入侵检测等功能。

但现实中由于大规模问题和各种用例的存在,全自动异常检测系统很难实现。现有解决方案往往存在不可扩展或专业化程度过高的问题,且误报率较高。

EGADS这一通用异常检测系统能够对数百万个时间序列进行自动监控和警报。Hadoop上EGADS的并行架构及其Storm流处理机制支持EGADS对雅虎的数百万个时间序列进行实时异常检测。此外,EGADS还通过不同的时间序列建模和异常检测算法满足不同的场景需求。报警模块将算法与机器学习机制结合以后,EGADS便能够自动适应具体异常检测场景。这些功能共同创建了一个功能强大的可扩展通用的异常检测框架。实验表明,与其他解决方案相比,EGADS框架的适用性更强。

微信扫一扫,关注该公众号

转载于:https://juejin.im/post/5c88a2e95188257e914052e4

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值