一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

异常检测方法和装置、电子设备及计算机可读存储介质与流程

2021-10-19 11:53:00 来源:中国专利 TAG:
异常检测方法和装置、电子设备及计算机可读存储介质与流程

本申请涉及异常检测技术领域,尤其涉及一种异常检测方法和装置、电子设备及计算机可读存储介质。

背景技术

随着云技术的发展,越来越多的工作都从线下改变为线上执行。那么随着线上服务的增加,用户对于线上服务的质量要求也越来越高,尤其是对于线上服务的持续性和稳定性方面,用户希望及时了解各种异常事件,尤其是突发的影响线上服务运行的异常事件。特别是在线上服务越来越复杂的情况下,各种事件之间或多或少地具有各种相关性,也就是说提供云服务的系统在执行监测时需要采集多维度的指标来进行实时监测,例如系统指标、性能指标、任务指标等等,以便于满足用户对于故障上报的全面性以及准确性的要求。但是这样的多维度的指标由于彼此之间还具有相当复杂的相关性,从而导致异常事件的模式也非常复杂,而用户则希望得到更直接或更明晰的异常汇报,尤其是希望在系统发送报警的同时还能够提供引起该异常事件的关键性的指标或指标的组合,或者是导致异常的根因指标,从而用户能够根据系统的警报对受到影响的任务进行快速的故障定位和响应的处理。



技术实现要素:

本申请实施例提供一种异常检测方法和装置、电子设备及计算机可读存储介质,以解决现有技术中对于包含多维度指标的服务的异常检测准确性低实时性差的缺陷。

为达到上述目的,本申请实施例提供了一种异常检测方法,包括:

获取目标服务的多个状态数据序列,其中,所述目标服务具有多个状态指标,并且每个状态数据序列包含针对对应状态指标采集的状态数据;

对于所述多个状态数据序列按照所述状态指标之间的相关性进行分组,以将具有相关性的状态指标的状态数据序列分在同一组中;

对每一组中的状态数据序列分别使用至少两种异常检测模型分别计算异常分数,以获得所述目标服务的整体异常检测分数;

根据该整体异常检测分数确定所述目标服务的状态是否异常。

本申请实施例还提供了一种异常检测装置,包括:

获取模块,用于获取目标服务的多个状态数据序列,其中,所述目标服务具有多个状态指标,并且每个状态数据序列包含同一时间段内按时间顺序针对一个状态指标采集的多个状态数据;

分组模块,用于对于所述多个状态数据序列按照所述状态指标之间的相关性进行分组,以将具有相关性的服务指标的状态数据序列分在同一组中;

计算模块,用于对每一组中的状态数据序列分别使用至少两种异常检测模型分别计算异常分数,以获得所述目标服务的整体异常检测分数;

确定模块,用于根据该整体异常检测分数确定所述目标服务的状态是否异常。

本申请实施例还提供了一种电子设备,包括:

存储器,用于存储程序;

处理器,用于运行所述存储器中存储的所述程序,所述程序运行时执行本申请实施例提供的异常检测方法。

本申请实施例还提供了一种计算机可读存储介质,其上存储有可被处理器执行的计算机程序,其中,该程序被处理器执行时实现如本申请实施例提供的异常检测方法。

本申请实施例提供的异常检测方法和装置、电子设备及计算机可读存储介质,通过对于获取到的目标服务的多个状态数据序列按照指标之间的相关性进行分组,即将具有相关性的指标的状态数据序列分为一组,并且对每组中的状态数据序列分别使用至少两种异常检测模型计算异常检测分数,以获得整体异常检测分数并根据该整体异常检测分数确定目标服务是否存在异常。因此,本申请实施例的异常检测方案通过根据指标之间的相关性对指标的状态数据序列进行分组来分别计算异常检测分数以确定最终的整体异常检测分数,从而能够基于彼此具有相关性的指标来计算异常检测分数,提高了异常检测结果的准确性,并且由于将彼此之间具有相关性的指标的数据分在一组,因此可以更准确地确定异常检测结果中主要导致异常的根因指标。

上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本申请实施例提供的异常检测方案的应用场景示意图;

图2为本申请提供的异常检测方法的一个实施例的流程图;

图3为本申请提供的异常检测方法的一个实施例的流程图;

图4为本申请提供的异常检测装置的实施例的结构示意图;

图5为本申请提供的电子设备实施例的结构示意图。

具体实施例

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

实施例一

本申请实施例提供的方案可应用于任何具有异常检测的系统,例如包括有异常检测功能的芯片以及相关组件的服务器系统等等。图1为本申请实施例提供的异常检测方案的应用场景示意图,图1所示的场景仅仅是本申请的技术方案可应用的示例之一。

随着云技术的发展,越来越多的工作都从线下改变为线上执行。那么随着线上服务的增加,用户对于线上服务的质量要求也越来越高,尤其是对于线上服务的持续性和稳定性方面,用户希望及时了解各种异常事件,尤其是突发的影响线上服务运行的异常事件。特别是在线上服务越来越复杂的情况下,各种事件之间或多或少地具有各种相关性,也就是说提供云服务的系统在执行监测时需要采集多维度的指标来进行实时监测,例如系统指标、性能指标、任务指标等等,以便于满足用户对于故障上报的全面性以及准确性的要求。但是这样的多维度的指标由于彼此之间还具有相当复杂的相关性,从而导致异常事件的模式也非常复杂,而用户则希望得到更直接或更明晰的异常事件汇报,尤其是希望在系统发送报警的同时还能够提供引起该异常事件的关键性的指标或指标的组合,或者是导致异常的根因指标,从而用户能够根据系统的警报对受到影响的任务进行快速的故障定位和响应的处理。

例如,如图1中所示,服务器在运行中的数据可以存储在数据库1中,并且可以通过从该数据库1中获取实时的运行数据来进行异常检测。这样的运行数据通常包含有多个指标,并且因此在服务器上发生事件时,该事件就通常可以由这多个各种维度的指标来表征。因此,例如,在如图1中所示的场景中,从数据库1获取到包含有多个指标的运行数据1,而运行数据1通常是由表征各个指标的值随时间变化的状态数据序列构成的,而事件越复杂,则包含的指标越多,状态数据序列中指标的值随时间的变化越复杂。特别是在实际运行中,很多指标都是互相影响,换言之,当发生某个事件时,不一定是由一个指标的异常而引起的,而是可能由多个指标的共同作用而引起的。相反地,某个指标的异常如果单独看来可能是异常事件发生的原因,但是在其异常变化的同时,其他指标很可能也在同时进行类似的变化,因此在整体看来该事件并非是异常事件,而可能仅是指标的整体波动。因此,随着云技术的发展,云服务中的事件已经变得越来越复杂,对其进行准确而及时,尤其是实时的监测就成为了当前异常检测领域中的一项挑战。

现有技术中已经提出了多种针对上述复杂异常事件报警的异常监测方案。例如,已经提出了一种无监督异常检测算法。其可以针对多维度指标特征数据进行异常检测,并且使用每棵决策树给出异常分数,然后进行结果组合以获得多维度异常结果。但是该算法问题是无法直接处理上述的时序数据,这对于当前的云服务器系统的具有时间序列特性的指标检测来说无法胜任。另外该方案所使用的决策树只能够在单个维度区分数据,而当前云服务的指标则是多维度的,并且各维度之间往往还存在关联性,因此,现有技术中的该算法无法挖掘维度指标之间关联性,并且因此也无法基于报告的异常事件提供根源解释。

