首页> 中国专利> 一种基于拦截器的耗时异常分析的方法及系统、存储介质

一种基于拦截器的耗时异常分析的方法及系统、存储介质

摘要

本发明公开了一种基于拦截器的耗时异常分析的方法及系统、存储介质。该方法通过接收到前端请求消息,controller层拦截器获取url列表以确定是否要拦截;若需拦截则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;Service层拦截器判断threadlocal若存在则打印耗时日志,并转发外部调用拦截器;外部调用拦截器判断threadlocal若存在则打印耗时日志,并转发DAO拦截器;DAO拦截器判断threadlocal若存在标记则打印耗时日志;根据路径序号及耗时值确定有异常的方法序号。进而解决了相关技术中存在的打印日志量大且异常耗时点分析无法准确定位的问题,达到了提高有效打印的效率及准确定位异常点的技术效果。

著录项

  • 公开/公告号CN112783451A

    专利类型发明专利

  • 公开/公告日2021-05-11

    原文格式PDF

  • 申请/专利权人 中信银行股份有限公司;

    申请/专利号CN202110090500.9

  • 发明设计人 李辉;李林;张晖;元宇;查自强;

    申请日2021-01-22

  • 分类号G06F3/12(20060101);G06F16/955(20190101);

  • 代理机构11354 北京市兰台律师事务所;

  • 代理人张峰

  • 地址 100020 北京市朝阳区光华路10号1号楼中信大厦20层

  • 入库时间 2023-06-19 10:57:17

说明书

技术领域

本发明涉及异常定位技术领域,具体而言,涉及一种基于拦截器的耗时异常分析的方法及系统、存储介质。

背景技术

当系统中存在耗时比较长的服务,需要分析具体耗时点。现有技术中通过打印各层方法的参数和耗时,然后结合系统代码分析耗时点。

但是,现有技术的方式会存在一些缺陷,例如所有的服务都会被拦截并打日志,日志量大。此外,所打印的日志中看不出调用链路,需要根据代码来分析异常耗时点,工作量大。当对代码逻辑不熟悉、代码很长很复杂,或需要分析的服务很多时,所带来的问题更为凸显。

针对相关技术中存在的打印日志量大且异常耗时点分析无法准确定位的问题,尚未存在较好的解决方案。

发明内容

本发明实施例提供了一种基于拦截器的耗时异常分析的方法及系统、存储介质,以至少解决相关技术中存在的打印日志量大且调用异常耗时点分析无法准确定位的问题的技术问题。

根据本发明实施例的一个方面,提供了一种基于拦截器的耗时异常分析的方法,包括:

接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;

若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;

Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;

外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;

DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;

其中,耗时日志均包含路径序号、方法序号和耗时值;

根据所述路径序号及所述耗时值确定有异常的方法序号。

可选地,根据路径序号及耗时值确定有异常的方法序号包括:

路径序号为多层级序号;

根据路径序号的层级关系以及各层级耗时时长确定有异常的方法序号。

可选地,按照路径序号的层级关系,由第一层级依次向下一层级确认有异常的路径;

若任意路径耗时不存在异常,则不再向下一层级确认;

若任意路径耗时存在异常,则向下一层级再确认是否异常;

根据所确定有异常的路径确定存在异常的方法序号。

可选地,若任意路径耗时存在异常,则向下一级层级再确认包括:

若向下一层级再确认无异常,则根据所有下一层级所有耗时与本层级耗时确定是否为本层级路径异常。

可选地,若拦截器判断所述threadlocal中不存在所述标记,则直接放行,不打印耗时日志。

可选地,前端请求消息经过全部拦截器后则转发至业务服务层进行处理,完成处理并经过全部拦截器后再转发至系统前端。

根据本发明实施例的另一方面,还提供了一种基于拦截器的耗时异常分析的系统,包括拦截模块,拦截模块包括四个拦截器,拦截模块用于:

接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;

若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;

Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;

外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;

DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;

其中,耗时日志均包含路径序号、方法序号和耗时值;

异常确定模块,用于根据所述路径序号及所述耗时值确定有异常的方法序号。

可选地,拦截模块还用于将url地址存入url列表,并将url列表在内存中进行缓存。

可选地,异常确定模块包括:

路径序号为多层级序号;

根据路径序号的层级关系以及各层级耗时时长确定有异常的方法序号。

可选地,异常确定模块还包括:

按照路径序号的层级关系,由第一层级依次向下一层级确认有异常的路径;

若任意路径耗时不存在异常,则不再向下一层级确认;

若任意路径耗时存在异常,则向下一层级再确认是否异常。

可选地,拦截模块还包括:

若拦截器判断threadlocal中不存在标记,则直接放行,不打印耗时日志。

