这个金融级异常根因定位,智能运维界都直呼内行!

标签: | 发表时间:2021-05-18 08:00 | 作者:
出处:https://dbaplus.cn
作者介绍

孟庆江、田忠毅,中金财富证券股份有限公司信息技术部,本文选自《交易技术前沿》总第四十期文章(2020年9月)。

 

证券行业是对连续性、稳定性要求最高的行业之一,客户交易体验永远是券商关注的话题。当交易系统出现异常时,快速定位异常根因并实施恢复可减少异常对客户体验造成的影响。但传统的根因定位方案目前存在一些困难:

 

  • 一是目前券商交易系统在各个环节的衔接广泛采取了多对多的机器架构,传统的链路定位在这种情况下效果并不理想;

 

  • 二是监控技术的发展使得告警数量呈爆发式的增长,导致告警与异常间的关联关系变得难以确定,增加了异常根因定位的难度。

     

智能化运维的出现,为我们解决这些问题提供了新的思路与方法。本文首先概述了中金财富证券近年来在智能化运维方面所作的工作,而后重点介绍了为解决以上两个运维痛点所作的探索与实践:通过聚类与贝叶斯方法实现智能化的根因定位,以期提高异常根因定位的效率。

 

一、引言

 

 1、智能化运维的产生与发展

 

在金融科技的不断发展、金融产品的不断增加及金融监管的愈发加强等因素的影响下,证券公司的IT架构也逐渐复杂化,其表现在机器设备不断增加、业务链条不断增长、系统间的相互关联性逐渐上升,这给券商运维团队提出了新的难题。

 

受限于人力、经验等客观条件的制约,使用传统的、基于规则的运维方式已无法满足券商业务的连续无中断性要求,因此,券商运行维护系统需要紧紧跟上证券公司业务创新发展的潮流,脱离依赖人工和经验为主的传统模式,运用新的技术解决新的问题。

 

随着大数据、人工智能等先进科技不断给金融行业赋能,智能化运维逐渐成为证券行业运维系统的发展方向。智能化运维顾名思义,是将运维数据和大数据、机器学习技术相结合,针对运维场景开发成一系列的智能策略,融入到运维系统中。智能化运维赋予了IT系统从历史中自动获取经验知识的能力,同时借助大数据平台的强大算力实现了横向的拓展,有效的解决了运维团队对于经验和人力的依赖。

 

自2015年开始中金财富逐步开始建立基于大数据、人工智能为技术基础,以事前预测、事中检测、事后分析为应用场景的智能化运维体系。该体系使用后,不仅可以有效的解决由于业务发展所带来的运维问题,提升了系统安全性,同时也帮助运维团队摆脱了以往简单重复性的工作,可以将更多精力投入到提升服务质量的需求开发中,增加了运维团队的工作价值。如图1.1所示,智能化运维促使券商IT系统形成了以业务需求推动监控发展、以监控发展促进智能化运维算法落地、智能化运维提升运维自动化水平、进而提升业务能力的闭环。

 

图1.1 中金财富智能运维价值闭环

 

 2、中金财富在智能化运维中的探索、实践

 

中金财富证券从自身业务需求出发,以事前预测、事中检测、事后分析为发展方向,自2015年以来不断探索、实践智能化运维算法,并推进落地,如图1.2所示,通过对历史数据的学习与挖掘、对实时数据的即时分析及对异常模式的识别,实现了基于动态数据拟合基线的指标异常检测、基于FT-Tree算法的日志概率异常检测、基于趋势预测算法的容量预测与评估、智能流量调度决策,基于XGBoost算法的机器健康度模型、基于聚类与贝叶斯算法的异常根因定位等等。在本文后续的章节,我们将主要介绍中金财富在智能化根因定位方面所作的一些探索与实践。

 

图1.2 中金财富智能运维实践场景

 

 3、智能化根因定位的发展

 