此外,现有技术中还提出了基于并联方式的集成学习的算法。与前述的无监督异常检测算法相比,该算法能够处理状态数据序列。例如,可以对于从如图1中所示的数据库1获取状态数据序列先进行异常检测,之后对检测获得的异常分数进行离散化,然后使用贝叶斯网络进行并行化集成组合给出联合异常检测结果。但是该算法与上述无监督异常检测算法类似之处在于都是对服务的每个指标单独进行识别和检测,而没有计算指标之间的相关性,因此在最终对单个指标的结果进行组合计算时又因为使用贝叶斯函数先对前面输出的异常分数进行离散化,从而导致在该离散化过程中容易丢失检测到的信息。另外该现有技术的方案对于最终的组合结果进行验证时只能设置一个固定阈值,无法实现自适应调节机制。

此外,现有技术中还提出了一种基于对抗学习的多时间序列异常检测算法。该算法仅能够对异常进行判断,无法解析异常事件的根源指标,因此也无法为用户提供对于异常的解释。另外,该算法由于没有使用单个指标的检测组合,因此其判别特别敏感,很容易产生误报,从而在实际使用中容易造成了“狼来了”的效果,使得用户无法对其报警结果产生信任,从而也在实际使用中失去了报警的意义。

此外,现有技术中还提出了一种针对多时间序列的异常检测算法。该算法在例如图1中所示的数据库1中获得的状态数据序列的随机变量之间建立了显式的时间依赖性,特别是使用了随机变量的连接技术以及随机变量之间的线性高斯状态空间模型连接以及随机变量和GRU潜在变量的级联来显式地建模潜在空间中随机变量之间的时间依赖性,此外,还使用一系列可逆映射来学习潜在随机空间中的非高斯后验分布并在潜在特征空间推断出正常数据随机分布特性,从而能够随机变量捕获输入数据的复杂分布。特别地,该算法在计算最终的组合结果时使用了每个维度的结果进行相乘,以作为异常分数。但是现有技术的该方案只能给出单个维度异常程度是否高的判断,无法计算维度之间的异常关联性,从而对于多维度指标异常的事件无法推断根因。

因此,如图1中所示,根据本申请实施例的异常检测方案,可以对于数据库1中存储的包含有多个指标的状态数据序列先进行相关性处理。即,在图1中所示的相关性检测模块中通过例如霍德里克和普雷斯科特滤波(Hodrick Prescott filter)算法提取趋势项。具体地

在上述公式(1)中,代表t时刻的原始信号,代表t时刻信号的低频趋势,为更高频的周期或噪声。

可以使用如下的公式(2)来对公式(1)进行优化

因此,通过公式(2),一方面是对信号进行拟合,以减小滤波后信号g与原信号的误差,另一方面是平滑,限制平滑信号的二阶差分大小。

从上面的(1)(2)式中可以看出,目标函数是未知量的二次函数,所以可以用最小二乘法求解,因此解为:

因此,通过上面的公式(1)-(3)可以最终获得输入的指标的状态数据序列中的趋势项g,并且在获得该趋势项g之后,将该趋势项从状态数据序列中除去。之后可以进一步将剔除了趋势项的状态数据序列通过谱残余(Spectrum Residual SR)算法来计算周期项。具体地,可以先通过快速傅里叶变换(FFT)将剔除了趋势项的状态数据序列变换到频率空间,之后将振幅超过预定阈值的分量确定为周期项,最后再进行快速傅里叶逆变换(iFFT)获得状态数据序列中的周期项,因此,可以通过进一步排除掉状态数据序列中的周期项来获得含有异常分量的残差项,换言之,在通过了如图1中所示的相关性计算模块中的FP滤波器单元、SR单元之后,获得了只剩下包含有异常分量的残差项的状态数据序列,因此,可以再将这样的各指标的状态数据序列通过基于相关性的距离算法(shaped-based distance, SBD)算法来计算指标之间的相关性。

特别地,在本申请实施例中,由于在通过上述计算去除了趋势项和周期项的状态数据序列之间存在着偏移,因此不能够使用例如皮尔逊相关性算法等传统算法来根据这些状态数据序列计算指标之间的相关性,在本申请实施例中使用SBD算法来借助于其较低的时间复杂度的优势计算各指标的状态数据序列之间的相关性。例如,在图1中所示的场景中,在经过了FP滤波器单元和SR单元之后,获得了两个状态数据序列 X()及时间序列Y(),两序列间的存在时延为s的关系,因此,在图1中 所示的SBD单元中可以计算这两个序列的数据分别构成的两条曲线之间的距离,即这两个序列之间的相似度。

在上面的公式(4)和(5)中,x,y分别是一个时间序列,长度都为m。s是一个偏移的校正系数,是用来解决上述提到的两个指标的状态数据序列之间的偏移的问题,并且s的范围是[-m 1,m-1]。

因此,以s为窗口长度循环地计算x和y这两个序列之间的余弦相关性,从而获得下面的公式(6),

根据上面的公式(6)计算其最大值NCC,并且NCC的取值范围是[-1,1],为1的时候就意味着x和y这两个序列是完全相同的,为-1的时候则x和y这两个序列是完全相反的。||x||和||y||是指没经过偏移前的模长。因此,可以根据公式(8)获得x和y这两个序列之间的相关性。特别地,由于本申请的相关性计算模块中采用了上述公式,因此在相关性的计算过程中实际上同时记录了相关性最大值的偏移步长i,这可以用来表示x和y这两个序列所代表的指标之间的相互影响的先后顺序。此外,在公式(5)中使用的窗口长度s,可以用来表示x和y这两个序列所代表的指标在多长时间范围内存在相关性。这些信息可以在例如图1中所示的后续的异常检测判断和根因分析中发挥作用,从而不仅降低了现有技术误判的概率而且还解决现有技术中无法在判断异常的情况下进一步给出根因指标分析的缺陷。

在本申请实施例中,上述相关性计算可以以离线方式进行,当然也可以以在线方式进行。在如上获得了指标之间的相关性同时或之后,就可以将存储在数据库1中的各指标的状态数据序列输入到例如图1中所示的在线检测模块中。例如,可以先对于每个指标的状态数据序列进行各种预处理,例如,可以采用下面的公式(9)的Z分数算法来进行归一化处理。例如,

此外,还可以进行例如缺失性检测和根据周期性字典来进行周期指标的过滤,即直接去除掉本身就是周期性指标的指标。

之后,可以根据上述公式计算出的指标之间的相关性对指标的状态数据序列进行分组(bucket)。例如,可以根据上述公式计算出的相关性,将具有相关性的指标放入到一个分组(bucket)中,并且由于通常系统运行数据中包含彼此之间具有不同相关性的各种指标,因此在本申请实施例中,可以按照上述离线或在线的相关性计算模块获得的指标之间的相关性来将各指标的状态数据序列分为多个分组,并且这些分组可以进行并行化处理,例如分配到多个线程来并行处理,从而能够提高整体的计算效率。

在分组过程中,可能出现的是,存在一个指标与其他指标都不存在相关性的情况,即在某一个分组中可能仅存在一个指标的状态数据序列,在该情况下,可以采用串联集成算法来对该分组中的指标的状态数据序列进行处理。例如,可以使用学生T检验模型(Ttest)来确定平均值变化异常分数。即,在该算法中,使用下面的公式(10)来构造统计项t:

其中,

