基于孤立森林算法的分布式服务故障分析模型研究与应用

2021-05-29 06:25
信息通信技术 2021年2期
关键词:运维监控森林

中国联合网络通信有限公司济南软件研究院 济南 250100

引言

随着互联网业务的全面发展,企业IT架构发生重大变化,分布式云化架构应用越来越多,传统运维模式面临越来越多的挑战,难以适应业务的高速发展需求[1]。目前,信息化系统广泛微服务化,运维机器数量、容器数量、外部服务日均调用量、系统服务数量均显著上升。在此规模下,支撑难度、运维难度、排查问题难度呈几何增长,对运维模式及技术有更高的要求。

互联网业务具有业务无间断在线、业务敏感性较高、负面影响大、传播范围广、传播速度快等特点,对运维要求越来越高,传统运维模式已无法适应互联网业务的高速发展需求,智能运维(AIOps)成为必不可少的运维利器[2]。

在大型互联网架构中,为提升平台计算能力及资源利用率,普遍采用分布式技术。然而使用分布式技术也会带来一些潜在问题,若主机资源需求与资源分配不均匀、部分主机长时间负载过重,容易导致服务失效,造成服务中断甚至数据丢失;同时当系统发生故障时,服务分散在不同主机会导致故障问题难以定位、故障排查耗时较长等问题[3]。

通过国内外相关文献分析,目前针对分布式服务故障分析的研究仍处于初级阶段。其中大部分系统是根据领域知识人工设定报警规则,难以自动检测故障并细粒度定位问题原因[4]。近年来机器学习算法广泛应用于各项领域,其中孤立森林算法是十分优秀的异常检测算法[5],然而目前尚未有研究人员将孤立森林算法应用于大型分布式系统中进行故障分析。

针对上述优缺点并借鉴国内外相关文献,本文提出一种基于孤立森林算法的分布式服务故障分析模型。通过采集分布式环境中服务主机监控数据及服务调用耗时数据,对采集到的时序数据通过滑动平均算法计算生成阈值区间,并利用孤立森林算法对预处理后的数据进行模型计算,构建合适的异常分析模型,实现了分布式环境下服务故障分析功能,有效提升了运维人员的工作效率并减轻了运维人员的工作负担,同时协助运维人员快速排查问题,达到对分布式服务故障快速定位快速处理的效果。

1 相关算法

1.1 滑动平均算法

滑动平均算法是时间序列分析算法的一种,可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。比较常用的滑动平均算法有简单移动平均法、加权移动平均法、自回归滑动平均模型等,目前工业界比较流行的滑动平均算法为自回归滑动平均模型。

自回归滑动平均模型(Auto-Regressive and Moving Average Model,ARMA)是研究时间序列的重要算法,根据时间序列数据逐项推移,依次计算包含一定项数的时序平均值,以反映长期趋势[6]。

ARMA模型的计算公式为:

由于本文系统采集到的监控数据具有一定的时间序列性,因此选择ARMA模型对监控数据进行时间序列分析,方便后续模型计算。

1.2 孤立森立算法

孤立森林算法是一种适用于连续数据的无监督异常检测方法,其基本思想是计算对象与对象之间的差异,通过检测两点距离或某一区域点的密度,计算异常点得分,分值越高,则代表对象越有可能是异常点[5]。

对于如何查找哪些点容易被孤立,孤立森林算法使用了一套非常高效的策略。在构建孤立森林模型中,递归地随机分割数据集,直到所有样本点都是孤立的。在这种随机分割的策略下,异常点通常具有较短的路径。即密度高的簇是需要被切很多次才能被孤立,而密度低的点很容易就可以被孤立。这里参考下面的图1、2进行说明。

图1 孤立森林算法示意图

图2 平均分割路径长度

从图2中可以直观地看到,相对更异常的点x0只需要4次切割就从整体中被分离出来,而更加正常的点xi经过了11次分割才从整体中分离出来。这里的分割方式采用的是,随机选择一个特征以及拆分的值(这个值位于该特征的最小值和最大值之间)。其中图2展示了异常点的平均路径长度小于正常点的平均路径长度。

2 基于孤立森林算法的分布式服务故障分析模型

2.1 背景介绍

分布式系统即一组异构计算机和处理器通过网络联接在一起,通过机器间紧密配合,共同完成一项任务[1]。不同主机的性能都会对分布式系统中的服务有一定影响,因此本文的关键数据为分布式系统中不同服务下的主机性能数据。通过监控工具实时采集分布式系统中各主机的性能指标数据,其中监控工具采集到的主机性能特征指标为:网络流入流量、网络流出流量、用户CPU使用率、系统CPU使用率、CPU整体剩余情况、写IO量、ICMP、数据库连接数、数据库慢SQL数量、数据库长连接数量等,采集到的监控数据如表1所示。