根据本发明实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项的基于拦截器的耗时异常分析的方法。

在本发明实施例中,通过接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;其中,耗时日志均包含路径序号、方法序号和耗时值;根据路径序号及耗时值确定有异常的方法序号。进而解决了相关技术中存在的打印日志量大且异常耗时点分析无法准确定位的问题,达到了具备提高有效打印的效率及准确定位异常点的技术效果。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的基于拦截器的耗时异常分析的方法流程图;

图2是根据本发明实施例的基于拦截器的耗时异常分析的逻辑原理图;

图3是根据本发明实施例的基于拦截器的耗时异常分析的系统结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例的一个方面,提供了一种基于拦截器的耗时异常分析的方法,可选地,作为一种可选的实施方式,本实施例中的基于拦截器的耗时异常分析的方法可以通过计算机程序的方式执行,并且,可以应用在终端或者服务器或者类似的运算装置或者电子设备中。示例性的,该运算装置或者电子设备可以包括一个或多个处理器(处理器可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器,还可以包括用于通信功能的传输设备以及输入输出设备。还可以包括比前述更多或者更少的组件,或者具有与前述所示不同的配置。存储器可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的耗时异常分析的方法对应的计算机程序,处理器通过运行存储在存储器内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。传输装置用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输装置包括一个网络适配器(Network InterfaceController,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

示例性的,作为一种可选的实施方式,图1是根据本发明实施例的基于拦截器的耗时异常分析的流程图,如图1所示,该方法包括:

步骤S101,接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;

其中,与系统前端采用的是http方式交互,在接收到前端服务请求后,首先会被拦截器拦截,经过所有拦截器后才会转发至业务层,待处理完后会再通过拦截器才能返回到系统前端。其中,则接收到前端服务请求后,controller层拦截器会进行先处理;

其中,controller层拦截器调用url控制服务获取要拦截的url列表,确认当前请求是否需要被拦截。

其中,打印日志时会调用日志序号服务在日志中增加序号,如果没有,则直接放行不打印日志。

步骤S102,若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;

其中,Service层拦截器通过检查threadlocal中是否存在标记,以确认当前服务是否需要被分析,如果需要分析,则打印耗时日志,打日志时会调用序号服务;

其中,后续两层的拦截器处理与Service层拦截器过程基本相似。

步骤S103,Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器。

步骤S104,外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器。

步骤S105,DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志。

步骤S106,耗时日志均包含路径序号、方法序号和耗时值;根据路径序号及耗时值确定有异常的方法序号;

例如,路径序号为1,1.1,1.2,1.2.1;方法序号为method1,method2;

其中耗时值指的是各路径对应的方法代码所消耗的时间;

其中,耗时分析是在各拦截器层实现的;

其中,上述日志包含路径序号、方法序号和耗时值,服务产出日志需要,类似于文档目录,用于表示方法调用链路,有助于快速方便的分析耗时点;

进行举例说明如何根据耗时差值k进行定位确定异常,其中打印日志如下:

序号=1.1.1,方法=Aservice.method1,耗时=20ms,参数=111

序号=1.1.2,方法=Aservice.method2,耗时=3ms,参数=111

序号=1.1,方法=Aservice.method3,耗时=24ms,参数=111

序号=1.2.1.1,方法=Aservice.method4,耗时=3024ms,参数=111

序号=1.2.1,方法=Aservice.method5,耗时=3032ms,参数=111

序号=1.2,方法=Aservice.method6,耗时=3033ms,参数=111

序号=1,方法=Aservice.method7,耗时=5033ms,参数=111

通过上述日志举例可以看出,能看出method4、method5、method6、method7这4个方法耗时比较长,如果没有打印序号,那从日志中并无法看出这些方法之间的调用关系,那这些耗时比较长的方法都需要分析,打印了序号后,很显然能看出method5和method6耗时之所以长,都是因为method4,因此method5和method6就不需要分析了,还能看出method7中除了method3和method6的耗时外,还有将近2000ms的耗时,也需要分析。

因此,按照本方案思路,先在确定序号1耗时较多,再看序号1.1和1.2。1.1中整体耗时较少,因此1.1的子节点1.1.1和子节点1.1.2即耗时少,method1、method2、method3则不再需要分析。而序号1.2耗时3033ms,序号1.2.1则耗时3032秒,则可知1.2是因为1.2.1的影响。而1.2.1.1耗时3024ms,因此可知method6最终是因为method4耗时多。因此,可以将问题定位到method4代码,于此同时,method7中出了除了method3和method6的耗时外,还有将近2000ms的耗时,因此也存在问题。

在一个示例性的实施方式中,将url地址存入url列表,并将url列表在内存中进行缓存;

需要说明的是,其它具备相同效果的存储方式均可。

在一个示例性的实施方式中,根据所述路径序号及所述耗时值确定有异常的方法序号包括:

路径序号为多层级序号;

具体的,例如第一级序号层级为1,下一级路径序号为1.1和1.2,再下一级序号为1.1.1,1.2.1;

根据路径序号的层级关系以及各层级耗时时长确定有异常的方法序号。

在一个示例性的实施方式中,按照所述路径序号的层级关系,由第一层级依次向下一层级确认有异常的路径;

若任意路径耗时不存在异常,则不再向下一层级确认;

若任意路径耗时存在异常,则向下一层级再确认是否异常;

根据所确定有异常的路径确定存在异常的方法序号;

具体的,先确定第一级路径序号的耗时是否存在异常,如存在异常,则向第二级路径序号进行确认是否耗时异常,以此类推。

在一个示例性的实施方式中,若向下一层级再确认无异常,则根据所有下一层级所有耗时与本层级耗时确定是否为本层级路径异常;

此外,若除所有下一层级路径以外还存在耗时较多的情况,则确定对应的该节点也存在异常需要分析。

在一个示例性的实施方式中,若拦截器判断threadlocal中不存在标记,则直接放行,不打印耗时日志。

在一个示例性的实施方式中,前端请求消息经过全部拦截器后则转发至业务服务层进行处理,完成处理并经过全部拦截器后再转发至系统前端。

图2是根据本发明实施例的基于拦截器的耗时异常分析的逻辑原理图,通过上述图进行例举介绍本方案的序号生成逻辑以及流程原理,具体地,

当url命中分析列表后,则初始化路径对象(路径为1,序号为0),存入栈;

在经过Service拦截器后,如判断有栈,则栈顶对象序号加1,栈中加入新对象,路径为当前对应的路径加序号,序号为0;

执行业务逻辑,弹出栈顶路径对象,打印日志;

跳出controller拦截器,如判断有栈,则打印耗时日志。

在本发明实施例中,通过接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;其中,耗时日志均包含路径序号、方法序号和耗时值;根据路径序号及耗时值确定有异常的方法序号。进而解决了相关技术中存在的打印日志量大且异常耗时点分析无法准确定位的问题,达到了具备提高有效打印的效率及准确定位异常点的技术效果。

本发明实施例还提供了一种基于拦截器的耗时异常分析的系统,该系统用于实现上述实施例及优选实施方式。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图3是根据本发明实施例的基于拦截器的耗时异常分析的系统结构框图,如图2所示,该系统包括:

拦截模块31,用于接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;

若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;

Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;

外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;

DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;

其中,耗时日志均包含路径序号、方法序号和耗时值;

异常确定模块32,用于根据所述路径序号及所述耗时值确定有异常的方法序号。

在一个示例性的实施方式中,拦截模块还用于将url地址存入url列表,并将url列表在内存中进行缓存。

在一个示例性的实施方式中,异常确定模块包括:

路径序号为多层级序号;

根据路径序号的层级关系以及各层级耗时时长确定有异常的方法序号。

在一个示例性的实施方式中,异常确定模块还包括:

按照路径序号的层级关系,由第一层级依次向下一层级确认有异常的路径;

若任意路径耗时不存在异常,则不再向下一层级确认;

若任意路径耗时存在异常,则向下一层级再确认是否异常。

在一个示例性的实施方式中,拦截模块还包括若拦截器判断threadlocal中不存在标记,则直接放行,不打印耗时日志。

还需要说明的是,其他具备相同效果的实施方式也可适用于本方案,此处不再赘述。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

根据本发明的实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行基于拦截器的耗时异常分析的方法中任一项方法实施例中的步骤。

可选地,在本实施例中,上述计算机可读的存储介质可以被设置为存储用于执行以下步骤的计算机程序:

步骤S1,接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;

步骤S2,若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;

步骤S3,Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;

步骤S4,外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;

步骤S5,DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;

步骤S6,耗时日志均包含路径序号、方法序号和耗时值;根据所述路径序号及所述耗时值确定有异常的方法序号。

通过上述步骤,通过接收到前端请求消息后,controller层拦截器获取统一资源定位url列表以确定是否要拦截;若需要拦截,则将前端请求消息的url地址加入线程threadlocal中进行标记后转发Service层拦截器,并打印耗时日志;Service层拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发外部调用拦截器;外部调用拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志,并转发DAO拦截器;DAO拦截器判断threadlocal是否存在标记,若存在标记则打印耗时日志;其中,耗时日志均包含路径序号、方法序号和耗时值;根据路径序号及耗时值确定有异常的方法序号。进而解决了相关技术中存在的打印日志量大且异常耗时点分析无法准确定位的问题,达到了具备提高有效打印的效率及准确定位异常点的技术效果。

可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领D域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号