项目方案

本项目紧密围绕AIOps中三个重要场景来展开:即故障发现、故障定位和故障处置。下图中重点展示了故障发现和故障定位的场景逻辑。

对于故障发现,在业务指标异常检测和应用日志异常检测的基础上,对这两部分算法功能进行了大规模的推广和落地,并且针对落地中存在的问题,开展了相关的算法和产品优化工作。

对于故障定位,在机器指标定位研究的基础上,本次项目主要聚焦在1)业务明细多维定位:旨在当业务指标出现异常时,快速定位到是哪些交易维度出现的问题(如某个错误码,某个IP),为故障定位提供线索,大大缩小排障的范围,2)调用链根源系统定位:旨在当多个业务系统由于复杂的调用依赖关系,同时产生异常时,快速定位到是哪个业务系统是根源,提高排障效率。此外,我们尝试使用排障树的思想,把业务系统的故障发现,到利用交易明细、调用链、机器指标、传统监控告警等多数据源进行故障定位这一套方法论形成一个完整的排障场景。基于下图中的应用排障场景,我们可以针对任何一个应用系统,实现快速、准确、高效的故障发现和故障定位。

图1 应用排障图

对于故障处置,当定位到故障根因后,通常需要进行及时的故障处置和止损。随着运维人员管理的系统越来越复杂,系统间的管理度越来越紧密,运维知识点非常多且分散,因此运维人员在进行故障处置时可能面临一些挑战。在本项目中,我们提出利用历史知识库的方法,构建智能问答系统,把历史上发生故障的处置方案和人工经验转换成知识存储在知识库中,从而当出现类似的情况和问题时,运维人员可以快速通过智能问答系统,从知识库中自动搜索到故障处置的相关手册和建议,大大提升排障效率。

创新点

业务指标异常检测

业务指标异常检测主要是对业务的黄金指标通常是某个业务或者功能号的接口调用次数、成功率、响应率、响应时间、队列等指标进行监控。传统的指标监控通常采用静态阈值方式,逻辑简单且易于实现,但静态阈值的配置非常繁琐,因为对于不同的功能号、不同的指标类型、不同的时段都要进行不同的设置,还要不断的进行调整优化,工作量巨大。传统的静态阈值和同环比的方法在实际中都面临准确性、易用性等诸多问题,严重影响故障发现的时效性。

本项目,我们弥补传统静态阈值和同环比的不足,采用机器学习算法,基于指标的历史数据进行训练,建立智能异常检测模型,进而判断出当前指标数据是否为异常。

日志异常检测

日志数据中往往隐藏着很多有价值的信息,甚至直接是异常的根本原因,因此如果能够对日志进行主动、实时的异常检测就能及时的提前发现问题,甚至可以避免更大规模的故障。

为了克服关键字和正则表达式的不足,我们提出通过自动智能的日志模板解析算法从日志中自动提取出不同的模板和变量,进而针对模板所覆盖的日志数量进行智能的异常检测,帮助运维人员实时在海量日志中发现异常日志。

业务多维度定位

对于很多业务指标,例如交易量、响应时间,这类指标背后的每一笔交易往往存在多个维度属性,当这类业务指标出现问题时快速判断异常程度最高的维度属性往往能帮助管理员迅速缩小排障范围,进而提升故障处置效率。但是,手工枚举所有的维度进行维度定位工作量非常大,维度属性之间是彼此交叉的关系,很难直接通过按每个维度属性的取值去对这个业务指标进行监控,这样效果不显著,而且会增加监控系统的资源开销。本场景主要使用异常检测+搜索+聚类的策略、基于影响力的异常检测方法,使得在搜索速度和准确度之间以通用和稳健的方式达到了很好的折中。

智能服务台

智能服务台的核心组成部分为:知识库和智能问答引擎。其中知识库构建的关键流程包括:知识点的收集,问题梳理和问法标注,词库梳理等;智能问答引擎的关键包括:模型训练和模型优化。

智能服务台在QQ机器人、企业微信、网页等渠道的基础上,充分应用到故障处置流程中。通过企业运维总线,智能服务台对接了智能运维平台产生的告警事件,进行智能意图识别后,匹配知识库中的操作建议实时返回给用户,或调用运维调度系统的RPA流程自动进行相关应急操作。

技术实现特点

我们基于CMDB拓扑关系和专家经验构建运维知识图谱,作为我们系统的底层基础支撑,在此之上,我们引入成熟的机器学习算法,构建故障定位和故障处置的相关智能运维场景。其中故障定位场景包括业务明细多维定位和调用链根源系统定位,故障处置场景包括智能服务台和运维机器人。关键模块如下图:

功能架构图2