根因定位是智能化运维中一项重要且难于实现的领域。受限于当前的技术水平,即使再完善的系统也无法避免会出现异常,因此如何将快速定位异常的根因并实施恢复以降低异常造成的影响就显得至关重要。券商实行智能化异常定位的目标就是要尽量降低券商系统出现异常后给客户体验甚至资金安全造成的影响。但随着券商交易系统的规模不断扩大及各系统间的相互影响趋于复杂,让异常定位变得愈发困难。

 

目前行业内外有已有多种根因定位方案投入使用,如Twitter和大众点评等开源了他们基于调用链的根因定位方案,百度公司采用基于异常范围搜索的HotSpot算法进行根因分析,建设银行、光大证券等采用了基于时间序列相关性分析的算法等。但因为系统之间差异性及根因定位的复杂性,目前仍然没有一套能在所有系统行之有效的方案。因此,中金财富证券在学习业内外根因定位方案思路的基础上,为解决自身运维痛点,提出了两项智能化的根因定位方案,下文会对这两项方案做详细的介绍。

 

 4、中金财富智能化根因定位方案

 

在中金财富证券交易系统中,前端机器的响应时间为客户从下单到收到响应的时间,可以反映客户体验的好坏。一些前端机器的响应时间异常是由后台机器的响应时间异常引起,但前端机器与后台机器、后台机器之间的关联性会随时变动,为异常定位增加了难度,传统的基于链路的异常根因定位在这类情况下效果并不理想。

 

因此,我们设计了一种基于DBSCAN聚类算法,在识别到异常发生后,通过将异常的前端机器指标值序列与所有可能与其关联的后台机器指标值序列聚类,从而快速定位到异常根因。

 

同时交易系统有一部分引起异常的根因无法从数值中体现,而在异常发生前后以文字告警的形式出现。但随着监控技术的发展券商运维团队时刻会收到的大量的告警,这就需要我们去区分哪些告警是与交易系统异常相关,哪些无关。因此,我们基于贝叶斯方法,运用历史数据从概率的角度推断告警与异常的关联关系,对告警进行排序,从而定位异常根因。在下文中我们会详细介绍这两种方案在中金财富证券的落地实践,供大家参考。

 

二、基于聚类的异常根因定位方案

 

在这一方案中,我们主要实现了异常识别、告警压缩、特征处理、聚类实现四项功能。并以中金财富证券的一种移动端交易渠道A(以下称A交易系统)的响应时间为例,对方案进行了实践。本部分主要叙述了异常识别与聚类实现两项功能,以及在A交易系统的实践结果。

 

 1、异常识别

 

中金财富证券通过基线的方式发现交易系统指标的异常,基线是通过学习历史经验,为业务指标提供判断标准的基准线。在实际应用中,为避免偶发告警造成误告,通常配置将M分钟内N次超出基线的事件判断为一次异常。为保障异常发现的时效性,M不宜过大,同时为兼顾异常发现的灵敏性,N/M也不宜过大。在本方案中我们选择M=5,N=3。这一方案对基线的准确性提出了较高的要求,在中金财富运维实践中,A交易系统的基线存在两种风险:

 

  • 系统配置发生变更后,与之相关的前端机器响应时间会随之发生变化,但基线的变化存在滞后性,使得与当前响应时间不匹配,导致误告警发出。

 

  • 基线学习了错误的历史经验而偏离,造成误告警。对此,我们利用配置变更校正算法和滑动T检验法,降低这两类误告警的概率。

 

(1)配置变更校正算法

 

A交易系统存在经常性的配置变更,在变更后关联机器的响应时间也会发生整体平移,往往会超出基线范围。为应对这种情况,我们设计了配置变更校正算法,通过计算基线中轨序列与响应时间序列间的差值并使用差值校正响应时间,减少此类误告警。算法步骤如下:                      

  • 读取从判定时刻起前30分钟内指标的基线值,并求出这30分钟内指标的基线均值序列 BLVS :  

                                                   

 

  • 读取从判定时刻起前30分钟内指标的真实值,并与基线均值做出这30分钟的差值序列DSVS:    

 

 

  • 对DSVS中的值进行异常过滤,设过滤后的序列为FDSV,对过滤后的序列求均值,为变更校正值BIAS:

      

 

 

  • 指标校正值序列 ADVS = value–BIAS,value为A交易系统响应时间序列。

 

 

