# 技术黑板报 # 第三期
推荐阅读时长:15min
云智慧智能研究院研究员,通过阅读大量文献并结合实践经验,对指标的异常类型划分、常用的异常检测算法分类、数据分类进行了初步介绍。
章节目录
一、前言
二、指标异常类型
三、指标异常检测算法类型
四、指标分类
五、总结
一、前言
指标异常检测是AIOps(智能运维)领域的重要落地场景,其旨在通过算法发现KPI(关键效益指标)时间序列上的异常点,然后通过告警告知运维人员相关风险。与此同时,指标异常检测也是其他AIOps场景的前置场景,其检测结果为后续的告警收敛、根因定位、故障自愈等场景提供输入信息,因此指标异常检测在整个AIOps落地场景中具有重要意义。
在实际工业场景中,很多业务系统通常需要监控数万至百万指标,一般企业通常采用固定阈值的方法对其展开异常监控。由于这些数据数量繁多,运维人员无法基于业务经验对每条指标设置合理的上下阈值;另一方面,监控指标从数据角度具有丰富的形态(数据种类,如平稳性、周期性、趋势性等),简单的固定阈值无法对全部形态种类奏效。因此在工业环境下存在普遍的异常监控误报现象,给运维人员带来极大困扰的同时,也给企业运营带来较大的商业风险。因此,如何准确快速地对监控系统进行异常告警是当今AIOps领域及众多工业企业亟待解决的问题。
在现实工业环境中,由于指标数据具有丰富的数据形态,并且诸多异常检测算法通常仅适用于某种或部分形态,因此如何对不同种类数据进行区分及如何对不同种类的算法和数据进行匹配对于指标异常检测效果至关重要。本文将对指标异常类型的划分、常用异常检测算法的分类及指标数据的分类进行初步介绍,并在未来对指标异常检测算法和不同类型数据间的适配性进行描述。
二、指标异常类型
时间序列数据中数据点的信息即包含其数值的信息,也包含其所处的时间点信息。通常将通过数值信息识别的异常称为空间异常,无法仅通过数值信息识别的异常称为时间异常。如图1所示,a1异常点,单从数值上无法将其区分出来,但考虑时间信息,历史同期没有相似的模式出现,这类异常为时间异常,也称模式异常;a2异常点,其数值显著低于指标数据常态的数值,能够使用k-sigma等统计方式识别,这类异常为空间异常,亦被称为数值异常。
图1 空间异常与时间异常示例
学术界将指标异常分为点异常(point anomaly)、上下文异常(contextual anomaly)与连续性异常(collective anomaly)三类。点异常指显著有别于其他点的单点异常如图2(a);上下文异常指在指标正常的变化范围内的频率异常如图2(b);连续性异常为在指标正常变化范围内模式发生的变化如图2(c)。
图2 指标异常分类
三、指标异常检测算法类型
1.按算法原理划分
针对不同类型的数据的不同类型异常,通常选用不同的算法进行异常检测。根据算法原理不同,指标异常检测算法可以划分为统计类算法、时间序列类算法、机器学习类算法以及深度学习类算法。
统计类算法中常见的有K-sigma, Boxplot, KDE, EVT等。使用统计类算法检测异常时,不考虑数据点的时间信息,因此,统计类算法只适用于检测点异常。使用统计类方法进行异常检测时,要求指标数据满足一阶平稳、数据噪声服从高斯分布、数据规律满足线性规律等的条件。基于统计方法的指标异常检测算法由于其计算逻辑简洁,因此具有较高的计算性能,但由于其对指标数据要求较高,因此适用的数据类型有限。
时间序列类算法中常见的有ARIMA, Holt-Winters, Prophet,STL等。时间序列研究是一个较大的领域,被应用在多个工业场景,有较多的理论和算法积累。时间序列类算法进行异常检测时具备较好的可解释性。时间序列类算法,旨在提取数据的趋势和周期性,适用于趋势或周期显著的数据类型。与统计类算法相比,时序类算法适用于更多类型的数据,并且其检测效果更优,但其计算性能略差,难以进行实时检测。
机器学习类算法中常见的有LOF, IForest, One-Class SVM, k-means等。机器学习类算法主要对数据的特征进行提取。不同形态的指标数据,其正常与异常数据在不同特征上存在不同。因此如何实现特征的自动化选择是应用机器学习类算法进行指标异常检测的关键。
深度学习类算法中常见的有AE,VAE,LSTM,GAN等。深度学习类算法具有捕捉复杂非线性规律的优势,能够同时处理点异常、上下文异常、连续异常,并且能够处理模式更复杂的数据,算法能力上限高。但是,在实际应用中,深度学习类算法的参数众多,无法开箱即用,因此一线用户很难通过培训快速上手,用户友好性差。并且,深度学习算法可解释性差,算法结果很难得到用户认可。在实际工业环境中,业务系统数据模式的变更,使得采用深度学习类的算法难以在短时间内积累足够的训练数据,以适应新的数据模式,而运维人员往往希望可以快速对指标数据进行监控,这对深度学习算法的快速适应能力提出了挑战。综上,在实际落地中,与其他类算法相比深度学习类算法的难度最大。
2.按使用方式划分
工业场景中,要求能够尽早给出新数据点的异常检测结果来发现故障,这对异常检测算法的性能有较高的要求。按照各类异常检测算法的职能或使用方式划分,我们将算法分为实时检测类算法与非实时检测类算法。实时检测类算法如LOF,AE只能通过实时检测的方式进行数据异常检测。实时检测类算法对算法性能和计算资源有更高的要求。非实时检测类算法如arima与prophet在进行指标异常检测时虽然运算耗时多,但可以一次性预测指标未来一段时间的值。通过比较预测值和真实值来检测异常,可以达到告警低延迟的要求。
综上所述,统计类算式适合平稳类型的数据;时间序列类算法,适合周期性、趋势性鲜明的数据;机器学习和深度学习类算法上限较高,能够处理更复杂的数据,但调参、应用较难。工业生产环境中指标数据众多又模式各异,很难通过几个算法实现全部指标高准确度的检测。为不同的数据分配不同的异常检测算法,是保障生产环境中异常检测效果的关键。
四、指标分类
指标异常检测算法有诸多分类。同时,指标数据的类型也同样丰富,包括基础监控指标、中间件指标、业务指标等多个种类,每种类型都有各自的数据特点(如周期性、趋势性、平稳性等)。面对种类繁多的指标异常检测算法,如何选择与指标数据相适配的算法是一个棘手的问题。业界一般通过对指标数据的合理分类来解决上述问题。
首先,合理的指标数据分类有助于异常检测算法选型。每类算法均有其适用的指标数据类型,如果不对指标数据类型进行判别,简单输入算法检测异常,很可能会导致检测结果出错。因此,指标数据分类对异常检测算法选型至关重要。一方面,在充分了解各类异常检测算法特点的前提下,如果能够对指标数据进行合理分类,则可以准确匹配各类算法,提升异常检测准确性;另一方面,基于算法适配性的指标分类,也可以避免盲目选择不同算法在同一份指标数据中进行尝试的算法选型过程,大幅减少计算量。
此外,在进行异常检测前运维人员可对经过分类的指标数据进行有针对性的预处理。如果直接对指标数据应用异常检测算法,不对不同指标数据执行适合的预处理,往往会出现错误的检测结果。例如银行跑批任务,这是一种周期性执行的任务,如果直接应用异常检测算法而不提前考虑周期性,算法易将跑批时间的数据视为异常,导致检测结果出错。因此,需要在预处理阶段对数据进行周期性检测,然后再进行异常检测。
由以上两个应用场景可知,在对指标数据和异常检测算法有足够积累和理解的前提下,合理的指标数据分类可进一步提升异常检测效果。
通过指标数据分类,匹配不同的异常检测算法,可以提高异常检测的准确性。实际落地过程中,我们可以调整、优化算法,但无法选择、改变指标数据。因此,在进行指标分类时,我们只考虑指标特征,分类完成后再为各类数据匹配已有算法或研发新算法,而非基于已有算法擅长处理的数据特性对指标数据分类。
目前指标数据分类的难点在于没有明确的分类标准,不同使用者有不同的分类标准,比如业务分析人员习惯按场景划分数据类型,数据分析人员习惯按数据特征划分数据类型。
图3 不同时间序列类型示例
五、总结
异常检测算法多种多样,包括统计类算法、机器学习类算法和深度学习类算法等,各有优缺。运维领域的指标数据也具有丰富的形态。面对数量众多、类型各异的指标数据,目前没有一种通用的异常检测方法能够满足各类指标的异常检测需求。一线运维人员在配置指标监控时,尽管可以利用自身经验挑选算法,以获得相较于固定阈值方法更高的检测准确性。但如何对算法进行选型和调参仍是运维人员面临的最大难点。通过对指标分类以及指标与算法适配性的研究,不但可以提高异常检测的准确性,同时也能真正减少运维人员的工作负担。
END