表1 监控数据

针对分布式服务故障分析场景,本文的目标是对监控数据构建模型,给出故障的定位及原因。本模型需要完成的两大任务是异常检测及异常分析,其中异常检测是通过AI异常检测模型找出分布式服务中发生故障的主机及引起服务故障的性能指标,而异常分析是通过大数据统计分析出导致故障发生的异常信息。

由于本文的异常检测场景是在监控数据中寻找异常值,同时采集到的监控数据具有连续性,因此选择孤立森林算法比较合适;同时采集到的监控数据具有时间序列性,因此选择滑动平均算法对监控数据进行时间序列分析。

2.2 基于孤立森林算法的分布式服务故障分析模型

基于孤立森林算法的分布式服务故障分析模型由两部分组成,一个是异常检测模型,另一个是异常分析模型,其中异常检测模型为核心模型。

异常检测模型的主要思想是通过滑动平均算法对一段时间内单一主机单一性能指标数据利用孤立森林算法进行模型训练,生成异常检测模型,对不同主机不同性能指标数据进行异常检测,从而实现对分布式服务故障进行问题定位。

目前工业界异常检测场景中效果较好的算法即孤立森林算法,同时孤立森林算法是无监督机器学习算法,无需对数据进行人工打标处理,能够节省很多人工成本,因此本文选择孤立森林算法构建异常检测模型。然而本文中采集到的监控数据具有时间序列性,因此选择滑动平均算法对监控数据进行时间序列分析,进行数据处理,方可进行模型训练。异常检测模型流程图如图3所示。

图3 异常检测模型流程图

异常检测模型的核心代码如下:

异常检测模型主要使用sklearn代码库中的Isolation Forest以及Numpy、Scipy等科学计算包分别实现了孤立森林算法及滑动平均算法,针对不同主机不同指标分别进行模型训练,对训练好的模型统一进行保存,方便系统调用。

异常分析模型的主要思想是对一段时间内异常检测出的异常值进行不同维度的大数据统计分析,通过对各种指标进行聚合,统计得出这一段时间内哪些主机哪些指标频繁发生异常,并通过异常得分排序得出故障发生的IP及指标,从而为运维人员节省大量时间及精力,提高了问题排查的效率。异常分析模型流程图如图4所示。

图4 异常分析模型流程图

从图4可以看出,模型会针对实时获取的监控数据调用已训练完成的异常检测模型,生成异常检测结果,再对一段数据内调用到的异常检测结果进行大数据统计,针对不同主机统计结果排序可以定位故障主机,针对不同指标统计结果排序可以定位故障指标,由此对故障进行根因定位。

3 基于孤立森林算法的分布式服务故障分析系统

3.1 技术架构

基于孤立森林算法的分布式服务故障分析系统以机器学习、大数据框架为基础,结合AI、大数据等技术对监控数据进行建模分析,是集异常检测、智能告警、故障智能分析、监控视图、业务视图为一体的智能运维平台。其系统架构如图5所示。

该架构融合机器学习与大数据的分析流程,即获取到基础数据后,对基础数据进行数据预处理生成特征矩阵,然后对特征矩阵进行特征分析,挑选出适合的特征进行模型训练,最终对模型训练完成的数据进行大数据统计分析,生成所需的报表视图。

3.2 功能架构

基于孤立森林算法的分布式服务故障分析系统通过接入统一监控平台采集监控数据,通过接入日志归集平台采集日志数据,将采集到的历史数据通过大数据框架进行数据预处理,再将处理完成的特征数据通过机器学习核心框架构建模型,最终通过可视化大盘将分析后的结果数据展示。其功能架构图如图6所示。

统一监控平台:自主研发的跨平台、支持多种中间件的IT综合监控平台,全面覆盖IasS、PaaS、SaaS三层监控。

日志归集平台:提供日志采集、检索、告警、可视化大盘等功能,解决海量日志的管理难题。

大数据、机器学习框架:基于孤立森林算法的分布式服务故障分析系统的核心,提供数据预处理、数据分析、特征工程、算法、建模等能力。

3.3 智能告警功能

系统将告警与异常检测结合,基于动态阈值,进行智能告警,当接收到告警时会自动进行信息压缩整合、数据分析等操作。异常检测生成的动态阈值是基于海量历史数据分析产生的,能够反映业务趋势的变化规律,使告警更精准,质量更高,而且释放了部分人工配置的繁琐工作,工作效率大大提高。