如图2.1所示,中金财富A交易系统在一次变更后,一台前端机器的业务响应时间偏离基线的情况,图2.2为经校正的指标值与基线的比较。利用校正后的指标序列再次与基线进行比较,可有效减少因配置变更造成的误告警,该算法在中金财富A交易系统的实践中可过滤超过98%的告警。

 

(2)滑动T检验算法

 

滑动T检验算法常用于气象研究中,用于检测时间序列是否发生突变。本方案引用滑动T检验法,对异常序列进行突变检测,若异常序列并未发生突变,则可认定为并未发生异常。

 

图2.3 基线偏离事件

 

图2.3为中金财富A交易系统的一台前端机器发生的一次基线偏离,经滑动T检验算法,该次异常被过滤。滑动T检验算法可有效降低由于基线偏离而产生误告警的概率。该算法在中金财富A交易系统的实践中可过滤超过10%的告警,进一步提高了告警的准确性。

 

 2、聚类实现

 

为实现指标聚类,首先需定义指标序列间的距离度量,本方案对比了三种距离度量:欧式距离、基于Pearson相关系数的度量和基于Spearman相关系数的度量,假设CDS1、CDS2为两个时间序列,CDij为CDSi的第j个分量,n为时间序列的长度,他们的距离定义如下:

 

(1)欧式距离:

 

 

(2)基于Pearson相关系数的度量:

 

 

(3)基于Spearman相关系数的度量 :

 

 

其中,rk1、rk2 为CDS1、CDS2中的分量转换为降序位置指标后的序列。由于方案主要考察A交易系统前端机器响应时间与后台机器响应时间之间有无同增同减的线性关系,因此基于Pearson相关系数的度量与基于Spearman相关系数的度量更适合本方案,在中金财富A交易系统的实践中,基于Pearson相关系数的度量对于时间序列的距离度量最为准确。

 

在异常传导的过程中可能会跨分钟,因此,对于后台机器相关指标,我们同时取((t1-1)to(tl-1)),(t1to tl), 这两个时间段的值序列,并取这两个序列中与A交易系统前端机器异常响应时间序列距离的最小值作为最终距离。

 

本方案采用DBSCAN 聚类方法,DBSCAN基于密度对指标进行聚类,无需事先确定类的个数,与本方案的场景相符。图2.4展示了基于聚类的根因挖掘方案流程。

 

图2.4 基于聚类的根因挖掘方案流程图

 

 3、实践结果

 

本次实践以A交易系统为例:A交易系统是中金财富某一移动端交易系统。用户在移动端下达交易请求后,首先将请求传送至A交易系统的前端机器进行处理,前端机器处理后再按照请求信息,调用A交易系统后台机器的各项服务以执行客户请求。因此,前端机器对请求g的响应时间包括了前端机器处理请求的时间与各类后台机器执行请求的时间。如以下表达式所示,

 

 

为一笔请求g的响应时间,

 

为请求g在前端的处理时间,

 

为后台机器在执行请求g时第i阶段的响应时间:
 


 

当客户请求在前端机器的响应时间发生异常后,我们使用聚类根因定位算法,快速分析用户的请求是在哪一环节出现了问题,以便实施恢复。我们使用A交易系统2020年5-6月份数据进行回测,共识别出51次响应时间异常,成功挖掘出26次异常的根因。

 

 

图2.5为A交易系统某前端机器在一时刻响应时间的异常情况,使用本方案进行聚类后,识别出三台后主机的响应时间异常(图2.6-图2.8)为本次异常的根因。

 

三、基于贝叶斯推断的异常根因定位方案

 

