业务链路故障定位方法、装置及设备
技术领域
本说明书涉及数据处理领域,尤其涉及业务链路故障定位方法、装置及设备。
背景技术
目前,随着有线互联网与无线互联网技术的成熟及相关设备日益完善和普及,为了满足用户各种各样的需求以及提升用户体验,当前业务系统会为用户提供越来越多的业务功能。然而,在业务系统为用户提高越来越多的业务功能的同时,也为系统检测人员在业务系统出现问题时定位业务的哪个功能模块出现了问题带来了困难。例如,移动互联网APP产品后端系统由许多功能模块组成,每个功能模块提供一种或多种功能,每种功能通过接口供系统内其他模块调用,APP中的业务由多个功能模块间相关调用、协调工作来实现。功能模块可以提供一个或多个接口以供其他功能模块调用或调用其他功能模块,如果功能模块的某个接口出现问题,不仅接口出现问题的功能模块会发出告警信息,往往还会引起调用该问题接口的其他功能模块发出告警信息,影响用户的正常使用。因此,亟需提供一种快速定位问题接口的方案。
发明内容
为克服相关技术中存在的问题,本说明书提供了业务链路故障定位方法、装置及设备。
根据本说明书实施例的第一方面,提供一种业务链路故障定位方法,每条业务链路包括具有调用关系的多个功能模块,一个功能模块提供一个或多个被调接口以供其他功能模块调用,所述定位方法包括:
确定告警链路;
判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,所述报错信息用于表征链路中各被调接口的错误率的关系;
若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据所述部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口。
根据本说明书实施例的第二方面,提供一种业务链路故障定位装置,每条业务链路包括具有调用关系的多个功能模块,一个功能模块提供一个或多个被调接口以供其他功能模块调用,所述装置包括:
链路确定模块,用于确定告警链路;
数据判断模块,用于判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,所述报错信息用于表征链路中各被调接口的错误率的关系;
问题定位模块,用于若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据所述部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如上任一项所述业务链路故障定位方法。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本实施例通过确定告警链路,并判断预存数据中是否存在与告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与告警链路中的报错信息相似,报错信息可以用于表征链路中各被调接口的错误率的关系;若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则可以依据部分链路或完整链路中的问题接口,确定为告警链路中的问题接口,从而实现快速定位出告警链路中的问题接口。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种应用程序的业务系统的内部架构示意图。
图2是本说明书根据一示例性实施例示出的一种业务链路故障定位方法的流程图。
图3是本说明书根据一示例性实施例示出的另一种应用程序的业务系统的内部架构示意图。
图4是本说明书根据一示例性实施例示出的另一种业务链路故障定位方法的流程图。
图5是本说明书业务链路故障定位装置所在计算机设备的一种硬件结构图。
图6是本说明书根据一示例性实施例示出的一种业务链路故障定位装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了满足用户各种各样的需求以及提升用户体验,当前业务系统会为用户提供越来越多的业务功能。大型互联网公司的移动互联网APP产品(诸如手机助手、移动支付工具等)后端系统(业务系统)由成百上千个功能模块组成,每个功能模块可以提供一个或多个接口(方法)以分布式部署供系统内其他模块调用,正是由于成百上千功能模块间相互调用,协同工作才能最终实现APP的完整功能。如图1所示,以一个应用程序的业务系统的内部架构图进行示意,该业务系统提供多种业务,每种业务可以由业务链路实现,每条业务链路包括具有调用关系的多个功能模块,一个功能模块提供一个或多个接口以供其他功能模块调用或调用其他功能模块。不同链路若存在相同功能模块,在不同链路中该功能模块的被调接口往往不同。同一个应用程序的业务系统中,每条业务链路的起始功能模块(起始接口所在模块)可以相同,起始功能模块可以是接入层模块。示例的,可以将业务系统中的功能模块分为接入层模块、逻辑层模块以及存储层模块。逻辑层模块或存储层模块出现问题会引发大量告警信息。可以理解的是,图1只是为了示例,实际业务系统内部架构会更复杂。
若某个功能模块所提供的接口出现问题势必会引起模块间调用大量报错,引发告警,从而影响用户的正常使用。告警信息不仅由问题接口所在功能模块发出,通过主调接口调用问题接口的模块也会因为调用失败发出告警,可见问题接口往往是被调接口,对于告警的收敛和根因定位是复杂系统运维的业界难题。其中,主调接口所在模块可以称为主调模块,问题接口所在模块可以称为被调模块,主被调相对而言。
功能模块间的调用可以是模块提供接口(方法)的调用,模块出现问题则为该功能模块自身提供的接口(方法)无法对外提供服务(自己作为被调接口,无法给主调接口返回主被调约定好的信息),通常功能模块可以通过日志记录这些调用错误的信息。日志可以包括:于被调模块而言,主调模块调用自己成功与否的日志;于主调模块而言,自己调用被调模块是否成功的日志等。若主调模块调用被调模块的日志失败数量超出一定范围,则可以判断告警是由被调模块中这个被调接口出现问题引起,被调模块根据业务需求打印各种日志,如远程调用日志,业务正常返回日志等。本说明书实施例可以比较被调接口的错误率来判断该被调接口是否正常。如果错误率偏离预设正常范围,则认为模块提供的被调接口无法返回主调模块需要的信息,定位为问题接口。
接下来对本说明书业务链路故障定位方案进行示例说明。
如图2所示,是本说明书根据一示例性实施例示出的一种业务链路故障定位方法的流程图,每条业务链路包括具有调用关系的多个功能模块,一个功能模块提供一个或多个被调接口以供其他功能模块调用,所述定位方法包括:
在步骤202中,确定告警链路;
在步骤204中,判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,所述报错信息用于表征链路中各被调接口的错误率的关系;
在步骤206中,若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据所述部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口。
本实施例通过确定告警链路,并判断预存数据中是否存在与告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与告警链路中的报错信息相似,其中,报错信息可以用于表征链路中各被调接口的错误率的关系;因此,若存在,则可以依据部分链路或完整链路中的问题接口,确定为告警链路中的问题接口,从而实现快速定位出告警链路中的问题接口。问题接口可能是引起该链路告警的根因,因此,也可以称为根因定位。
告警链路是待定位的业务链路,可以是发出告警信息的业务链路,或者说,存在问题的业务链路。例如,可以通过日志分析业务链路中功能模块是否发出报警信息,进而判断业务链路是否为告警链路。每条业务链路可以包括具有调用关系的多个功能模块,在一个业务系统中可以有一条或多条业务链路。
本实施例可以通过判断预存数据中是否存在与告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与告警链路中的报错信息相似,来定位问题接口,进而实现业务链路的故障定位。
预存数据可以包括预先存储的已确定问题接口的部分链路或完整链路,还可以包括部分链路或完整链路的报错信息或部分链路或完整链路中各被调接口的错误率。错误率可以是在链路中被调模块的接口(可以简称被调接口)被主调模块的接口(可以称为主调接口)调用的失败次数与被调用总次数的百分比。因此,可以通过被调接口的错误率反应各功能模块间的接口调用关系。错误率也可以称为接口错误率。报错信息用于表征链路中各被调接口的错误率的关系。为了反映链路中各被调接口的错误率的关系,各被调接口的错误率可以是有序的。示例的,报错信息可以是部分链路或完整链路中各被调接口的错误率的比值。比值顺序可以由链路中功能模块的调用顺序决定。
为了提高问题模块的定位效率,在一个实施例中,可以预先存储历史告警链路中的问题接口、所述历史告警链路中部分链路或完整链路、以及该部分链路或完整链路的报错信息三者间的映射关系,或,预先存储历史告警链路中的问题接口、所述历史告警链路中部分链路或完整链路、以及该部分链路或完整链路中各被调接口的错误率间的映射关系。示例的,可以将这些预存数据放在链路特征库中。
其中,历史告警链路可以是历史记录中已确定问题接口的告警链路。所述历史告警链路中部分链路或完整链路可以包括:按历史告警链路中功能模块的调用关系,从历史告警链路的起始功能模块到问题接口所在功能模块。按调用关系,起始功能模块到问题接口所在功能模块,往往会因为问题接口而发出告警,为此,历史告警链路中部分链路或完整链路也可以认为是告警模块组。当问题接口是历史告警链路中的最后一个模块的接口时,告警模块组包括历史告警链路中所有功能模块,可以认为是历史告警链路的完整链路;当问题接口不是历史告警链路中的最后一个模块的接口时,告警模块组仅包括历史告警链路中一部分功能模块,可以认为是历史告警链路的部分链路,或链路片段。预存数据中包括历史告警链路中部分链路或完整链路,目的之一是为了能判断预存数据中是否存在与告警链路中调用关系相同的部分链路或完整链路,为了节约存储空间,示例的,可以以不同模块的组合标识(模块标识+接口标识构成的组合标识)表示具有调用关系的功能模块,如可以用具有顺序的组合标识来代替历史告警链路中部分链路或完整链路。组合标识可以是由功能模块的标识与其接口标识构成的,顺序可以由功能模块间的调用关系决定。因此,可以判断预存数据中的有序组合标识是否与告警链路中的有序组合标识完全匹配或部分匹配。如果完全匹配,可以判定预存数据中存在与告警链路中调用关系相同的完整链路,如果预存数据中的有序组合标识只与告警链路中的有序组合标识中的一部分连续的有序组合标识匹配,可以判定预存数据中存在与告警链路中调用关系相同的部分链路。
所述历史告警链路中部分链路或完整链路的报错信息可以用于表征:按模块调用关系,部分链路或完整链路中各被调接口的错误率间的关系。例如,报错信息可以是部分链路或完整链路中各错误率的比值。
在一个示例中,可以以键值对(key-value)的方式存储上述映射关系,例如,问题接口为键(key),部分链路或完整链路及其报错信息为值,或者,问题接口为键(key),部分链路或完整链路及各被调接口的错误率为值(value)。报错信息可以直接从映射关系中获得,也可以由映射关系中的错误率进行计算获得。如存储的数据结构可以为:
{faultModule.interface∶{module1.interface1:falseRate1},{module2.interface2:falseRate2}……{faultModule.interface:falseRate}}
其中,faultModule.interface表示由问题接口所在功能模块的标识与问题接口标识构成的组合标识,module1.interface1表示部分链路或完整链路(简称告警模块组)中由起始功能模块的标识与其接口标识构成的组合标识。链路中的起始功能模块的接口往往是主调接口,错误率是相对被调接口而言的,所以falseRate1可以为固定值或者为空。{module2.interface2:falseRate2}表示由部分链路或完整链路中第二功能模块的标识及其被调接口的标识构成的组合标识及被调接口的错误率。{faultModule.interface:falseRate}表示由问题接口所在功能模块的标识与问题接口标识构成的组合标识及问题接口的错误率。报错信息可以由各被调接口的错误率相比获得,如:falseRate2:falseRate3…:falseRate。
可以理解的是,同一个key可以对应一条或多条完整链路/部分链路的value。
在获得告警链路后,可以判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似。示例的,预存数据中存在与告警链路中调用关系相同的部分链路或完整链路,可以是存在匹配的组合标识。例如,告警链路包括:module1.interface1,module2.interface2,…faultModule.interface…moduleN.interfaceN。预存数据中存在部分链路:module1.interface1,module2.interface2,…faultModule.interface,则可以认为预存数据中存在与告警链路中调用关系相同的部分链路。
部分链路或完整链路中的报错信息与告警链路中的报错信息相似,可以是部分链路或完整链路中的报错信息与告警链路中的报错信息的差异在允许的差异范围内。由于正常情况下各被调接口的错误率的关系与异常情况下各被调接口的错误率的关系往往存在差异,因此,在预存数据中存在与告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与告警链路中的报错信息相似时,可以将告警链路中与部分链路或完整链路中的问题接口对应的接口,确定为告警链路中的问题接口,从而实现快速定位问题接口。示例的,链路中各被调接口的错误率的关系,可以由各被调接口的错误率比值来体现。当然,也可以采用其他方式来体现,只要能反应各被调接口的错误率的关系即可。
举例说明,假设告警链路的调用关系为:A-B-C-D-E-F,A调用B,B调用C,C调用D,以此类推。预存数据中的部分链路的调用关系为A-B-C,且部分链路中C模块的被调接口为问题接口。由于告警链路与预存数据的部分链路相匹配、且告警链路中的报错信息(RA:RB:RC)告警与部分链路中的报错信息(RA:RB:RC)历史差异在允许的差异范围内,则判定告警链路中C的被调接口为告警链路中的问题接口。
在一个实施例中,在确定问题接口后,可以输出修复该问题接口的指示信息,以便能及时修复该问题接口。指示信息可以是自动修复指令,也可以是提醒工作人员人工修复的提示信息等。具体修复方式在此不一一赘述,可以是机器通过历史故障处理手段的学习,自动修复问题接口;也可以人工修复。
在一个实施例中,还提供另一种问题接口定位方式,可以预先将功能模块划分为核心功能模块或非核心功能模块,优先判断核心功能模块是否存在问题接口。因此,可以将该阶段称为基于核心功能模块的快速定位阶段。为了同基于核心功能模块的快速定位阶段区分,步骤202至206阶段可以称为基于链路的快速定位阶段。相应的,所述方法还包括:
在所确定的告警链路包括核心功能模块的情况下或业务系统中存在包括核心功能模块的告警链路的情况下,判断核心功能模块中被调接口的错误率是否在预设正常范围内,将不在预设正常范围内的错误率所指示被调接口确定为问题接口。
本实施例中的告警链路可以是步骤202所确定的告警链路,也可以是业务系统中的告警链路。针对告警链路是步骤202所确定的告警链路的情况,该实施例是对所确定的告警链路进行问题接口定位的实施例。针对业务系统中存在包括核心功能模块的告警链路的情况,该实施例可以是对业务系统中所有告警链路进行问题接口定位的实施例。
功能模块是否为核心功能模块,可以依据业务需求来定。例如,可以将功能模块的使用频率、接口数量作为功能模块是否为核心功能模块的评价因子。使用频率越大的功能模块,越有可能引起大量告警;接口数量越大的功能模块,也越有可能引起大量告警。当然,使用频率、接口数量也并非唯一的评价因子,还可以将其他因素作为功能模块是否为核心功能模块的评价因子。例如,评价因子还是可以是历史中被确定为包含问题接口的功能模块的次数等。如某手机助手是安卓应用下载的APP,根据这一业务功能接入类(用户点击APP后能够正常打开首页),搜索类(用户正常搜索想要下载的APP),下载类(搜索完后用户点击正常下载完成),推荐类(推荐类似功能的其他APP)的功能模块可以为核心功能模块,其他可以为非核心功能模块。一个APP中核心功能模块占比为所有功能模块的n%左右,例如,n可以为10。比例太大说明系统对自己核心功能不明确,太少则核心功能模块没有做到松耦合,不能保证APP的高可用。
关于预设正常范围,不同接口所对应的预设正常范围可能相同,也可能不同,具体看业务特性。
该实施例优先排查核心模块是否有异常发生,若存在错误率超出正常范围的被调接口,则将该被调接口定为问题接口,可以采用通报模块负责人紧急处理等方式实现修复该问题接口,通常情况下能引发大量告警的大概率为核心功能模块(对外提供接口多,依赖强),从而能实现快速定位问题接口。
在某些应用场景中,可能存在一条告警链路中包括多个核心功能模块的情况,或者一个业务系统作为被定位对象的情况下、业务系统中包括多个核心功能模块的情况,为此,还可以限定核心功能模块的判断优先级。例如,核心功能模块可以预先配置有重要等级,在一个例子中,重要等级可以根据核心功能模块引起大量告警的概率来确定。关于重要等级的形式,示例的,可以以权重值的方式表示核心功能模块的重要等级。所述核心功能模块中被调接口的错误率是否在预设正常范围的判断过程,可以按核心功能模块的重要等级由强到弱的顺序依次进行判断。在每次检测到问题接口时输出修复该问题接口的指示信息。指示信息可以是自动修复指令,也可以是提醒用户人工修复的提示信息等。在基于核心功能模块的快速定位阶段,可以按重要等级由强到弱的顺序,依次判断核心功能模块的错误率是否在预设正常范围,并在每次检测到问题接口时输出修复该问题接口的指示信息。例如,可以人工修复,也可以自动修复。在某些实施例中,核心功能模块的各被调接口也可以配置优先等级,按优先等级检测每个被调接口的错误率是否在预设正常范围。
关于基于核心功能模块的快速定位阶段的执行时机,可以在基于链路的快速定位阶段之前执行,也可以在基于链路的快速定位阶段之后执行。示例的,所述判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似的判断过程的执行条件,可以包括:
所确定的告警链路中或业务系统中所有核心功能模块的问题接口被修复处理后,功能模块发出告警信息的条数仍不满足预设的正常业务条件,或未找到核心功能模块的问题接口,所述业务系统中包括多条业务链路。
一方面,以业务系统为定位对象的情况下,可以先判断业务系统中告警链路是否包括核心功能模块,并判断核心功能模块中被调接口的错误率是否在预设正常范围内,将不在预设正常范围内的错误率所指示被调接口确定为问题接口,输出修复该问题接口的指示信息。在业务系统中所有核心功能模块的问题接口被修复处理后,如果功能模块发出告警信息的条数仍不满足预设的正常业务条件,或未找到核心功能模块的问题接口,则从业务系统中选择一条告警链路,判断预存数据中是否存在与所确定的告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与告警链路中的报错信息相似,若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口。以此类推,利用预测数据将业务系统中的所有告警链路进行检测。
另一方面,以告警链路为定位对象的情况下,可以先确定告警链路,在所确定的告警链路包括核心功能模块的情况下,判断核心功能模块中被调接口的错误率是否在预设正常范围内,将不在预设正常范围内的错误率所指示被调接口确定为问题接口,输出修复该问题接口的指示信息。在所确定的告警链路中所有核心功能模块的问题接口被修复处理后,如果功能模块发出告警信息的条数仍不满足预设的正常业务条件,或未找到核心功能模块的问题接口,则判断预存数据中是否存在与所确定的告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与告警链路中的报错信息相似,若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口。
其中,正常业务条件可以是告警现象消失,或者发出告警信息的条数在允许的范围内等。
先依据核心功能模块进行问题接口定位,缩小排查范围的同时定位问题接口,问题未解决的情况下,再依据预存数据进行问题接口定位,可以提高问题接口定位效率。
在实际应用中,还可能存在预存数据中没有匹配到与所确定的告警链路中调用关系相同的部分链路或完整链路,抑或是,所确定的告警链路中没有核心功能模块的情况,鉴于此,还提供另一种问题接口定位方法,相比于上述两种阶段,该阶段可以称为递归定位阶段,采用递归定位方式对业务系统中的告警链路进行问题接口定位。所述方法还包括:
从业务系统中查找与主调模块具有调用关系的所有被调模块,所述系统中包括多条业务链路;
按照被调模块中被调接口的调用量以及错误率,从查找出的被调模块中筛选出目标被调模块,所述调用量是主调模块在指定周期内调用被调模块的次数;
若所述目标被调模块中被调接口的错误率在预设正常范围内,则将所述目标被调模块作为主调模块,并返回执行查找与主调模块具有调用关系的所有被调模块的步骤;
若所述目标被调模块中被调接口的错误率不在预设正常范围内,则将所述目标被调模块中被调接口确定为问题接口。
该实施例以调用量和错误率先梳理出具有强依赖关系的链路,以便快速找出问题接口。
如图3所示,用户请求从接入层模块进入系统,到逻辑层处理(返回),最后到达存储层(返回),接入层模块的接口成为主调接口,通过自己的主调接口调用后端模块的被调接口,用户不同请求行为对后端的依赖强弱不同,从而调用量不同。假设没有阴影的模块为正常模块,即逻辑层模块6和存储层模块为正常模块,逻辑模块5为问题模块,接入层模块和逻辑层模块1至4为受逻辑层模块5影响的受影响模块。其中,被调模块的被调接口,是指被调模块中被主调模块调用的接口。本实施例可以将被调接口的调用量以及错误率作为选择被调模块的依据,从查找出的被调模块中筛选出目标被调模块。
在一个示例中,所述按照被调模块中被调接口的调用量以及错误率,从查找出的被调模块中筛选出目标被调模块,可以包括:
按照被调模块中被调接口的调用量降序排列各被调模块;
从排列靠前的指定个数的被调模块中筛选出错误率最大的被调模块,并将其作为目标被调模块。
该实施例主调模块的接口调用被调模块的接口,先以调用量降序列出模块间的强弱依赖关系,在此降序的基础上再按照错误率降序,找出调用量大且错误率高的被调模块的被调接口。通过先降序调用量再降序错误率,可以排除有些不用的被调接口,其错误率往往很高,但因为废弃调用量为0的情况,而这种情况不影响模块功能。
判断该目标被调模块中被调接口的错误率是否在预设正常范围内(预设正常范围根据业务特性定义),若在正常范围,可以递归将目标被调模块作为主调模块,列出该主调模块的被调模块的被调接口,同样以调用量和错误率降序,找出调用量大且错误率高的被调接口,并判断该被调接口的错误率是否在正常范围内;以此类推,可以梳理出调用量最大和报错率最高的一条链路,如图3所示,实线箭头表示调用量较大,并结合错误率,则,可以梳理出一条链路:接入层模块、逻辑层模块1、逻辑层模块5以及存储层模块。判断链路末端模块的错误率,若存在问题接口,则通报负责人处理。若处理后告警数依旧未减缓,则再次递归到接入层模块,按照调用量和错误率降序找出错误率次高的被调模块接口(方法),按照如上方法逐一递归排查。若处理后告警信息明显减少,业务功能正常,在一个示例中,可以记录整条链路中的各接口的错误率,存入链路特征库中,以供基于链路的快速定位阶段使用。具体的,所述方法还包括:
若目标被调模块的问题接口被修复处理后,正常业务条件满足,则存储所确定的问题接口、由第一个主调接口所在功能模块到所确定的问题接口所在功能模块构成的部分链路或完整链路、以及所构成的部分链路或完整链路的报错信息三者间的映射关系;或,
若目标被调模块的问题接口被修复处理后,正常业务条件满足,则存储所确定的问题接口、由第一个主调接口所在功能模块到所确定的问题接口所在功能模块构成的部分链路或完整链路、以及所构成的部分链路或完整链路中各被调接口的错误率间的映射关系。
该实施例通过递归定位,不仅能找到问题接口,还通过更新映射关系,便于后续出现问题时能利用映射关系快速定位到问题接口。
关于递归定位的执行时机,可以是在可以在基于链路的快速定位阶段之前执行,也可以在基于链路的快速定位阶段之后执行。示例的,所述从业务系统中查找与主调模块具有调用关系的所有被调模块的执行条件包括:
利用所述预存数据对所确定的告警链路或业务系统中所有的告警链路进行问题接口判断、且判断出的问题接口被修复处理后,功能模块发出告警信息的条数仍不满足正常业务条件,或,
利用所述预存数据对所确定的告警链路或业务系统中所有的告警链路进行问题接口判断、且未找出问题接口。
该实施例递归定位在基于链路的快速定位阶段之后执行,可以实现先局部定位,再全局定位,从而提高问题接口的定位效率。
其中,被调接口的调用量以及错误率可以从日志中获得。在一个示例中,所述日志的来源可以包括:线上环境中实际问题产生后生成的日志,和/或灰度环境中通过注入攻击信息产生问题后生成的日志。通过多种环境下产生的日志,可以增加递归定位阶段定位到问题模块的可能性。
以上实施方式中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述。以下以其中一种组合进行示例说明。
如图4所示,是本说明书根据一示例性实施例示出的另一种业务链路故障定位方法的流程图,所述方法包括:
在步骤401中,进入基于核心功能模块的快速定位阶段:按核心功能模块的重要等级排查核心功能模块中被调接口的错误率是否在预设正常范围内。
在该步骤中,在业务系统中存在包括核心功能模块的告警链路的情况下,按核心功能模块的重要等级由强到弱的顺序,依次判断核心功能模块中被调接口的错误率是否在预设正常范围内,将不在预设正常范围内的错误率所指示被调接口确定为问题接口。
在步骤402中,是否从告警链路中定位出问题接口,若是,则执行步骤403,业务系统中所有核心功能模块的问题接口被修复处理后,判断告警现象是否消失,若没有消失,则执行步骤404。若业务系统中所有核心功能模块中不存在问题接口,执行步骤404。
在步骤404中,进入基于链路的快速定位阶段:利用预存数据定位告警链路中的问题接口。
其中,利用预存数据定位告警链路中的问题接口的过程,可以包括:
从业务系统中确定告警链路;
判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,所述报错信息用于表征链路中各被调接口的错误率的关系;
若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据所述部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口,并处理所述问题接口,处理后,若仍不满足正常业务条件,返回执行从业务系统中确定告警链路的步骤,以从业务系统中确定一条新的告警链路进行问题接口定位。
若预存数据中不存在与所述告警链路中调用关系相同的部分链路或完整链路、或部分链路或完整链路中的报错信息与所述告警链路中的报错信息不相似,返回执行从业务系统中确定告警链路的步骤,以从业务系统中确定一条新的告警链路进行问题接口定位。
依此类推,直到业务系统中所有告警链路都利用预存数据进行问题接口定位后,若仍不满足正常业务条件,或者没有找出问题接口,则进入步骤405。
在步骤405中,利用所述预存数据对业务系统中所有的告警链路进行问题接口判断、且判断出的问题接口被修复处理后,功能模块发出告警信息的条数仍不满足正常业务条件,或,利用所述预存数据对业务系统中所有的告警链路进行问题接口判断、且未找出问题接口,则进入递归定位阶段。该阶段,可以包括:
从业务系统中确定主调模块;
从业务系统中查找与主调模块具有调用关系的所有被调模块,所述系统中包括多条业务链路;
按照被调模块中被调接口的调用量以及错误率,从查找出的被调模块中筛选出目标被调模块,所述调用量是主调模块在指定周期内调用被调模块的次数;错误率可以是指定周期内的错误率。
若所述目标被调模块中被调接口的错误率在预设正常范围内,则将所述目标被调模块作为主调模块,并返回执行查找与主调模块具有调用关系的所有被调模块的步骤;
若所述目标被调模块中被调接口的错误率不在预设正常范围内,则将所述目标被调模块中被调接口确定为问题接口,并处理问题接口。若告警现象消失,则表示定位成功,并以问题模块名以及接口名为键,本部分链路或完整链路上各模块名+接口名及其错误率为值,更新映射关系,以供基于链路的快速定位阶段使用。若告警现象没有消失,则可以返回执行查找与主调模块具有调用关系的所有被调模块的步骤。
其中,告警现象消失只是其中一种正常业务条件,还可以是其他条件,可以根据应用场景配置,在此不一一赘述。
当上述三个阶段完成后,告警现象仍为消失时,可以采用其他方式进行问题模块的接口定位,并利用定位结果更新映射关系。例如,可以采用人工定位的方式实现问题接口定位等。
在该实施例中,当出现大量告警时,触发基于核心功能模块的快速定位阶段,可以按照重要等级降序遍历核心功能模块,若模块中存在某个错误率偏离正常范围(固定时间周期内根据业务特性定义),则判断该核心功能模块的接口异常,缩小排查范围的同时定位问题接口。若基于核心功能模块的快速定位阶段定位出的所有问题接口处理后,告警数量无明显降低,可以进入在基于链路的快速定位阶段,在该阶段,可以梳理出所有告警链路,获取每条链路中各模块调用接口的错误率信息,逐一与预存数据比对,如果匹配成功,可以通报模块负责人处理,同时更新预存数据中的该条信息使用时间(记录保鲜,如果长时间未匹配成功,则设定该记录失效)。若基于链路的快速定位阶段处理后告警现象依然未减缓或定位失败,则进入递归定位阶段,从而实现先局部定位,再全局定位,可以提高定位效率,也可以提高定位的全面性。
与前述业务链路故障定位方法的实施例相对应,本说明书还提供了业务链路故障定位装置及其所应用的电子设备的实施例。
本说明书业务链路故障定位装置的实施例可以应用在计算机设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在计算机设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本说明书业务链路故障定位装置所在计算机设备的一种硬件结构图,除了图5所示的处理器510、网络接口520、内存530、以及非易失性存储器540之外,实施例中业务链路故障定位装置531所在的计算机设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图6所示,是本说明书根据一示例性实施例示出的一种业务链路故障定位装置的框图,每条业务链路包括具有调用关系的多个功能模块,一个功能模块提供一个或多个被调接口以供其他功能模块调用,所述装置包括:
链路确定模块62,用于确定告警链路;
数据判断模块64,用于判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,所述报错信息用于表征链路中各被调接口的错误率的关系;
问题定位模块66,用于若预存数据中存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似,则依据所述部分链路或完整链路中的问题接口,确定所述告警链路中引起告警的问题接口。
在一个实施例中,所述预存数据包括:历史告警链路中的问题接口、所述历史告警链路中部分链路或完整链路、以及该部分链路或完整链路的报错信息三者间的映射关系。所述历史告警链路中部分链路或完整链路包括:按历史告警链路中功能模块的调用关系,从历史告警链路的起始功能模块到问题接口所在功能模块。
在另一个实施例中,所述预存数据包括:历史告警链路中的问题接口、所述历史告警链路中部分链路或完整链路、以及该部分链路或完整链路中各被调接口的错误率间的映射关系。所述历史告警链路中部分链路或完整链路包括:按历史告警链路中功能模块的调用关系,从历史告警链路的起始功能模块到问题接口所在功能模块。
在另一个实施例中,功能模块预先被划分为核心功能模块或非核心功能模块,所述装置还包括快速定位模块(图6未示出),用于:
在所确定的告警链路包括核心功能模块的情况下或业务系统中存在包括核心功能模块的告警链路的情况下,判断核心功能模块中被调接口的错误率是否在预设正常范围内,将不在预设正常范围内的错误率所指示被调接口确定为问题接口。
在另一个实施例中,核心功能模块预先配置有重要等级;所述核心功能模块中被调接口的错误率是否在预设正常范围的判断过程,按核心功能模块的重要等级由强到弱的顺序依次进行判断;在每次检测到问题接口时输出修复该问题接口的指示信息。
在另一个实施例中,所述判断预存数据中是否存在与所述告警链路中调用关系相同的部分链路或完整链路、且部分链路或完整链路中的报错信息与所述告警链路中的报错信息相似的判断过程的执行条件,包括:
所确定的告警链路中或业务系统中所有核心功能模块的问题接口被修复处理后,功能模块发出告警信息的条数仍不满足预设的正常业务条件,或未找到核心功能模块的问题接口,所述业务系统中包括多条业务链路。
在另一个实施例中,所述装置还包括递归定位模块(图6未示出),用于:
从业务系统中查找与主调模块具有调用关系的所有被调模块,所述系统中包括多条业务链路;
按照被调模块中被调接口的调用量以及错误率,从查找出的被调模块中筛选出目标被调模块,所述调用量是主调模块在指定周期内调用被调模块的次数;
若所述目标被调模块中被调接口的错误率在预设正常范围内,则将所述目标被调模块作为主调模块,并返回执行查找与主调模块具有调用关系的所有被调模块的步骤;
若所述目标被调模块中被调接口的错误率不在预设正常范围内,则将所述目标被调模块中被调接口确定为问题接口。
在另一个实施例中,所述递归定位模块,具体用于:
按照被调模块中被调接口的调用量降序排列各被调模块;
从排列靠前的指定个数的被调模块中筛选出错误率最大的被调模块,并将其作为目标被调模块。
在另一个实施例中,所述从业务系统中查找与主调模块具有调用关系的所有被调模块的执行条件包括:
利用所述预存数据对所确定的告警链路或业务系统中所有的告警链路进行问题接口判断、且判断出的问题接口被修复处理后,功能模块发出告警信息的条数仍不满足正常业务条件,或,
利用所述预存数据对所确定的告警链路或业务系统中所有的告警链路进行问题接口判断、且未找出问题接口。
在另一个实施例中,所述装置还包括映射更新模块(图6未示出),用于:
若目标被调模块的问题接口被修复处理后,正常业务条件满足,则存储所确定的问题接口、由第一个主调接口所在功能模块到所确定的问题接口所在功能模块构成的部分链路或完整链路、以及所构成的部分链路或完整链路的报错信息三者间的映射关系。
在另一个实施例中,所述装置还包括映射更新模块(图6未示出),用于:若目标被调模块的问题接口被修复处理后,正常业务条件满足,则存储所确定的问题接口、由第一个主调接口所在功能模块到所确定的问题接口所在功能模块构成的部分链路或完整链路、以及所构成的部分链路或完整链路中各被调接口的错误率间的映射关系。
在另一个实施例中,被调接口的调用量以及错误率从日志中获得,所述日志的来源包括:线上环境中实际问题产生后生成的日志,和/或灰度环境中通过注入攻击信息产生问题后生成的日志。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
相应的,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述任一项业务链路故障定位方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
相应的,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序指令,所述程序指令用于实现上述任一项业务链路故障定位方法。
本说明书实施例可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。