数据源:由各类运维数据和各个对接系统组成,为智能运维提供数据支撑,运维数据包括业务日志、埋点日志、OS日志、调用日志和DB日志,对接系统包括监控平台、ITSM、APM和NPM。

数据总线:负责提供数据缓存功能和消息交换,完成数据标准化。

数据处理层:左侧提供各类智能运维能力和运维知识图谱作为支撑,右侧提供数据的解析、计算和存储功能。

接口层:提供各类接口管理和数据调用功能。

基于无监督学习实现了指标异常的智能检测

对于异常检测技术,我们采用的是无监督自学习异常检测方案。因为随着各种监控以及web应用程序的拓展,这些具有各种模式和数据质量的季节性KPI异常检测一直是一个巨大的挑战,尤其是在没有标签的情况下。所以我们提出了一种基于VAE的无监督异常检测算法——Donut。变分自编码器是一种深度贝叶斯网络,我们通过SGVB最大化证据下界(ELBO)近似后验和生成模型联合训练。

基于蒙特卡洛树搜索的多维度异常定位

区别于现有的大部分算法和系统,本场景采用“异常检测+搜索”的策略。由于我们大部分数据都是多指标同时异常的情况,所以我们提出了基于“影响力”的异常检测算法,是一种与指标含义无关的异常检测方法。在搜索方面,使用了一套可伸缩的搜索方案,在时间效率和空间效率上灵活切换,以适应不同规模大小的数据,并且引入MCTS(蒙特卡罗树搜索)来剪枝加快搜索。

基于自然语言处理等技术日志异常检测技术实现的故障定位

故障定位的最终原因往往存在于应用日志中,我们从三个方面对设备或应用日志异常检测问题展开设计:日志解析,单条异常日志检测,异常日志序列检测。

首先,从历史日志消息中构建频繁项前缀树以学习消息模板,从而构建模板库。基于模板库,可以将历史日志消息映射到对应的模板上。然后,基于模板库将实时日志消息映射到对应的模板上。如果发现实时日志消息无法映射到任一模板上,则自动地、增量式地从该日志消息中学习模板,并扩充到模板库中。

本系统为每一个消息类型的日志消息构建一棵基于日志消息中单词频率的前缀树,从而实现自动地获取消息模板。该前缀树的根节点为日志消息的消息类型。通过剪枝的方式,消息模板中需要被遮挡的部分被删除掉,而日志消息子类型被保留了下来。所以,获取消息模板的过程是完全自动的,并不依赖于专家知识。

项目过程管理

1)需求分析和概要设计阶段

光大证券在2017年开始启动智能运维平台建设,2018年我们引进清华大学NETMAN实验室以及日志易数据团队,联合参加了上交所2018年项目“证券行业智能运维体系落地研究”,在该研究中,我们确定了智能运维平台落地路径即按照发现问题、定位原因、故障处置这样的思路进行。

2)方案详细设计阶段

在2018年,我们聚焦并且完成了异常发现、以及故障定位的部分解决方案。其中异常发现主要以单指标异常检测以及日志异常发现为核心;故障定位环节主要是以通过机器指标定位异常操作系统为核心。

3)平台上线阶段

2018至2019年我们先后在智能运维平台上线了异常发现、日志异常检测、多维度根因定位等运维场景,这些场景在我们生产上都有着成熟应用,效果显著。我们目前正在持续研究调用链、排障树、智能服务台,部分场景也已经落地,通过持续优化迭代使得算法更加成熟。

运营情况

通过不断投入及持续建设,本平台覆盖了我司各核心交易系统,实现了共计10680个业务指标实时监控,34000多个机器指标定位,每日日志处理量达到500G以上。

项目成效

节省经济成本:开源技术替换商业软件,基础软件大量费用;

提升运维效率:集中化、数字化管理,提升运维效率;

提高系统可用性:排障效率提升,发现潜在风险点,减少可用性事件发生;

提升用户体验:发现潜在异常,及时优化提升用户体验;

探索AIOPS落地建设:数据治理经验算法研发经验、场景设计经验;

推动AIOPS落地:合作交流、标准制定;上交所优秀项目;IDC最佳优秀案例、云鹰最高成就奖。

经验总结

光大证券高度重视金融科技建设,从2017年开始研究并且逐步落地AIOps运维,三年以来我们与清华大学、必示科技、优特捷、深擎科技等多位优秀的合作伙伴在智能运维领域持续耕耘,特别是异常检测领域在我们生产环境取得了显著效果。目前在根因定位方面、故障处置方面,我们也进行了大量的研究、测试,并实现了部分场景落地生产环境。后续,我们将在智能运维领域持续深入研究,持续优化效果。

相关文章