A交易系统中,存在一部分引起异常的根因无法从数值中体现,而在异常发生前后以文字告警的形式出现。随着监控技术的发展、监控手段的丰富,中金财富集中告警管理平台每分钟可能收到数以百计的告警,使得区分哪些与异常相关、哪些与异常无关存在一定的困难。因此,我们基于贝叶斯方法,通过挖掘告警与异常之间的关联概率从而推断他们的关联关系,并在中金财富A交易系统中进行了实践。下文对方案实现及实践结果进行了叙述。

 

 1、方案实现

 

由贝叶斯公式,告警事件X会导致A交易系统发生异常事件Y的概率P(Y|X)可经如下计算得到:

P(Y|X) * P(X) =  P(X|Y) * P(Y)

P(Y|X) =  P(X|Y) * P(Y) / P(X)

 

因此,条件概率P(Y|X) 正比于 P(X|Y) / P(X) ,基于此,我们设计以下步骤实现该推断:

 

(1) 统计在历史上,Y事件发生的前五分钟以内有哪些告警事件发生,并计算每个异常告警X出现的条件概率P(X|Y)。

 

(2) 统计在历史上任意五分钟内X事件发生的概率,得到 P(X)。

 

(3) 计算关联概率相对值P(X|Y) /P(X) , 数值越大,表明告警X事件越可能导致Y事件。

 

(4) 收集A交易系统发生异常事件Y之前五分钟内的告警,并根据计算所得的关联概率相对值,由高到低将告警排序输出。

 

图3.1展示了基于贝叶斯推断的异常根因挖掘方案模型训练及推断流程。

 

图 3.1 基于贝叶斯推断的异常根因挖掘方案流程图

 

 2、实践结果

 

中金财富在2015年建立了全局统一的告警事件平台,用于接受各类监控所产生的告警。由于监控系统不断完善,告警时间平台在单位时间内收到的告警数量不断增长,其中大部分为轻微、偶发的告警,因此当交易异常发生后,我们通过使用基于贝叶斯推断的根因分析算法确定哪些告警与本次异常相关,从而掌握更多异常细节信息便于实施恢复。

 

我们使用了2020年2-6月份A交易系统的数据进行回测,由于贝叶斯方法的推断需要较大的数据量才能准确,因此我们选取了一个发生次数较多的异常事件进行挖掘:A交易系统前端机器V交易响应时间异常。

 

经回测发现如下结果:最有可能导致A交易系统V机器交易响应时间异常的三个告警事件和最不可能导致它的一个告警事件及其推断相对值是:

 

表3.1 贝叶斯推断结果

 

贝叶斯推断的结果具有较高的分离度,各类告警与A交易系统异常间的关联关系相对值差距明显,作为排序依据有一定的参考价值。

 

四、总结与展望

 

为保障客户体验,中金财富证券在行业内较早的实现了基于大数据的自动化运维,并一直致力于智能化运维的推广与落地。

 

本文介绍了中金财富在智能化运维中异常根因定位方面所作的一些探索与实践,所涉及的方案仍存在一定的局限性,在异常根因定位的成功率方面还有一定的提升空间。

 

在近期,智能化根因定位出现了一批新的算法方案,如基于知识图谱与基于自然语言处理的根因定位方案,中金财富会结合新的算法,持续探索、不断改进。随着智能化技术的不断发展,智能化运维必将愈发成为证券企业降本增效的利器,中金财富也会不断地升级技术手段,为客户提供更高质量的服务。

 

作者丨孟庆江 田忠毅

相关 [金融 异常 智能] 推荐:

这个金融级异常根因定位,智能运维界都直呼内行!

- -
作者介绍 孟庆江、田忠毅,中金财富证券股份有限公司信息技术部,本文选自《交易技术前沿》总第四十期文章(2020年9月). 证券行业是对连续性、稳定性要求最高的行业之一,客户交易体验永远是券商关注的话题. 当交易系统出现异常时,快速定位异常根因并实施恢复可减少异常对客户体验造成的影响. 但传统的根因定位方案目前存在一些困难:.

人工智能在金融领域应用的初步思考