即Sp为该指标的状态数据序列中选择的两个样本点的合并标准差(pooled standard deviation),可以证明其方差,即两样本点的合并方差是总体方差的无偏估计(unbiased estimator)。

之后还可以进一步使用联合假设检验模型(Ftest)来确定方差变化异常(change of variance,COV)分数,并且在该算法中使用下面的公式(12)作为统计项:

其中,Sx和Sy为样本方差。

并且因此获得下面的公式(13)

最后可以使用短期环比模型(SS)确定单峰单谷异常分数。具体地,先对当前时刻之前的环比窗口T内的数据进行中值滤波,以便于过滤掉该窗口T内的异常点,然后计算该窗口T内的均值,并且和当前值作差来作为异常分数:

类似地,在分组过程中,还可能存在多个指标之间存在相关性的情况,即在某一个分组中存在彼此之间具有关联性的至少两个指标的状态数据序列,在该情况下,同样可以采用串联集成算法来对该分组中的指标的状态数据序列进行处理。例如,可以使用霍特林T平方(Hotelling T^2)模型确定多指标平均值变化(多指标COM)异常分数。具体地,在该算法中,使用下面的公式(15)来构造统计项T:

其中,是每个指标的均值构成的向量,是样本总均值,并且使用下面的公式(16)计算其中的:

之后,可以是用联合假设检验模型(Ftest)的多指标版本来计算多指标COV异常分数,具体地,可以使用下面的公式(17)来计算样本总均值:

然后使用上述样本总均值计算样本总方差,如下面的公式(18)所示:

最后使用上述总方差来计算异常分数:

接下来,还可以使用短期环比模型(SS)算法的多指标版本来计算多个指标情况下的峰/谷异常分数。例如,可以获取该分组中的多个指标中的两个指标分别在第一时间长度范围内的第一长度时间序列,第一时间长度范围是该两个指标存在相关性的时间范围,之后可以例如使用下面的公式(20)根据每个指标的第一长度时间序列中的最大值最小值以及该第一长度时间序列的平均值确定多指标峰谷异常分数:

在本申请实施例中,由于上述串联多算法集成计算方式可以针对包含单个指标或多个指标的分组分别进行,因此可以以并行的方式对于多个分组同时进行上述异常分数计算处理。特别地,在上述串联模型计算中,可以对于不同模型输出的异常分数进行集成合并处理以获得包含这些指标的服务的整体异常检测分数。例如,在本申请实施例中,由于如上对于每个分组使用了不同的算法,而这些算法模型输出的异常分数值都属于不同类型,因此不能直接进行数值合并。对此,在本申请实施例中可以在例如图1中所示的结果合并模块中先将每个检测模型获得的异常分数与该检测模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值作为该模型的异常检测分数。例如,可以对于每个模型输出的异常分数实时记录,并且相应地实时更新数据库中的历史值并找到历史值中的最大异常分数值,从而将每次模型输出的异常分数与这样找到的历史最大异常分数值做比值,以将每个模型的每次输出的不同类型的异常分数值归一化为同类型的比值,从而在接下来的加权平均模块中进行数值合并。在本申请实施例中,在对归一化后的同类型的异常数值进行加权平均时,可以根据离线相关性分析以及对于事件所属的任务的在先经验来进行设置。因此,通过结果合并模块就可以将各个分组获得的异常分数合并为表征该服务的整体异常检测分数。

此外,对于每一分组中的状态数据序列,还可以使用至少两种异常监测模型以串行方式依次计算异常分数。例如,可以对于每一分组依次应用上述模型计算该模型异常分数,并且对于当次计算出的异常分数进行异常判断,当例如该异常分数大于该模型的异常分数阈值时,可以确定当次该模型计算出的异常分数,因此可以将该异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数,而不再使用其他模型对该组中的状态数据序列计算异常分数。此外,如果当首先应用的模型计算出得异常分数并没有被确定为异常,则可以继续使用其他模型继续对该组的状态数据序列计算异常分数,并且例如当第二个应用的模型计算出的分数被确定为异常,则将该第二个模型的异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数并不再继续使用其他模型进行异常分数计算。此外,如果所有预定的模型的计算结果都没有被确定为异常,则可以确定该组指标不存在异常。

因此,本申请实施例中,可以将串行异常模型应用中依次计算中首次大于异常分数阈值的异常分数与该异常分数对应的模型的历史最大异常分数进行比值处理,以获得该组的异常分数比值。

此外,当如上获得了各组的异常分数比值之后,可以对各组的异常分数比值进行加权平均处理,以获得目标服务的整体异常检测分数。

在获得了服务的整体异常检测分数之后,还可以如现有技术那样设置固定的报警阈值,并且当整体异常检测分数大于报警阈值时则发出报警。在本申请实施例中,为了增强异常检测系统的鲁棒性以及对于数据分布变化的实时反应,可以动态地设置该报警阈值。例如,可以使用极值分布-超越阈值(Extreme Value Distribution-Peaks Over Threshold Approach,EVT-POT)算法来确定动态报警阈值。具体地,可以采用下面的公式(21)来计算异常值分布:

然后使用超越阈值(POT)算法来进行参数估计以划分出实时数据中的异常部分,并且由此可以基于该异常部分来确定动态报警阈值。

此外,在确定了动态报警阈值之后,在本申请实施例中还可以根据一段时间内,例如近期的报警次数对该动态报警阈值进行进一步的调节。例如,可以使用下面的公式(22)来根据报警次数对动态报警阈值进行调节;

此外,在本申请实施例中,由于在判断异常时引入了指标之间的相关性,因此在发生报警之后,还可以对于该报警事件对应的根因进行推断,从而有利于用户对发生的异常事件进行及时的处理。例如,可以根据每个分组最终输出的异常比值进行排序,并且将大于指定阈值的比值的指标作为根因候选。当该根因候选指标是与其他无关而独立的指标时,可以直接单独输出该指标作为根因指标;而当该根因候选指标是属于包含彼此具有相关性的多个指标的分组,那么可以根据在计算相关性时给出的异常相关指标的先后异常顺序,将顺序靠前的几个指标输出作为根因指标。

此外,在本申请实施例中,由于对于每个分组的数据都采用由例如三种针对特定异常类型的异常检测统计算法进行串联计算,并且特别是可以在三种模型中首次确定异常时的异常分数来计算该组的异常分数比值,从而不仅可以获得该组的异常检测分数,而且还可以了解该组异常是由哪个模型所确定的,因此,当最终判定异常时可以根据具体是由于哪个算法判定的异常导致的,因此可以在输出最终的异常检测结果,即报警时同时输出该算法所针对的类型作为该异常事件的异常类型。

本申请实施例提供的异常检测方案,通过对于获取到的目标服务的多个状态数据序列按照指标之间的相关性进行分组,即将具有相关性的指标的状态数据序列分为一组,并且对每组中的状态数据序列分别使用至少两种异常检测模型计算异常检测分数,以获得整体异常检测分数并根据该整体异常检测分数确定目标服务的状态是否异常。因此,本申请实施例的异常检测方案通过根据指标之间的相关性对指标的状态数据序列进行分组来分别计算异常检测分数以确定最终的整体异常检测分数,从而能够基于彼此具有相关性的指标来计算异常检测分数,提高了异常检测结果的准确性,并且由于将彼此之间具有相关性的指标的数据分在一组,因此可以更准确地确定异常检测结果中主要导致异常的根因指标。

