具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
数据处理***需要应对规模越来越大的数据量,尤其是对于支持多业务的数据处理***。数据处理***通常需要通过一定规模的服务器协作来实现大规模的数据处理,对于支持多业务的***,一般还会分平台来为不同的业务提供支持,每个平台可以包括一个或多个服务器。
以数据处理***为蚂蚁金服业务数据处理***为例进行说明。蚂蚁金服业务主要涉及便民生活、财富管理、资金往来以及购物娱乐等数百种业务,支撑这些业务***平台数量就达数百。由于平台的庞大数量使得代码、数据库和配置等的变更会非常频繁,每周发生的变更可能会成千上万次甚至更多。但是,蚂蚁金服业务处理***在运行过程中,实际出现故障的次数并不频繁,甚至仅仅部分平台出现过故障,这就导致蚂蚁金服在运行过程中采样的历史数据中,异常数据的覆盖面不够,使得使用历史数据作为依据进行异常检测时,检测效果不理想。另外,由于历史异常数据的匮乏,识别出的异常数据很难与历史异常数据中对应上,这样就很难通过历史数据来分析的出现异常数据的根因,需要经验丰富的技术人员来判断,成本高且效率低。
针对以上问题,本说明书实施例提供一种异常检测方法及装置,下面首先对本说明书实施例方案的运行***架构进行说明。参见图1所示,本说明书实施例方案涉及的实体包括:数据处理***100以及计算机设备200,数据处理***100中可以包括业务服务器以及终端等等。该计算机设备200可以独立于数据处理***100,也可以通过数据处理***100中的设备实现其功能,例如,计算机设备200的功能可以由业务网络100中的业务服务器实现。
在本说明书实施例中,通过计算机设备200训练异常检测模型,并通过训练的异常检测模型对数据处理***100的待检测数据进行异常检测。
结合图2所示,在一个示例中,计算机设备200通过获取异常数据并对异常数据进行延伸,以更新训练集合中的异常样本,在根据更新后的训练集合对异常检测模型进行训练时,若训练得到的异常检测模型的识别效果未达到预期,则继续获取异常数据,并对异常数据进行延伸,以更新训练集合中的异常样本,直至根据更新后的训练集合训练得到的异常检测模型的识别效果达到预期,则训练结束,进而,使用经过训练最终得到的异常检测模型对数据处理***的待检测数据进行异常检测。其中,每次更新训练集合时,训练集合中的异常样本都会增加,以此可以获取足够多的异常样本来作为异常检测的依据。
在另一示例中,结合图3所示,计算机设备200在每次更新训练集合时,可以量化获取以及延伸的异常数据,以实现训练集合每次更新后,异常样本增加指定数量或百分百。例如,可以通过异常样本的参数覆盖率来控制每次训练集合更新的异常样本。
基于此,在本说明书实施例中,首先,通过获取异常数据并对异常数据进行延伸,以更新训练集合中的异常样本,然后,确定更新后的训练集合中异常样本的参数覆盖率是否达到预期。
如果未达到,则继续对异常样本进行延伸。
若达到,则根据更新后的训练集合对异常检测模型进行训练。若训练得到的异常检测模型的识别效果未达到预期,则继续获取异常数据,并对异常数据进行延伸,以更新训练集合中的异常样本,并确保更新后的训练集合中的异常样本的参数覆盖率达到预期,直至根据更新后的训练集合训练得到的异常检测模型的识别效果达到预期,则训练结束。
在另一示例中,结合图4所示,计算机设备200在每次更新训练集合时,还可以结合识别效果来获取异常样本或者对异常样本进行延伸。在一个示例中,可以根据识别效果来调整延伸异常样本的方式,例如,训练后的异常检测模型对于某一业务对应的异常样本识别效果较差时,在后续延伸异常样本时,可以重点增加该业务对应的异常样本的数据量或参数覆盖率。
在本说明书实施例中,异常样本的生成过程(包括异常数据的获取以及延伸)可以认为是进攻闭环,而根据更新后的训练集合训练异常检测模型可以认为是防守闭环。通过进攻闭环可以获得足够多的异常样本,通过防守闭环可以有效训练异常检测模型,通过攻防对抗可以有效的提高异常检测模型的识别效果。进一步地,通过异常样本的参数覆盖率或者数据量可以量化进攻,使得训练异常检测模型更容易迭代。
下面结合附图对本发明的实施例进行进一步地介绍。
图5为本说明书实施例提供的异常检测方法的流程示意图。该方法适用于计算机设备,如图5所示,该方法具包括步骤510-560:
步骤510,获取***正常运行时的采样数据,将采样数据作为训练集合中的正常样本。
本说明书所提供的方案,可以在数据处理***正常运行时周期性进行采样,获取数据处理***正常运行时的采样数据,例如,可以每分钟对数据处理***正常运行的数据进行采样。然后,将获取到的数据处理***正常运行时的采样数据标记为一类,作为训练样本中的正常样本。例如,数据处理***正常运行时的采样数据类标为“0”,该类标“0”用于指示其标记的数据为正常样本。
其中,在***调用链路、参数、***变更这个级别进行检测得到***正常运行时的多种明细数据,根据该明细数据进行异常检测灵活性高,识别效果的理论上限高。这里数据处理***正常运行的数据包括调用数据、指标数据、变更数据以及运维数据中的一种或多种。
具体地,调用数据可以包括调用链路、接口名、入参、出参以及调用耗时等中的一项或多项。其中,调用链路可以为一个有向无环图,点是调用接口、边是调用关系。其中,该调用数据可以是针对调用请求来说的,例如,蚂蚁金服数据处理***中,终端调用支付服务的请求。
指标数据可以为数据处理***的关键指标,例如,可以是以时间序列的形式按分钟汇集的各个业务的***调用量。
变更数据可以为代码发布以及数据处理***配置修改等操作触发变更的信息。
运维数据可以包括硬件数据。例如,CPU占用、网络延时以及内存占用等等。
步骤520,根据预制规则获取异常数据。
其中,预制规则可以根据实际需求确定,例如,预制规则可以为依次生成对数据处理***中各个业务的故障请求,以使得得到的异常样本对应数据处理***中的各个业务,异常样本的覆盖率高。
在本说明书实施例提供的方案中,可以根据预制规则生成故障请求,获取故障请求的上下文数据,将该故障请求的上下文数据作为异常样本增加在训练集合中。
其中,该故障请求的上下文数据可以为采集的数据处理***在接收到故障请求后的运行数据。该上下文数据可以包括调用数据、指标数据、变更数据以及运维数据中的一种或多种。
循环执行步骤530-560,直至异常检测模型的识别效果达到预期:
步骤530,对异常数据进行延伸,将异常数据和延伸的异常数据作为异常样本增加在训练集合中。
在一个示例中,可以通过规则的延伸,以实现异常数据的延伸。基于此,首先可以将根据预制规则生成的异常检测数据增减在训练集合中,然后对预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取延伸的故障请求的上下文数据,将延伸的故障请求的上下文数据作为异常样本增加在训练集合中。
在另一个示例中,首先可以将根据预制规则生成的异常检测数据增减在训练集合中,然后循环执行如下步骤,直至训练集合中的异常样本的参数覆盖率达到预期:对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取延伸的故障请求的上下文数据,将延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中;判断训练集合中的异常样本的参数覆盖了是否达到预期,当训练集合中的异常样本的参数覆盖率未达到预期时,将延伸后的预制规作为新的预制规则。例如,判断训练集合中的异常样本的参数覆盖了是否达到预期可通过判断训练集合中的异常样本是否遍布各个业务,以及各个业务对应的异常样本的数量是否达到阈值来实现。
其中,当根据异常样本的参数覆盖率达到预期的训练集合训练异常检测算法时,该异常检测算法的识别效果未达到预期,此时可以提高异常样本的参数覆盖率的预期值。
对预制规则的延伸,可以结合业务规则,或采用取巧的方式进行延伸。例如,可以通过以下一种或多种方式延伸:
根据数据处理***运行过程中的历史故障进行延伸;
根据故障请求同类型的历史故障进行延伸;
根据用例库可能出现的故障进行延伸;
智能故障延伸,例如,可以将根据故障请求采集的上下文作为种子样本,采用遗传算法来进行故障延伸。
另外,可以将故障请求的上下文数据标记为一类,作为训练样本中的异常样本。例如,故障请求的上下文数据类标为“1”,该类标“1”用于指示其标记的数据为异常样本。
步骤540,根据增加异常数据后的训练集合对异常检测模型进行训练,并确定异常检测模型的识别效果。
本说明书所提供的方案,首先,可以对训练集合中的样本进行特征预处理。这里可以采用多种特征预处理方式,以得到参数表达、结构表达、指标汇聚以及变更表达中的一种或多种表达形式的特征。每种特征表达形式的特征,可以对应一个或多个异常检测模型,每种特征表达形式的特征对应的异常检测模型不同。
然后,分别根据每种特征表达形式的特征训练其对应的异常检测模型。例如,根据指标汇聚特征训练时间序列异常检测模型;根据结构表达的特征可以训练基于图的异常检测算法;根据参数表达或变更表达的特征,可以训练基于临近点的、线性的、基于子空间的和基于监督学习等的异常检测模型。
其中,在训练异常检测模型时,可以确定异常检测模型的识别效果,在识别效果恒定之后,该恒定的识别效果即为训练后的异常检测模型的识别效果。
另外,识别效果可以通过识别准确率、识别覆盖率以及KS值等中的一项或多项表示。
步骤550,判断异常检测模型的识别效果是否达到预期。
该预期可以为识别准确率、识别覆盖率以及KS值等中的一项或多项对应的阈值,例如,该预期可以为识别准确率不低于99.5%。
步骤560,当异常检测模型的识别效果低于预期时,根据预制规则获取新的异常数据。
在步骤560中的预制规则可以为延伸后的预制规则,也可以是初始预制规则,该初始预制规则可以是指未发生延伸的预制规则。
另外,在每次更新训练集合时,还可以结合识别效果来获取异常样本或者对异常样本进行延伸。在一个示例中,可以根据识别效果来调整延伸预制规则的方式,例如,训练后的异常检测模型对于某一业务对应的异常样本识别效果较差时,延伸的预制规则可以重点增加针对该业务的故障请求的生成,以获取该业务对应的更丰富的异常样本,从而增加训练得到的异常检测模型在识别该业务对应的待检测数据时的能力。
步骤570,当异常检测模型的识别效果达到预期时,使用识别效果达到预期的异常检测模型对待检测数据进行异常检测。
在本说明书实施例中,可以在数据处理***接收到业务处理请求时,触发根据识别效果达到预期的异常检测模型进行异常检测。在触发异常检测后,可以实时或周期性的采集业务处理请求产生的待检测数据。该待检测数据包括调用数据、指标数据、变更数据以及运维数据中的一种或多种。
在利用异常检测模型检测待检测数据时,可以首先对待检测数据进行特征预处理,这里可以采用多种特征预处理方式,以得到参数表达、结构表达、指标汇聚以及变更表达中的一种或多种表达形式的特征。
使用每种表达形式的特征对应的异常检测模型识别该特征是否异常。当同一种表达形式的特征对应多个异常检测模型时,若该多个异常检测模型得到的检测结果不一致,可以通过投票的方式确定该特征是否异常。
通过本说明书实施例,可以获取异常数据,并对异常数据进行延伸,以此得到更多的异常样本,结合正常样本得到正样本和负样本都比较充足的训练集合,从而提高根据该训练集合训练的异常检测模型进行检测的故障识别的准确性。
通过对抗式构建攻防闭环,量化攻击和防御效果,使得迭代良性循环,解决了异常检测迭代困难的问题。
通过数据精细化识别与定位,提升了识别效果的空间,同时也给确定故障根因提供了基础,更快帮助***定位到问题。可以在***调用链路、参数、***变更这个级别进行检测,故障注入时采集的上下文切片可以保存精细化数据,可以较完整的还原***故障时的情况,识别时融合多种明细数据源,灵活性高、识别效果好,同时在定位故障时,结合精细化数据。
相应于上述方法实施例,本说明书实施例还提供一种异常检测装置,参见图6所示,该装置可以包括:
第一获取单元601,用于获取***正常运行时的采样数据,将所述采样数据作为训练集合中的正常样本;
第二获取单元602,用于根据预制规则获取异常数据。
循环单元603,用于循环执行下述延伸单元、训练单元以及所述第二获取单元执行的步骤,直至异常检测模型的识别效果达到预期,以便使用识别效果达到预期的异常检测模型对待检测数据进行异常检测;
所述延伸单元604,用于对所述异常数据进行延伸,将所述异常数据和延伸的异常数据作为异常样本增加在所述训练集合中;
所述训练单元605,用于根据增加异常数据后的训练集合对所述异常检测模型进行训练,并确定所述异常检测模型的识别效果;
第二获取单元602还用于,当所述异常检测模型的识别效果低于预期时,根据所述预制规则获取新的异常数据。
在一个示例中,所述训练集合中的样本包括调用数据、指标数据、变更数据以及运维数据中的一种或多种。
在另一个示例中,训练单元605具体用于,
将所述训练集合中的样本进行特征预处理,得到参数表达、结构表达、指标汇聚以及变更表达中的一种或多种表达形式的特征,其中,每种表达形式对应一个或多个异常检测模型;
分别根据每种表达形式的特征训练对应的异常检测模型。
在另一个示例中,第二获取单元602具体用于,根据预制规则生成故障请求,获取所述故障请求的上下文数据。
在另一个示例中,延伸单元604具体用于,对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据,将所述故障请求的上下文数据和所述延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中。
在另一个示例中,延伸单元604具体用于:
循环执行如下步骤,直至训练集合中的异常样本的参数覆盖率达到预期:
对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据,将所述故障请求的上下文数据和所述延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中;
当训练集合中的异常样本的参数覆盖率未达到预期时,将延伸后的预制规作为新的预制规则。
述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机设备可以实现为异常检测服务器的形式。其中,处理器执行所述程序时实现前述的异常检测方法。该方法至少包括:
获取***正常运行时的采样数据,将所述采样数据作为训练集合中的正常样本;
根据预制规则获取异常数据,循环执行如下步骤,直至异常检测模型的识别效果达到预期,以便使用识别效果达到预期的异常检测模型对待检测数据进行异常检测:
对所述异常数据进行延伸,将所述异常数据和延伸的异常数据作为异常样本增加在所述训练集合中;
根据增加异常数据后的训练集合对所述异常检测模型进行训练,并确定所述异常检测模型的识别效果;
当所述异常检测模型的识别效果低于预期时,根据所述预制规则获取新的异常数据。
在一个示例中,所述训练集合中的样本包括调用数据、指标数据、变更数据以及运维数据中的一种或多种。
在另一个示例中,所述根据所述训练集合对所述异常检测模型进行训练包括:
将所述训练集合中的样本进行特征预处理,得到参数表达、结构表达、指标汇聚以及变更表达中的一种或多种表达形式的特征,其中,每种表达形式对应一个或多个异常检测模型;
分别根据每种表达形式的特征训练对应的异常检测模型。
在另一个示例中,所述根据预制规则获取异常数据包括:
根据预制规则生成故障请求,获取所述故障请求的上下文数据。
在另一个示例中,对所述异常数据进行延伸,将所述异常数据和延伸的异常数据作为异常样本增加在所述训练集合中包括:
对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据,将所述故障请求的上下文数据和所述延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中。
在另一个示例中,所述对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据包括:
循环执行如下步骤,直至训练集合中的异常样本的参数覆盖率达到预期:
对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据,将所述故障请求的上下文数据和所述延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中;
当训练集合中的异常样本的参数覆盖率未达到预期时,将延伸后的预制规作为新的预制规则。
图7示出了本说明书实施例所提供的一种更为具体的计算机设备结构示意图,该计算机设备可以包括:处理器710、存储器720、输入/输出接口730、通信接口740和总线750。其中处理器77、存储器720、输入/输出接口730和通信接口740通过总线750实现彼此之间在设备内部的通信连接。
处理器710可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器720可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器720可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器720中,并由处理器710来调用执行。
输入/输出接口730用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口740用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线750包括一通路,在设备的各个组件(例如处理器710、存储器720、输入/输出接口730和通信接口740)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器710、存储器720、输入/输出接口730、通信接口740以及总线750,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的异常检测方法。该方法至少包括:
获取***正常运行时的采样数据,将所述采样数据作为训练集合中的正常样本;
根据预制规则获取异常数据,循环执行如下步骤,直至异常检测模型的识别效果达到预期,以便使用识别效果达到预期的异常检测模型对待检测数据进行异常检测:
对所述异常数据进行延伸,将所述异常数据和延伸的异常数据作为异常样本增加在所述训练集合中;
根据增加异常数据后的训练集合对所述异常检测模型进行训练,并确定所述异常检测模型的识别效果;
当所述异常检测模型的识别效果低于预期时,根据所述预制规则获取新的异常数据。
在一个示例中,所述训练集合中的样本包括调用数据、指标数据、变更数据以及运维数据中的一种或多种。
在另一个示例中,所述根据所述训练集合对所述异常检测模型进行训练包括:
将所述训练集合中的样本进行特征预处理,得到参数表达、结构表达、指标汇聚以及变更表达中的一种或多种表达形式的特征,其中,每种表达形式对应一个或多个异常检测模型;
分别根据每种表达形式的特征训练对应的异常检测模型。
在另一个示例中,所述根据预制规则获取异常数据包括:
根据预制规则生成故障请求,获取所述故障请求的上下文数据。
在另一个示例中,对所述异常数据进行延伸,将所述异常数据和延伸的异常数据作为异常样本增加在所述训练集合中包括:
对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据,将所述故障请求的上下文数据和所述延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中。
在另一个示例中,所述对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据包括:
循环执行如下步骤,直至训练集合中的异常样本的参数覆盖率达到预期:
对所述预制规则进行延伸,根据延伸后的预制规则生成延伸的故障请求,获取所述延伸的故障请求的上下文数据,将所述故障请求的上下文数据和所述延伸的故障请求的上下文数据作为异常样本增加在所述训练集合中;
当训练集合中的异常样本的参数覆盖率未达到预期时,将延伸后的预制规作为新的预制规则。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。