智能告警对告警消息进行关联分析,同时对各类信息进行整合,如:数据库存在长连接时,会自动对数据库CPU、连接数、响应时间等指标进行分析,并基于异常检测确认数据库性能是否存在波动,检测到异常时才会进行消息发送,发送告警信息时会将数据库的一系列信息进行压缩、合并,统一进行发送。智能告警的功能流程图如图7所示。

使用基于孤立森林算法的分布式服务故障分析系统的智能告警功能后,告警数量大幅度减少,告警质量得到大大提高,告警信息更精确、更有效(告警数量由每天5 000多条压缩至100条左右)。

3.4 异常分析功能

对异常检测进行改造,将多维度指标数据进行大数据统计分析,自动分析出故障时各指标的影响占比并生成异常分析报表,快速定位故障问题,大大提高故障排查效率,故障排查耗时由30min缩短至2min。其中传统运维流程如图8所示,异常分析流程如图9所示。

从以上图8和图9的对比中,传统运维当接收到监控告警后,需人工对不同主机不同组件的各个指标进行逐项排查,最终对排查结果进行汇总定位根因,流程十分繁琐,并需要耗费大量人员精力。而基于孤立森林算法的分布式服务故障分析系统的异常分析功能流程十分清晰明了,同时引入了异常检测模型,故障定位更加准确,系统能够采集到监控告警后自动对故障进行统计分析,自动得出定位根因,释放了大量劳动力,故障排查效率有所提高。

图5 基于孤立森林算法的分布式服务故障分析系统架构图

图6 基于孤立森林算法的分布式服务故障分析系统功能架构图

图7 智能告警示意图

4 基于孤立森林算法的分布式服务故障分析系统在中国联通分布式架构系统中的应用效果

目前,基于孤立森林算法的分布式服务故障分析系统已在中国联通号卡系统等应用上线,服务在故障发生时,借助基于孤立森林算法的分布式服务故障分析系统能够快速定位故障问题,有效减轻运维人员的工作压力。

4.1 单指标异常检测

单指标异常检测基于滑动平均算法生成动态阈值,再使用孤立森林算法构建异常检测模型,最终基于异常检测模型实现实时异常检测。

使用滑动平均算法、孤立森林算法对海量历史数据进行建模分析,实时发现海量数据中的异常点,可以实现动态调整阈值,生成异常检测报表。其效果如图10所示。

4.2 多指标异常分析

目前,异常检测仅能够对单维度指标实时计算,无法对多维度指标进行有效分析,多指标异常分析是基于异常检测进行改造,对各指标数据进行大数据统计分析,通过对各种指标进行聚合,分析出故障发生时各指标的影响占比并生成异常分析报表。其效果如图11所示。

4.3 导航式故障排查

导航式故障排查功能通过对现有的故障排查流程进行总结固化为工作流,与单指标异常检测进行结合,基于异常检测动态调整阈值,通过重点标识故障指标,动态生成故障分析报告。其效果如图12所示。

图8 传统运维流程示意图

图9 异常分析流程示意图

图10 异常检测报表

图11 异常分析报表

图12 导航式故障排查分析报表

5 结论

基于孤立森林算法的分布式服务故障分析系统上线使用后,告警质量得到大大提高,告警信息更精确、更有效(告警数量由每天5000多条压缩至100条左右),同时能够快速定位故障问题,大大提高故障排查效率,故障排查耗时由30min缩短至2min。因此相对于传统运维模式,基于孤立森林算法的分布式服务故障分析系统在故障定位及故障分析等方面实现了自动化、智能化,减少了运维人员的投入,人力成本及运维成本都有所降低,证明了基于孤立森林算法的分布式服务故障分析模型具有一定的可行性及有效性。

基于孤立森林算法的分布式服务故障分析模型还有很多地方需要改进,由于本文特定场景的需求并没有引入其它主机性能指标,在今后的研究工作中将引入更多性能指标及异常检测算法进行多项验证,探索能否形成一套通用模型,可应用于不同生产系统,从而大大提高模型的鲁棒性。

猜你喜欢
运维监控森林
The Great Barrier Reef shows coral comeback
冬奥项目训练监控方法的研究——TRIMP、sRPE在短道速滑训练监控中的应用
基于无人机的监控系统设计
基于量化的风险监控预警机制探索与实践
基于GPS的电力运维轨迹定位系统
IT运维管理系统的设计及应用
哈Q森林
哈Q森林
哈Q森林
哈Q森林