上述实施例是对本申请实施例的技术原理和示例性的应用框架的说明,下面通过多个实施例来进一步对本申请实施例具体技术方案进行详细描述。

实施例二

图2为本申请提供的异常检测方法的一个实施例的流程图,该方法的执行主体可以为具有异常检测能力的各种终端或服务器设备,也可以为集成在这些设备上的装置或芯片。如图2所示,该异常检测方法可以包括如下步骤:

S201,获取目标服务的多个状态数据序列。

在本申请实施例中,可以从例如图1中所示的数据库1中获取例如服务器系统的运行数据。特别地,可以获取一定时间段内的目标服务的多个状态数据序列,每个状态数据序列可以对应于表征目标服务的一个指标。

S202,对于多个状态数据序列按照状态指标之间的相关性进行分组,以将具有相关性的状态指标的状态数据序列分在同一组中。

在步骤S201中获取到目标服务的多个状态数据序列之后,由于这些状态数据序列是多个不同的指标的状态数据序列,而这些指标及其数据序列也彼此之间存在着各种相关性。例如,在如图1中所示的场景中,从数据库1获取到包含有多个指标的运行数据1,而运行数据1可以是由表征各个指标的值随时间变化的状态数据序列构成的,而事件越复杂,则包含的指标越多,状态数据序列中指标的值随时间的变化越复杂。特别是在实际运行中,很多指标都是互相影响,换言之,当目标服务的运行期间发生某个事件时,不一定是由一个指标的异常而引起的,而是可能由多个指标的共同作用而引起的。相反地,某个指标的异常如果单独看来可能是异常事件发生的原因,但是在其异常变化的同时,其他指标很可能也在同时进行类似的变化,因此在整体看来该事件并非是异常事件,而可能仅是指标的整体波动。

因此,在本申请实施例的步骤S202中可以将这样彼此之间具有相关性的指标的状态数据序列分在一个分组中,这样每个分组中可以包含多个彼此之间具有相关性的指标的状态数据序列,或者也可以包含独立的与其他指标都不存在相关性的指标的状态数据序列。因此,在不同分组之间基本上不存在相关性,因此可以对于这些分组分别进行检测处理,特别是可以并行地进行处理,例如分配到多个线程来并行处理,从而这样能够提高整体的计算效率。

S203,对每一组中的状态数据序列分别使用至少两种异常检测模型分别计算异常分数,以获得目标服务的整体异常检测分数。

在本申请实施例中,对于步骤S202中分组后的指标的状态数据序列使用串联集成算法来进行异常检测。例如可以使用至少两种异常检测模型来分别针对不同的异常类型进行异常检测处理,从而能够针对不同异常类型使用有针对性的检测算法执行检测。

由于在上述步骤S203中对于每个分组使用了多种算法进行串联计算,而这些算法模型输出的异常分数值都属于不同类型,因此当基于这些模型的结果来计算整体异常检测分数时不能直接进行数值合并。对此,在本申请实施例中可以对每个模型获得的不同类型的异常分数值进行归一化处理,以便于在接下来进行数值合并。

例如,在本申请实施例中可以先将每个检测模型获得的异常分数与该检测模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值作为该模型的异常检测分数。例如,可以对于每个模型输出的异常分数实时记录,并且相应地实时更新数据库中的历史值并找到历史值中的最大异常分数值,从而将每次模型输出的异常分数与这样找到的历史最大异常分数值做比值,以将每个模型的每次输出的不同类型的异常分数值进行归一化为同类型的比值,从而在接下来的加权平均模块中进行数值合并。在本申请实施例中,在对归一化后的同类型的异常数值进行加权平均时,可以根据离线相关性分析以及对于事件所属的任务的在先经验来进行设置。因此,可以将各个分组获得的异常分数合并为表征该服务的整体异常检测分数。

此外,对于每一分组中的状态数据序列,还可以使用至少两种异常检测模型以串行方式依次计算异常分数。例如,可以对于每一分组依次应用上述模型计算该模型异常分数,并且对于当次计算出的异常分数进行异常判断,当例如该异常分数大于该模型的异常分数阈值时,可以确定当次该模型计算出的异常分数,因此可以将该异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数,而不再使用其他模型对该组中的状态数据序列计算异常分数。此外,如果当首先应用的模型计算出得异常分数并没有被确定为异常,则可以继续使用其他模型继续对该组的状态数据序列计算异常分数,并且例如当第二个应用的模型计算出的分数被确定为异常,则将该第二个模型的异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数并不再继续使用其他模型进行异常分数计算。此外,如果所有预定的模型的计算结果都没有被确定为异常,则可以确定该组指标不存在异常。

因此,本申请实施例中,可以将串行异常模型应用中依次计算中首次大于异常分数阈值的异常分数与该异常分数对应的模型的历史最大异常分数进行比值处理,以获得该组的异常分数比值。

S204,根据该整体异常检测分数确定目标服务的状态是否异常。

在步骤S204中,可以根据该整体异常检测分数来确定目标服务的状态是否异常。例如可以判断该整体异常检测分数是否大于预设的报警阈值来确定目标服务的状态是否异常。

本申请实施例提供的异常检测方法,通过对于获取到的目标服务的多个状态数据序列按照指标之间的相关性进行分组,即将具有相关性的指标的状态数据序列分为一组,并且对每组中的状态数据序列分别使用至少两种异常检测模型计算异常检测分数,以获得整体异常检测分数并根据该整体异常检测分数确定目标服务是否存在异常。因此,本申请实施例的异常检测方案通过根据指标之间的相关性对指标的状态数据序列进行分组来分别计算异常检测分数以确定最终的整体异常检测分数,从而能够基于彼此具有相关性的指标来计算异常检测分数,提高了异常检测结果的准确性,并且由于将彼此之间具有相关性的指标的数据分在一组,因此可以更准确地确定异常检测结果中主要导致异常的根因指标。

实施例三

图3为本申请提供的异常检测方法的一个实施例的流程图,该方法的执行主体可以为具有异常检测能力的各种终端或服务器设备,也可以为集成在这些设备上的装置或芯片。如图3所示,该异常检测方法可以包括如下步骤:

S301,获取目标服务的多个状态数据序列。

在本申请实施例中,可以从例如图1中所示的数据库1中获取例如服务器系统的运行数据。特别地,可以获取一定时间段内的目标服务的多个状态数据序列,每个状态数据序列可以对应于表征目标服务的一个指标。

S302,对每个指标的状态数据序列进行时序分离处理以获得该指标的残差项。

在步骤S301中获取到目标服务的多个状态数据序列之后,由于这些状态数据序列是多个不同的指标的状态数据序列,而这些指标及其数据序列也彼此之间存在着各种相关性。例如,在如图1中所示的场景中,从数据库1获取到包含有多个指标的运行数据1,而运行数据1可以是由表征各个指标的值随时间变化的状态数据序列构成的,而服务越复杂,则包含的指标越多,状态数据序列中指标的值随时间的变化越复杂。特别是在实际运行中,很多指标都是互相影响,换言之,当目标服务的运行期间发生某个事件时,不一定是由一个指标的异常而引起的,而是可能由多个指标的共同作用而引起的。相反地,某个指标的异常如果单独看来可能是异常事件发生的原因,但是在其异常变化的同时,其他指标很可能也在同时进行类似的变化,因此在整体看来该事件并非是异常事件,而可能仅是指标的整体波动。

