一种基于机器学习的异常检测方法和系统与流程

文档序号:23852831发布日期:2021-02-05 14:40阅读:204来源:国知局
一种基于机器学习的异常检测方法和系统与流程

[0001]
本发明涉及计算机技术领域,具体涉及一种基于机器学习的异常检测方法和系统。


背景技术:

[0002]
目前互联网的高速发展加速了各行各业企业的信息化转型,随着企业互联网业务的不断扩大,企业it系统中诸如计算、存储、网络、服务、应用、数据等各类资源的数量也在与日俱增。与此同时,资源故障发生的频率也在增加,为保障企业业务持续稳定地运行,构建一套集中监控这些资源的企业运维体系变得越来越重要。
[0003]
传统的运维方法主要通过设定固定阈值的方式进行资源关键性能指标的监控,但随着微服务、分布式等技术的兴起,面对监控数据量庞大、监控指标类别繁多的现代企业运维,传统的运维方式越来越难以适应新时代的需求,逐渐显现出许多弊端:
[0004]
(1)阈值检测的方法需要运维人员根据经验来设置合理的指标阈值,存在主观因素,且只能对监控值进行简单检测,无法发现更复杂的异常情况,例如周性监控指标中不符合同期规律的异常波动,最终产生大量误报、漏报情况,准确率较低。当监控指标数量较多时,该检测方法需要投入大量人力对每个指标进行阈值配置,导致企业运维监控的成本增加。
[0005]
(2)运维人员通过人工方式查看各项指标数据,需要耗费大量的人力,也易发生漏看指标数据的情况,难以进行大量数据的监控。
[0006]
(3)系统每天都会产生大量的异常事件,而将真正需要关注的事件淹没,消耗运维人员精力的同时也容易造成严重的损失。此外,在大量事件处理的过程中,由于信息不同步、人员变更、运维资源紧缺等原因,难以合理安排运维人员的时间,时常会出现异常处理不及时的现象,导致运维效率低下。


技术实现要素:

[0007]
针对现有技术中存在的上述技术问题,本发明提供一种基于机器学习的异常检测方法和系统,通过机器学习的方式进行异常检测,利于降低误报率和漏报率。
[0008]
本发明公开了一种基于机器学习的异常检测方法,所述方法包括:获取系统监控数据;基于至少两种机器学习方法分别构建异常检测模型;通过每个所述异常检测模型分别对所述监控数据进行检测,获取所述监控数据的异常情况,其中,所述异常情况包括正常和异常;设置第一阈值;判断所述异常情况为异常的异常检测模型比例是否在第一阈值以上;若是,判定所述监控数据为最终异常。
[0009]
优选的,本发明的方法还包括预判定的方法:根据所述监控数据,设置第二阈值;将大于所述第二阈值的监控数据,判定为疑似异常;将所述疑似异常发送给所述异常检测模型进行异常检测。
[0010]
优选的,本发明的方法还包括告警的方法:根据所述最终异常,生成告警信息。
[0011]
优选的,本发明的方法还包括异常过滤的方法:设置关注指标;基于所述关注指标,筛选所述最终异常,获得第一异常。
[0012]
优选的,本发明的方法还包括告警压缩的方法:设置压缩匹配规则;
[0013]
基于所述压缩匹配规则,对所述第一异常进行匹配,并判断是否匹配成功;
[0014]
若匹配成功,将所述第一异常标记为第二异常;
[0015]
判断所述第二异常是否满足预设条件,所述预设条件为在一定时间之前,有同源或同因的第二异常生成告警;
[0016]
若满足,将当前第二异常合并到所述告警中,其中,一个第二异常或第一异常仅可被合并到一个告警中;
[0017]
若不满足,基于当前第二异常生成告警;
[0018]
若匹配不成功,基于所述第一异常生成告警。
[0019]
优选的,本发明的方法还包括告警推送的方法:将告警存入数据库中;根据所述告警推送告警通知。
[0020]
优选的,将异常过滤规则、压缩匹配规则和告警推送规则保存在mysql数据库中;根据异常过滤规则进行异常过滤,获得第一异常,所述异常过滤规则包括关注指标或不关注指标;根据压缩匹配规则,对第一异常进行告警压缩,获得告警;将所述第一异常、告警和告警推送规则中的告警对象保存在mongodb数据库中;根据告警推送规则,将mongodb数据库中的告警推送给告警对象。
[0021]
优选的,所述机器学习方法包括以下算法的一种或多种的组合:局部异常因子算法、孤立森林算法、one-class-svm算法、cof算法、k-邻近算法和自编码器算法。
[0022]
本发明还提供一种用于实现上述方法的系统,所述系统包括:数据采集模块和数据处理模块;所述数据采集模块用于采集系统监控数据;所述数据处理模块用于基于至少两种机器学习方法分别构建异常检测模型;通过异常检测模型对所述监控数据进行检测,获取所述监控数据的异常情况;设置第一阈值;判断所述异常情况为异常的异常检测模型比例是否在第一阈值以上;若是,判定所述监控数据为最终异常。
[0023]
优选的,本发明的系统还包括事件展示模块,所述事件展示模块用于对所述最终异常及其相应的监控数据进行异常过滤和告警压缩后,将告警推送到前端,并进行展示;其中,异常过滤的方法包括:设置关注指标,基于所述关注指标,筛选所述最终异常,获得第一异常;其中,告警压缩的方法包括:设置压缩匹配规则;基于所述压缩匹配规则,对所述第一异常进行匹配,获得第二异常;判断一定时间之前,是否有同源或同因的第二异常生成告警;若是,将当前第二异常合并到所述告警中,其中,一个第二异常或第一异常仅可被合并到一个告警中;若否,基于当前第二异常生成告警。
[0024]
与现有技术相比,本发明的有益效果为:通过不同的机器学习方法构建多个异常检测模型,所述异常检测模型独立对监控数据进行处理,其中不同的机器学习方法检测原理和检测结果存在差异,当检测结果为异常的异常检测模型比例超过第一阈值时,判定为最终异常;一方面避免了其中一种机器学习方法的误差,使最终异常的判断更为准确,另一方面,监控数据通过所述异常检测模型进行自动处理,利于降低误报率和漏报率。
附图说明
[0025]
图1是本发明的异常检测方法流程图;
[0026]
图2是生成告警的方法流程图;
[0027]
图3是告警压缩的方法流程图;
[0028]
图4是告警推送的方法流程图;
[0029]
图5是本发明的系统逻辑框图。
具体实施方式
[0030]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0031]
下面结合附图对本发明做进一步的详细描述:
[0032]
一种基于机器学习的异常检测方法,如图1所示,所述方法包括:
[0033]
步骤101:获取系统监控数据。it系统的监控指标包括基础设施资源、网络设备资源、主机系统资源、数据库和中间件多个维度,但不限于此。可以从zabbix、prometheus或open-falcon等监控系统中获取监控数据。
[0034]
步骤102:基于至少两种机器学习方法分别构建异常检测模型。
[0035]
所述机器学习方法包括以下算法中的一种或它们的组合:lof算法、孤立森林算法、one-class-svm算法、cof算法、k-邻近(knn)算法和自编码器(autoencoder)算法。其中,上述算法为现有技术,根据上述算法构建异常检测模型也为现有技术,本发明中不再赘述。例如,根据lof算法,构建lof异常检测模型,根据孤立森林算法构建孤立森林模型。
[0036]
步骤104:通过每个所述异常检测模型对所述监控数据进行检测,获取所述监控数据的异常情况,其中所述异常情况包括正常和异常。
[0037]
步骤105:设置第一阈值,判断所述异常情况为异常的异常检测模型比例是否在第一阈值以上。
[0038]
若是,执行步骤106:判定所述监控数据为最终异常。在一个具体实施例,设置第一阈值为50%,即检测结果为异常的异常检测模型的数量在半数(50%)以上时,判断监控数据存在疑似异常,但不限于此,第一阈值的数值范围可以根据业务的需要,以及数据分析的判断进行调整。
[0039]
若否,判定所述监控数据为正常数据。
[0040]
本发明中,通过不同的机器学习方法构建多个异常检测模型,所述异常检测模型独立对监控数据进行处理,其中不同的机器学习方法检测原理和检测结果存在差异,当检测结果为异常的异常检测模型比例超过第一阈值时,判定为最终异常;一方面避免了其中一种机器学习方法的误差,使最终异常的判断更为准确,另一方面,监控数据通过所述异常检测模型进行自动处理,利于降低误报率和漏报率。
[0041]
本发明还可以包括预判定的方法:
[0042]
步骤103:根据所述监控数据,设置第二阈值;将大于所述第二阈值的监控数据,判定为疑似异常;将所述疑似异常发送给所述异常检测模型,进行异常检测。
[0043]
通过预判定的方法,减少异常检测模型的检测数据,以节约计算资源。
[0044]
本发明还提供生成告警的方法:
[0045]
根据所述最终异常,生成告警信息。
[0046]
一方面根据最终异常,生成告警信息,并发送给告警对象,即相关的负责人,利于对it系统进行及时维护。
[0047]
如图2所示,生成告警方法可以包括:
[0048]
步骤201:异常过滤。
[0049]
步骤202:告警压缩。通过告警压缩,以避免产生告警风暴。
[0050]
步骤203:告警推送。
[0051]
步骤201中,所述异常过滤的方法包括:
[0052]
设置关注指标;
[0053]
基于所述关注指标,筛选所述最终异常,获得第一异常。
[0054]
检测监控数据中的维度多样,如计算能力、网络使用率、存储量、存储率、数据库写入量、ip地址、对象类型、告警对象、监控项、标签等,可以根据业务的需要,选择业务中涉及的主要指标作为关注指标,如云计算业务中,以计算能力、网络使用率作为关注指标,而对存储量等指标作为非关注指标,非关注指标的最终异常,可以不产生或不推送告警。通常,监控数据可以存储在数据库中,如mysql或mongodb。
[0055]
但不限于此,如也可以通过关注指标,对监控数据进行筛选,通过异常检测模型对关注指标的监控数据或疑似异常进行检测。
[0056]
如图3所示,步骤202中,告警压缩的方法包括:
[0057]
步骤301:设置压缩匹配规则。压缩匹配规则用于筛选在一定时间内产生的,相同或相似的最终异常。
[0058]
步骤302:基于所述压缩匹配规则,对所述第一异常进行匹配,并判断是否匹配成功。
[0059]
其中,压缩匹配规则可以有多个,并且可以为所述压缩匹配规则设置优先级,根据优先级的顺序依次使用压缩匹配规则,对第一异常进行匹配,第一异常匹配到一个压缩匹配规则时,该第一异常不再被其余的压缩匹配规则所匹配,使一个第一异常仅被压缩到一个告警中。当第一异常没有匹配到相应的压缩匹配规则时,根据所述第一异常生成告警。
[0060]
若匹配成功,执行步骤303:将所述第一异常作为第二异常,并执行步骤304。
[0061]
步骤304:判断所述第二异常是否满足预设条件,所述预设条件为在一定时间之前,有同源或同因的第二异常生成告警。如10分钟分钟之前,是否基于同源或同因的第二异常生成告警。
[0062]
若满足,执行步骤305:将当前第二异常合并到所述告警中,其中,一个第二异常或第一异常仅可被合并到一个告警中。其中,合并是指,将当前第二异常设置在所述告警的异常明细中。在已生成告警的情况下,在一定时间内,新产生的符合所述压缩匹配规则的第一异常合并到第二告警中,不再产生新的告警。应当指出的是,一个第一异常仅能计入一个告警中,即第一异常并入告警后,不再产生或并入其它告警。
[0063]
若不满足,执行步骤306,基于当前第二异常生成告警。
[0064]
例如10分钟内,相同内容的第一异常作为第二异常,并生成一条告警。再如5分钟
内,同一维度(如计算能力)产生的第一异常作为第二异常,并生成一条告警。通过告警压缩,将多个相同或相似的告警合并为一条告警,避免在一个时间内产生大量相同或相似的告警信息,形成告警风暴。
[0065]
若匹配不成功,执行步骤307,基于所述第一异常生成告警。
[0066]
其中,压缩匹配规则可以根据业务需要进行设定。在一个具体实施例中,基于mongodb中的配置进行告警压缩,mongodb是一个基于分布式文件存储的数据库,性能是非常迅速,将热数据存储在物理内存中,使得热数据的读写变得十分快;以及基于kafka消息系统进行告警推送,kafka是一种高吞吐量的分布式发布订阅消息系统。
[0067]
步骤203中,告警推送的方法包括:将告警存入数据库中;根据所述告警推送告警通知。
[0068]
具体的,如图4所示,告警的方法包括:
[0069]
步骤401:将异常过滤规则、压缩匹配规则和告警推送规则保存在mysql数据库中。
[0070]
步骤402:根据异常过滤规则进行异常过滤,获得第一异常,所述异常过滤规则包括关注指标或不关注指标。
[0071]
步骤403:根据压缩匹配规则,对第一异常进行告警压缩,获得告警。
[0072]
步骤404:将所述第一异常、告警和告警推送规则中的告警对象保存在mongodb数据库中。
[0073]
步骤405:根据告警推送规则,将mongodb数据库中告警推送给告警对象。可以基于kafka消息系统进行推送,推送的方式可以包括钉钉、微信、邮件、短信或系统通知。
[0074]
本发明还可以包括对监控数据进行预处理的方法:将监控数据进行标准化处理,转换为标准格式,并对监控数据进行清洗,去除重复数据。
[0075]
本发明还提供一种用于实现上述异常检测方法的系统,如图5所示,所述系统包括:数据采集模块1和数据处理模块2;
[0076]
数据采集模块1用于获取系统监控数据;
[0077]
数据处理模块2用于基于至少两种机器学习方法分别构建异常检测模型;并通过异常检测模型对所述监控数据进行检测,获取所述监控数据的异常情况;设置第一阈值,判断所述异常情况为异常的异常检测模型比例是否在第一阈值以上;若是,判定所述监控数据为最终异常。
[0078]
本发明的系统,还可以包括事件展示模块3,
[0079]
事件展示模块3用于对所述最终异常及其相应的监控数据进行异常过滤和告警压缩后,将告警推送到前端,并进行展示;
[0080]
其中,异常过滤的方法包括:设置关注指标,基于所述关注指标,筛选所述最终异常,获得第一异常;
[0081]
其中,告警压缩的方法包括:设置压缩匹配规则;
[0082]
基于所述压缩匹配规则,对所述第一异常进行匹配,并判断是否匹配成功;
[0083]
若匹配成功,将所述第一异常作为第二异常;
[0084]
判断所述第二异常是否满足预设条件,所述预设条件为在一定时间之前,有同源或同因的第二异常生成告警;
[0085]
若满足,将当前第二异常合并到所述告警中,其中,一个第二异常或第一异常仅可
被合并到一个告警中;
[0086]
若不满足,基于当前第二异常生成告警;
[0087]
若匹配不成功,基于所述第一异常生成告警。
[0088]
lof算法是指局部异常因子算法(local outlier factor),是一个典型的基于距离的异常检测算法,通过计算局部可达密度和局部离群因子来反映一个样本的异常程度,一个样本点的局部可达密度越大,这个点就越有可能是异常点。
[0089]
检测点的局部可达密度高于其邻域点局部可达密度,判断检测点为密集点;检测点的局部可达密度小于其邻域点局部可达密度,检测点可能为异常点。
[0090]
孤立森林算法(isolationforest)是异常检测中应用广泛的一种无监督学习算法。一个孤立森林(iforest)由多个孤立树(itree)构成,其中孤立树是一种树,这种的特点树中每非叶子点都拥两个子点。通过递归地随机分割数据集,直到所有的样本点都是孤立的。在这种随机分割的策略下,异常点通常具有较短的路径。正常点需要更多次的分割才能被孤立,而异常点需要较少的分割次数就能被孤立。
[0091]
one-class-svm算法是一种无监督学习的方法,寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本,在圈外的样本认为是异常样本。
[0092]
cof算法是指基于连接性的异常因子(connectivity-based outilier factor)算法,与lof中计算欧式距离不同的是,cof的局部密度是根据最短路径方法求出的,也叫做链式距离。
[0093]
knn算法,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,一般使用欧氏距离或曼哈顿距离。
[0094]
autoencoder算法是先用正常的数据集训练一个auto encoder模型,用训练出的auto encoder模型计算异常数据的重建误差,重建误差大于某个阀值α,则为异常,否则为正常。
[0095]
在一个具体例中,异常检测方法包括:
[0096]
从zabbix系统中获取监控数据;
[0097]
根据用户设置的指标,对监控数据进行筛选和预处理后,转换为规范化数据,指标可以包括cpu使用率、内存使用率、数据库读取次数和访问ip等;
[0098]
根据所述指标,分别基于lof算法、孤立森林算法及one-class-svm(ocs)算法训练异常检测模型,得到lof模型、孤立森林模型和ocs模型;
[0099]
根据历史监控数据,设置第二阈值,监控数据中的指标大于第二阈值时,判定为疑似异常数据,如以cpu使用率大于50%作为第二阈值;
[0100]
分别通过lof模型、孤立森林模型和ocs模型对疑似异常数据进行检测;
[0101]
设置第一阈值为50%;
[0102]
lof模型、孤立森林模型和ocs模型独立对疑似异常数据进行检测,检测结果为异常的模型比例在50%以上时,判定疑似异常数据为最终异常;
[0103]
根据用户关注的指标,如数据库读取次数作为关注指标,对最终异常进行过滤得到第一异常,基于压缩匹配规则对第一异常进行匹配得到第二异常,如将10分钟内同一指标的第一异常作为第二异常,生成告警信息;同时将该10分钟内后续生成的第二异常合并
进该告警信息中;
[0104]
最终异常存储到数据库中,用于查看或展示,同时将告警信息通过kafka消息系统推送给系统负责人或告警对象。
[0105]
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1