- - 36氪
微信搜索“36氪”,获取更多高质量内容.点击进入36氪. 编者按:本文作者中国银行网络金融部杨涛,作者授权36氪发布. 在阿尔法狗战胜李世石后,人工智能在全球的热议程度达到一个新的高度. 得益于神经网络深度学习在算法上的突破,使得多个基础人工智能技术水平得到飞跃提升. 计算机视觉、机器学习、自然语言处理、机器人技术、语音识别等人工智能技术快速发展对整个社会带来的改变将远大于互联网.

如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了

- - zhisheng的博客
本文转自 AI 前线公众号,作者 | 潘国庆 编辑 | Natalie. Flink 已经渐渐成为实时计算引擎的首选之一,从简单的实时 ETL 到复杂的 CEP 场景,Flink 都能够很好地驾驭. 本文整理自携程实时计算负责人潘国庆在 QCon 全球软件开发大会(北京站)2019 的演讲,他介绍了携程如何基于 Flink 与 TensorFlow 构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则配置复杂与耗费人力等诸多问题,实现了业务指标毫秒级延迟与智能化检测,同时依托 Flink 实现了强大的容错机制.

Java异常

- - CSDN博客推荐文章
“好的程序设计语言能够帮助程序员写出好程序,但是无论哪种语言都避免不了程序员写出坏的程序.                                                                                                                          ----《Java编程思想》.

浅谈java异常

- - 移动开发 - ITeye博客
在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题. 虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常. 绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败. 之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意.

Oracle 异常处理

- - 编程语言 - ITeye博客
使用RAISE_APPLICATION_ERROR存储过程. ============================================================ */ --演示该存储过程 BEGIN. RAISE_APPLICATION_ERROR(-20000, 'Account past due.');-- explicitly raise exception END; --创建子程序 CREATE OR REPLACE PROCEDURE account_status (.

Google和SugarSync访问异常

- Freeman - 月光博客
  今天下午,Https的Google出现了短时间的访问异常,国内各地网友发现其访问出现不稳定状态,有时可以访问,有时无法访问.   这对中国用户最直接的影响是,很多用户无法访问Https版Google Reader,还有一些用户无法登录Gmail邮箱.   今天的另一个坏消息是,知名美国云存储服务SugarSync网站的域名被关键字屏蔽,目前已经无法从中国访问,虽然SugarSync的上传速度比起Dropbox还有差距,但至少美国的服务用起来放心一些,早先云存储服务Dropbox被屏蔽时不少网友转到了SugarSync这个服务,不过值得庆幸的是,该服务的电脑客户端和iPhone手机端都可以正常使用,上传和下载文件都没有问题.

spring mvc 异常处理(转)

- - 编程语言 - ITeye博客
链接:http://gaojiewyh.iteye.com/blog/1297746 (附源码). 链接:http://zywang.iteye.com/blog/983801 . 链接:http://www.cnblogs.com/xguo/p/3163519.html . 链接:http://fuliang.iteye.com/blog/947191 .

Oracle异常处理概念

- - Oracle - 数据库 - ITeye博客
5.1.1 预定义的异常处理. 5.1.2 非预定义的异常处理. 5.1.3 用户自定义的异常处理. 5.1.4  用户定义的异常处理. 5.2.1 在执行部分引发异常错误. 5.2.2 在声明部分引发异常错误. 5.3 异常错误处理编程. 5.4  在 PL/SQL 中使用 SQLCODE, SQLERRM异常处理函数.

Java异常处理策略

- - 研发管理 - ITeye博客
任务与预先设定的规则不相符的情况都可以称之为异常. 但凡业务逻辑操作,都会划定一些边界或规则,但是往往事与愿违,总会有调皮鬼来挑战系统的健壮性. 用户并不都是知道潜规则的,比如用户的银行账户中只有100块钱,但是用户不查询就直接取200块. 码农有时候太过自信了,比如你在编写文件下载功能时忽略了文件有可能不存在这个分支流程.