因此,在本申请实施例中,可以对于步骤S301中获取的状态数据序列进行时序分离处理。例如,可以分别从状态数据序列中分离出趋势项和周期项数据,并且将这两项数据从状态数据序列中剔除,以剩余包含有异常分量的残差项。

例如,通过霍德里克和普雷斯科特滤波算法提取所述指标的状态数据序列中的趋势项。即,

在上述公式(1)中,代表t时刻的原始信号,代表t时刻信号的低频趋势,为更高频的周期或噪声。

可以使用如下的公式(2)来对公式(1)进行优化:

因此,通过公式(2),一方面是对信号进行拟合,以减小滤波后信号g与原信号的误差,另一方面是平滑,限制平滑信号的二阶差分大小。

从上面的(1)(2)式中可以看出,目标函数是未知量的二次函数,所以可以用最小二乘法求解,因此解为:

因此,通过上面的公式(1)-(3)可以最终获得输入的指标的状态数据序列中的趋势项g,并且在获得该趋势项g之后,将该趋势项从状态数据序列中除去。

之后可以进一步将剔除了趋势项的状态数据序列通过谱残余(Spectrum Residual SR)算法来计算周期项。具体地,可以先通过快速傅里叶变换(FFT)将剔除了趋势项的状态数据序列变换到频率空间,之后将振幅超过预定阈值的分量确定为周期项,最后再进行快速傅里叶逆变换(iFFT)获得状态数据序列中的周期项,因此,可以通过进一步排除掉状态数据序列中的周期项来获得含有异常分量的残差项。

最后,可以对于去除了所述趋势项和所述周期项的状态数据序列进行快速傅里叶逆变换以获得所述残差项。

S303,根据各指标的残差项确定指标之间的相关性。

在获得了残差项的状态数据序列后,可以在步骤S303中根据这些残差项来确定指标之间的相关性。例如,可以再将这样的各指标的状态数据序列通过基于相关性的距离算法(shaped-based distance, SBD)算法来计算指标之间的相关性。特别地,在本申请实施例中,由于在通过上述计算去除了趋势项和周期项的状态数据序列之间存在着偏移,因此不能够使用例如皮尔逊相关性算法等传统算法来根据这些状态数据序列计算指标之间的相关性,在本申请实施例中可以使用SBD算法来借助于其较低的时间复杂度的优势计算各指标的状态数据序列之间的相关性。例如,在图1中所示的场景中,在经过了FP滤波器单元和SR单元之后,获得了两个状态数据序列 X()及时间序列Y(),两序列间的存在时延为s的关系,因此,在图1中 所示的SBD单元中可以计算这两个序列的数据分别构成的两条曲线之间的距离,即这两个序列之间的相似度。

在上面的公式(4)和(5)中,x,y分别是一个时间序列,长度都为m。s是一个偏移的校正系数,是用来解决上述提到的两个指标的状态数据序列之间的偏移的问题,并且s的范围是[-m 1,m-1]。

因此,以s为窗口长度循环地计算x和y这两个序列之间的余弦相关性,从而获得下面的公式(6),

根据上面的公式(6)计算其最大值NCC,并且NCC的取值范围是[-1,1],为1的时候就意味着x和y这两个序列是完全相同的,为-1的时候则x和y这两个序列是完全相反的。||x||和||y||是指没经过偏移前的模长。因此,可以根据公式(8)获得x和y这两个序列之间的相关性。特别地,由于本申请的相关性计算模块中采用了上述公式,因此在相关性的计算过程中实际上同时记录了相关性最大值的偏移步长i,这可以用来表示x和y这两个序列所代表的指标之间的相互影响的先后顺序。此外,在公式(5)中使用的窗口长度s,可以用来表示x和y这两个序列所代表的指标在多长时间范围内存在相关性。这些信息可以在例如图1中所示的后续的异常检测判断和根因分析中发挥作用,从而不仅降低了现有技术误判的概率而且还解决现有技术中无法在判断异常的情况下进一步给出根因指标分析的缺陷。

在本申请实施例中,步骤S302和S303中的相关性计算可以以离线方式进行,当然也可以以在线方式进行。在如上获得了指标之间的相关性同时或之后,就可以将存储在数据库1中的各指标的状态数据序列输入到例如图1中所示的在线检测模块中。例如,可以先对于每个指标的状态数据序列进行各种预处理,例如,可以采用下面的公式(9)的Z分数算法来进行归一化处理。例如:

此外,还可以进行例如缺失性检测和根据周期性字典来进行周期指标的过滤,即直接去除掉本身就是周期性指标的指标。

S304,对于多个状态数据序列按照状态指标之间的相关性进行分组,以将具有相关性的状态指标的状态数据序列分在同一组中。

因此,在本申请实施例的步骤S304中可以将这样彼此之间具有相关性的指标的状态数据序列分在一个分组中,这样每个分组中可以包含多个彼此之间具有相关性的指标的状态数据序列,或者也可以包含独立的与其他指标都不存在相关性的指标的状态数据序列。因此,在不同分组之间基本上不存在相关性,因此可以对于这些分组分别进行检测处理,特别是可以并行地进行处理,例如分配到多个线程来并行处理,从而这样能够提高整体的计算效率。

在本申请实施例中,对于步骤S304中分组后的指标使用串联集成算法来进行异常检测。例如可以使用至少两种异常检测模型来分别针对不同的异常类型进行异常检测处理,从而能够针对不同异常类型使用有针对性的检测算法执行检测。

S305,使用学生T检验模型(Ttest)确定平均值变化异常分数。

S306,使用联合假设检验模型(Ftest)确定方差变化异常分数。

S307,使用短期环比模型(SS)确定单峰单谷异常分数。

在步骤S304中进行分组后,当在一个分组中仅存在一个指标的状态数据序列时,即,在获得的多个指标的状态数据序列中,有至少一个指标与其他指标不存在相关性,在该情况下,可以采用上述S305-S307来计算该分组中指标的状态数据序列的异常检测分数。

例如,可以使用学生T检验模型(Ttest)来确定平均值变化异常分数。即,在该算法中,使用下面的公式(10)来构造统计项t:

其中,

即Sp为该指标的状态数据序列中选择的两个样本点的合并标准差(pooled standard deviation),可以证明其方差,即两样本点的合并方差是总体方差的无偏估计(unbiased estimator)。

后还可以进一步使用联合假设检验模型(Ftest)来确定方差变化异常(change of variance,COV)分数,并且在该算法中使用下面的公式(12)作为统计项:

其中,Sx和Sy为样本方差。

并且因此获得下面的公式(13):

最后可以使用短期环比模型(SS)确定单峰单谷异常分数。具体地,先对当前时刻之前的环比窗口T内的数据进行中值滤波,以便于过滤掉该窗口T内的异常点,然后计算该窗口T内的均值,并且和当前值作差来作为异常分数:

S308,使用霍特林T平方模型确定多指标平均值变化异常分数。

S309,使用联合假设检验模型(Ftest)确定多指标方差变化异常分数。

S310,使用短期环比模型(SS)确定多指标峰谷异常分数。

此外,在分组过程中,还存在多个指标之间存在相关性的情况,即在某一个分组中存在彼此之间具有关联性的至少两个指标的状态数据序列,在该情况下,可以采用例如上述步骤S308-S310的串联集成算法来对该分组中的指标的状态数据序列进行处理。

例如,可以使用霍特林T平方(Hotelling T^2)模型确定多指标平均值变化(多指标COM)异常分数。具体地,在该算法中,使用下面的公式(15)来构造统计项T:

其中,是每个指标的均值构成的向量,是样本总均值,并且使用下面的公式(16)计算其中的:

之后,可以是用联合假设检验模型(Ftest)的多指标版本来计算多指标COV异常分数,具体地,可以使用下面的公式(17)来计算样本总均值:

然后使用上述样本总均值计算样本总方差,如下面的公式(18)所示:

最后使用上述总方差来计算异常分数:

接下来,还可以使用短期环比模型(SS)算法的多指标版本来计算多个指标情况下的峰/谷异常分数。

例如,可以获取该分组中的多个指标中的两个指标分别在第一时间长度范围内的第一长度时间序列,第一时间长度范围是该两个指标存在相关性的时间范围,之后可以例如使用下面的公式(20)根据每个指标的第一长度时间序列中的最大值最小值以及该第一长度时间序列的平均值确定多指标峰谷异常分数:

在本申请实施例中,由于上述串联多算法集成计算方式可以针对包含单个指标或多个指标的状态数据序列的分组分别进行,因此可以以并行的方式对于多个分组的状态数据序列同时进行上述异常分数计算处理,以提高处理效率。

S311,将每个检测模型获得的异常分数与该检测模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值作为同类型的异常检测分数。

S312,对异常分数比值进行加权平均处理,以获得整体异常检测分数。

由于在上述步骤S305-S307以及S308-S310中对于每个分组使用了多种算法进行串联计算,而这些算法模型输出的异常分数值都属于不同类型,因此当基于这些模型的结果来计算整体异常检测分数时不能直接进行数值合并。对此,在本申请实施例中可以对每个模型获得的不同类型的异常分数值进行归一化处理,以便于在接下来进行数值合并。

例如,在本申请实施例中可以先将每个检测模型获得的异常分数与该检测模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值作为该模型的异常检测分数。例如,可以对于每个模型输出的异常分数实时记录,并且相应地实时更新数据库中的历史值并找到历史值中的最大异常分数值,从而将每次模型输出的异常分数与这样找到的历史最大异常分数值做比值,以将每个模型的每次输出的不同类型的异常分数值进行归一化为同类型的比值,从而在接下来的加权平均模块中进行数值合并。在本申请实施例中,在对归一化后的同类型的异常数值进行加权平均时,可以根据离线相关性分析以及对于服务所属的任务的在先经验来进行设置。因此,可以将各个分组获得的异常分数合并为表征该服务的整体异常检测分数。

此外,对于每一分组中的状态数据序列,还可以使用至少两种异常检测模型以串行方式依次计算异常分数。例如,可以对于每一分组依次应用上述模型计算该模型异常分数,并且对于当次计算出的异常分数进行异常判断,当例如该异常分数大于该模型的异常分数阈值时,可以确定当次该模型计算出的异常分数,因此可以将该异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数,而不再使用其他模型对该组中的状态数据序列计算异常分数。此外,如果当首先应用的模型计算出得异常分数并没有被确定为异常,则可以继续使用其他模型继续对该组的状态数据序列计算异常分数,并且例如当第二个应用的模型计算出的分数被确定为异常,则将该第二个模型的异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数并不再继续使用其他模型进行异常分数计算。此外,如果所有预定的模型的计算结果都没有被确定为异常,则可以确定该组指标不存在异常。

因此,本申请实施例中,可以将串行异常模型应用中依次计算中首次大于异常分数阈值的异常分数与该异常分数对应的模型的历史最大异常分数进行比值处理,以获得该组的异常分数比值。

S313,根据该整体异常检测分数确定目标服务的状态是否异常。

因此,在步骤S311中将使用不同检测模型获得的异常分数转换为同类型的数值之后,在步骤S312中可以将这些数值进行合并以获得服务的整体异常检测分数,并且从而在步骤S313中可以根据该整体异常检测分数来确定目标服务的状态是否异常。例如可以判断该整体异常检测分数是否大于预设的报警阈值来确定目标服务的状态是否异常。

可以如现有技术那样设置固定的报警阈值,并且当整体异常检测分数大于报警阈值时则发出报警。在本申请实施例中,为了增强异常检测系统的鲁棒性以及对于数据分布变化的实时反应,可以动态地设置该报警阈值。例如,可以使用极值分布-超越阈值(Extreme Value Distribution-Peaks Over Threshold Approach,EVT-POT)算法来确定动态报警阈值。具体地,可以采用下面的公式(21)来计算异常值分布:

然后使用超越阈值(POT)算法来进行参数估计以划分出实时数据中的异常部分,并且由此可以基于该异常部分来确定动态报警阈值。

此外,在确定了动态报警阈值之后,在本申请实施例中还可以根据一段时间内,例如近期的报警次数对该动态报警阈值进行进一步的调节。例如,可以使用下面的公式(22)来根据报警次数对动态报警阈值进行调节。

此外,在本申请实施例中,由于在判断异常时引入了指标之间的相关性,因此在发生报警之后,还可以对于该报警事件对应的根因进行推断,从而有利于用户对发生的异常事件进行及时的处理。例如,可以根据每个分组最终输出的异常比值进行排序,并且将大于指定阈值的比值的指标作为根因候选。当该根因候选指标是与其他无关而独立的指标时,可以直接单独输出该指标作为根因指标;而当该根因候选指标是属于包含彼此具有相关性的多个指标的分组,那么可以根据在计算相关性时给出的异常相关指标的先后异常顺序,将顺序靠前的几个指标输出作为根因指标。

此外,在本申请实施例中,由于对于每个分组的数据都采用由例如三种针对特定异常类型的异常检测统计算法进行串联计算,并且特别是可以在三种模型中首次确定异常时的异常分数来计算该组的异常分数比值,从而不仅可以获得该组的异常检测分数,而且还可以了解该组异常是由哪个模型所确定的,因此,当最终判定异常时可以根据具体是由于哪个算法判定的异常导致的,因此可以在输出最终的异常检测结果,即报警时同时输出该算法所针对的类型作为该异常事件的异常类型。

本申请实施例提供的异常检测方法,通过对于获取到的目标服务的多个状态数据序列按照指标之间的相关性进行分组,即将具有相关性的指标的状态数据序列分为一组,并且对每组中的状态数据序列分别使用至少两种异常检测模型计算异常检测分数,以获得整体异常检测分数并根据该整体异常检测分数确定目标服务是否存在异常。因此,本申请实施例的异常检测方案通过根据指标之间的相关性对指标的状态数据序列进行分组来分别计算异常检测分数以确定最终的整体异常检测分数,从而能够基于彼此具有相关性的指标来计算异常检测分数,提高了异常检测结果的准确性,并且由于将彼此之间具有相关性的指标的数据分在一组,因此可以更准确地确定异常检测结果中主要导致异常的根因指标。

实施例四

图4为本申请提供的异常检测装置的一个实施例的结构示意图,可以用于执行图2或图3中所示的异常检测方法。如图3所示,该异常检测装置可以包括:获取模块41、分组模块42、计算模块43和确定模块44。

获取模块41可以用于获取目标服务的多个状态数据序列。

在本申请实施例中,获取模块41可以从例如图1中所示的数据库1中获取例如服务器系统的运行数据。特别地,可以获取一定时间段内的目标服务的多个状态数据序列,每个状态数据序列可以对应于表征目标服务的一个指标。

此外,根据本申请实施例,还可以进一步包括相关性确定模块45,该相关性确定模块45可以用于对每个指标的状态数据序列进行时序分离处理以获得该指标的残差项,并且根据各指标的残差项确定指标之间的相关性。例如,通过霍德里克和普雷斯科特滤波算法提取所述指标的状态数据序列中的趋势项。

通过上述算法可以最终获得输入的指标的状态数据序列中的趋势项g,并且在获得该趋势项g之后,将该趋势项从获取模块41获取到的状态数据序列中除去。

之后相关性确定模块45可以进一步将剔除了趋势项的状态数据序列通过谱残余(Spectrum Residual SR)算法来计算周期项。具体地,可以先通过快速傅里叶变换(FFT)将剔除了趋势项的状态数据序列变换到频率空间,之后将振幅超过预定阈值的分量确定为周期项,最后再进行快速傅里叶逆变换(iFFT)获得状态数据序列中的周期项,因此,可以通过进一步排除掉状态数据序列中的周期项来获得含有异常分量的残差项。

最后,相关性确定模块45可以对于去除了所述趋势项和所述周期项的状态数据序列进行快速傅里叶逆变换以获得残差项。

在获得了残差项的状态数据序列后,相关性确定模块45可以根据这些残差项来确定指标的状态数据序列之间的相关性。例如,可以再将这样的各指标的状态数据序列通过基于相关性的距离算法(shaped-based distance, SBD)算法来计算指标之间的相关性。特别地,在本申请实施例中,由于在通过上述计算去除了趋势项和周期项的状态数据序列之间存在着偏移,因此不能够使用例如皮尔逊相关性算法等传统算法来根据这些状态数据序列计算指标之间的相关性,在本申请实施例中可以使用SBD算法来借助于其较低的时间复杂度的优势计算各指标的状态数据序列之间的相关性。

由于本申请的相关性确定模块45在相关性的计算过程中实际上同时记录了相关性最大值的偏移步长i,这可以用来表示x和y这两个序列所代表的指标之间的相互影响的先后顺序。此外,相关性确定模块47在计算过程中使用的窗口长度s,可以用来表示x和y这两个序列所代表的指标在多长时间范围内存在相关性。这些信息可以在例如图1中所示的后续的异常检测判断和根因分析中发挥作用,从而不仅降低了现有技术误判的概率而且还解决现有技术中无法在判断异常的情况下进一步给出根因指标分析的缺陷。

在本申请实施例中,相关性确定模块45的相关性计算可以以离线方式进行,当然也可以以在线方式进行。在如上获得了指标之间的相关性同时或之后,就可以将存储在数据库1中的各指标的状态数据序列输入到例如图1中所示的在线检测模块中。例如,可以先对于每个指标的状态数据序列进行各种预处理,例如,可以采用Z分数算法来进行归一化处理。

此外,还可以进行例如缺失性检测和根据周期性字典来进行周期指标的过滤,即直接去除掉本身就是周期性指标的指标。

分组模块42可以用于对于多个状态数据序列按照状态指标之间的相关性进行分组,以将具有相关性的状态指标的状态数据序列分在同一组中。

在获取模块41获取到目服务的多个状态数据序列之后,由于这些状态数据序列是多个不同的指标的状态数据序列,而这些指标及其数据序列也彼此之间存在着各种相关性。例如,在如图1中所示的场景中,从数据库1获取到包含有多个指标的运行数据1,而运行数据1可以是由表征各个指标的值随时间变化的状态数据序列构成的,而事件越复杂,则包含的指标越多,状态数据序列中指标的值随时间的变化越复杂。特别是在实际运行中,很多指标都是互相影响,换言之,当目标服务的运行期间发生某个事件时,不一定是由一个指标的异常而引起的,而是可能由多个指标的共同作用而引起的。相反地,某个指标的异常如果单独看来可能是异常事件发生的原因,但是在其异常变化的同时,其他指标很可能也在同时进行类似的变化,因此在整体看来该事件并非是异常事件,而可能仅是指标的整体波动。

因此,在本申请实施例的分组模块42可以将相关性确定模块45确定的这样彼此之间具有相关性的指标的状态数据序列分在一个分组中,这样每个分组中可以包含多个彼此之间具有相关性的指标的状态数据序列,或者也可以包含独立的与其他指标都不存在相关性的指标的状态数据序列。因此,在不同分组之间基本上不存在相关性,因此可以对于这些分组分别进行检测处理,特别是可以并行地进行处理,例如分配到多个线程来并行处理,从而这样能够提高整体的计算效率。

计算模块43可以用于对每一组中的状态数据序列分别使用至少两种异常检测模型分别计算异常分数,以获得目标服务的整体异常检测分数。

在本申请实施例中,对于分组模块42分组后的指标的状态数据序列使用串联集成算法来进行异常检测。例如可以使用至少两种异常检测模型来分别针对不同的异常类型进行异常检测处理,从而能够针对不同异常类型使用有针对性的检测算法执行检测。

例如,在本申请实施例中,计算模块43可以使用串联集成算法来进行异常检测。例如可以使用至少两种异常检测模型来分别针对不同的异常类型进行异常检测处理,从而能够针对不同异常类型使用有针对性的检测算法执行检测。

当在一个分组中仅存在一个指标时,即,在获得的多个指标的状态数据序列中,有至少一个指标与其他指标不存在相关性,在该情况下,计算模块43可以采用下述三种模型来计算该分组中指标的异常检测分数。

例如,可以使用学生T检验模型(Ttest)来确定平均值变化异常分数。之后还可以进一步使用联合假设检验模型(Ftest)来确定方差变化异常(change of variance,COV)分数。最后可以使用短期环比模型(SS)确定单峰单谷异常分数。具体地,先对当前时刻之前的环比窗口T内的数据进行中值滤波,以便于过滤掉该窗口T内的异常点,然后计算该窗口T内的均值,并且和当前值作差来作为异常分数。

此外,在分组过程中,还存在多个指标之间存在相关性的情况,即在某一个分组中存在彼此之间具有关联性的至少两个指标的状态数据序列,在该情况下,计算模块43可以采用例如下述模型来对该分组中的指标的状态数据序列进行处理。

例如,可以使用霍特林T平方(Hotelling T^2)模型确定多指标平均值变化(多指标COM)异常分数。之后,可以使用联合假设检验模型(Ftest)的多指标版本来计算多指标COV异常分数。接下来,还可以使用短期环比模型(SS)算法的多指标版本来计算多个指标情况下的峰/谷异常分数。

例如,可以获取该分组中的多个指标中的两个指标分别在第一时间长度范围内的第一长度时间序列,第一时间长度范围是该两个指标存在相关性的时间范围,之后可以根据每个指标的第一长度时间序列中的最大值最小值以及该第一长度时间序列的平均值确定多指标峰谷异常分数。

在本申请实施例中,由于上述串联多算法集成计算方式可以针对包含单个指标或多个指标的分组分别进行,因此计算模块43可以以并行的方式对于多个分组同时进行上述异常分数计算处理,以提高处理效率。

由于计算模块43对于每个分组使用了多种算法进行串联计算,而这些算法模型输出的异常分数值都属于不同类型,因此当基于这些模型的结果来计算整体异常检测分数时不能直接进行数值合并。对此,在本申请实施例中可以对每个模型获得的不同类型的异常分数值进行归一化处理,以便于在接下来进行数值合并。

例如,在本申请实施例中可以先将每个检测模型获得的异常分数与该检测模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值作为该模型的异常检测分数。例如,可以对于每个模型输出的异常分数实时记录,并且相应地实时更新数据库中的历史值并找到历史值中的最大异常分数值,从而将每次模型输出的异常分数与这样找到的历史最大异常分数值做比值,以将每个模型的每次输出的不同类型的异常分数值进行归一化为同类型的比值,从而在接下来的加权平均模块中进行数值合并。在本申请实施例中,在对归一化后的同类型的异常数值进行加权平均时,可以根据离线相关性分析以及对于服务所属的任务的在先经验来进行设置。因此,可以将各个分组获得的异常分数合并为表征该服务的整体异常检测分数。

此外,对于每一分组中的状态数据序列,还可以使用至少两种异常检测模型以串行方式依次计算异常分数。例如,可以对于每一分组依次应用上述模型计算该模型异常分数,并且对于当次计算出的异常分数进行异常判断,当例如该异常分数大于该模型的异常分数阈值时,可以确定当次该模型计算出的异常分数,因此可以将该异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数,而不再使用其他模型对该组中的状态数据序列计算异常分数。此外,如果当首先应用的模型计算出得异常分数并没有被确定为异常,则可以继续使用其他模型继续对该组的状态数据序列计算异常分数,并且例如当第二个应用的模型计算出的分数被确定为异常,则将该第二个模型的异常分数与该模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值,将该模型的比值作为该分组异常检测分数并不再继续使用其他模型进行异常分数计算。此外,如果所有预定的模型的计算结果都没有被确定为异常,则可以确定该组指标不存在异常。

因此,本申请实施例中,可以将串行异常模型应用中依次计算中首次大于异常分数阈值的异常分数与该异常分数对应的模型的历史最大异常分数进行比值处理,以获得该组的异常分数比值。

例如,计算模块43可以进一步包括比值计算单元431和加权单元432。

比值计算单元431可以用于将每个检测模型获得的异常分数与该检测模型的历史最大异常分数进行比值处理,以获得检测模型的异常分数比值作为同类型的异常检测分数。

加权单元432可以用于对异常分数比值进行加权平均处理,以获得整体异常检测分数。

由于计算模块43对于每个分组使用了不同的算法,而这些算法模型输出的异常分数值都属于不同类型,因此不能直接进行数值合并。对此,在本申请实施例中计算模块43可以将每个模型的每次输出的不同类型的异常分数值进行归一化为同类型的比值,以便于在接下来进行数值合并。

例如,比值计算单元431可以对于每个模型输出的异常分数实时记录,并且相应地实时更新数据库中的历史值并找到历史值中的最大异常分数值,从而将每次模型输出的异常分数与这样找到的历史最大异常分数值做比值,以将每个模型的每次输出的不同类型的异常分数值转换为同类型的数值,从而加权单元432可以进行数值合并。在本申请实施例中,加权单元432在对归一化后的同类型的异常比值进行加权平均时,可以根据离线相关性分析以及对于服务所属的任务的在先经验来进行设置。因此,通过结果合并模块就可以将各个分组获得的异常比值合并为表征该服务的整体异常检测分数。

确定模块44可以用于根据该整体异常检测分数确定目标服务的状态是否异常。

因此,计算模块43将使用不同检测模型获得的各组的异常分数归一化为同类型的比值之后,可以将这些比值进行合并以获得服务的整体异常检测分数,并且从而确定模块44可以根据该整体异常检测分数来确定目标服务的状态是否异常。例如可以判断该整体异常检测分数是否大于预设的报警阈值来确定目标服务的状态是否异常。

此外,本申请实施例的异常检测装置可以进一步包括阈值调整模块46。该阈值调整模块46可以如现有技术那样设置固定的报警阈值,并且当整体异常检测分数大于报警阈值时则发出报警。在本申请实施例中,为了增强异常检测系统的鲁棒性以及对于数据分布变化的实时反应,可以动态地设置该报警阈值。例如,可以使用极值分布-超越阈值(Extreme Value Distribution-Peaks Over Threshold Approach,EVT-POT)算法来确定动态报警阈值。然后使用超越阈值(POT)算法来进行参数估计以划分出实时数据中的异常部分,并且由此可以基于该异常部分来确定动态报警阈值。

此外,阈值调整模块46确定了动态报警阈值之后,在本申请实施例中还可以根据一段时间内,例如近期的报警次数对该动态报警阈值进行进一步的调节。例如,可以使用下面的公式(22)来根据报警次数对动态报警阈值进行调节。

此外,本申请实施例的异常检测装置还可以包括根因模块47。在本申请实施例中,由于在判断异常时引入了指标之间的相关性,因此在发生报警之后,根因模块47还可以对于该报警事件对应的根因进行推断,从而有利于用户对发生的异常事件进行及时的处理。例如,可以根据每个分组最终输出的异常比值进行排序,并且将大于指定阈值的比值的指标作为根因候选。当该根因候选指标是与其他无关而独立的指标时,可以直接单独输出该指标作为根因指标;而当该根因候选指标是属于包含彼此具有相关性的多个指标的分组,那么可以根据在计算相关性时给出的异常相关指标的先后异常顺序,将顺序靠前的几个指标输出作为根因指标。

此外,在本申请实施例中,由于对于每个分组的数据都采用由例如三种针对特定异常类型的异常检测统计算法进行串联计算,因此,当最终判定异常时可以根据具体是由于哪个算法判定的异常导致的,因此可以在输出最终的异常检测结果,即报警时同时输出该算法所针对的类型作为该异常事件的异常类型。

本申请实施例提供的异常检测装置,通过对于获取到的目标服务的多个状态数据序列按照指标之间的相关性进行分组,即将具有相关性的指标的状态数据序列分为一组,并且对每组中的状态数据序列分别使用至少两种异常检测模型计算异常检测分数,以获得整体异常检测分数并根据该整体异常检测分数确定目标服务是否存在异常。因此,本申请实施例的异常检测方案通过根据指标之间的相关性对指标的状态数据序列进行分组来分别计算异常检测分数以确定最终的整体异常检测分数,从而能够基于彼此具有相关性的指标来计算异常检测分数,提高了异常检测结果的准确性,并且由于将彼此之间具有相关性的指标的数据分在一组,因此可以更准确地确定异常检测结果中主要导致异常的根因指标。

实施例五

以上描述了异常检测装置的内部功能和结构,该装置可实现为一种电子设备。图5为本申请提供的电子设备实施例的结构示意图。如图5所示,该电子设备包括存储器51和处理器52。

存储器51,用于存储程序。除上述程序之外,存储器51还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。

存储器51可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

处理器52,不仅仅局限于中央处理器(CPU),还可能为图形处理器(GPU)、现场可编辑门阵列(FPGA)、嵌入式神经网络处理器(NPU)或人工智能(AI)芯片等处理芯片。处理器52,与存储器51耦合,执行存储器51所存储的程序,以执行上述实施例二或三的异常检测方法。

进一步,如图5所示,电子设备还可以包括:通信组件53、电源组件54、音频组件55、显示器56等其它组件。图5中仅示意性给出部分组件,并不意味着电子设备只包括图5所示组件。

通信组件53被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,3G、4G或5G,或它们的组合。在一个示例性实施例中,通信组件53经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件53还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。

电源组件54,为电子设备的各种组件提供电力。电源组件54可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。

音频组件55被配置为输出和/或输入音频信号。例如,音频组件55包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器51或经由通信组件53发送。在一些实施例中,音频组件55还包括一个扬声器,用于输出音频信号。

显示器56包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