一种日志生成方法、日志分析方法及装置与流程

文档序号:15281377发布日期:2018-08-28 23:34阅读:156来源:国知局

本发明涉及计算机技术,更具体地,涉及一种日志生成方法、日志分析方法及装置。



背景技术:

一个分布式的复杂系统中的逻辑处理过程常常会涉及到多台机器。以图1所示的和3台服务器相关的分布式请求服务过程为例,其涉及的服务器包括:前端服务器a,中间层服务器b,及后端服务器c。当用户发起一个请求时,请求首先到达前端服务器a,服务器a发送远程过程调用协议(rpc:remoteprocedurecallprotocol)消息到服务器b;服务器b需要和后端的服务器c交互之后再返回响应给服务器a,最后由服务器a响应最初的用户请求。

在分布式系统中,追踪一个逻辑处理过程是一个非常困难的事情,尤其当希望对这个处理过程从不同角度去分析时,比如从各个系统的角度,从触发这个逻辑处理的事件的角度,从发起这个逻辑处理的用户角度,从与这个逻辑处理相关联的对象角度等,在一个复杂的分布式系统里完成这些分析都是极具挑战的事情。

相关技术的做法是在各个系统里独立输出日志,然后通过某个唯一的标识(id)将这些日志贯穿起来。也就是说,现有的日志工具仅提供了单机日志能力,或者通过一个简单的id来串联多机日志的能力。这样的做法可以达到根据这个id来查询某个逻辑处理过程的所有日志,但却无法体现出逻辑处理过程是如何一步一步进行,如无法体现出系统之间调用的关系。对于一个系统内跨线程的逻辑处理过程,通过现有日志也很难串联起来。

随着日志分析的需求多样化,对系统的逻辑处理过程也希望能通过多个角度来进行。因此需要日志工具能提供更加丰富的,多维度的逻辑处理过程的分析。



技术实现要素:

有鉴于此,本发明实施例提供了一种日志生成方法,包括:

在逻辑处理过程的处理节点执行以下处理:

为该处理节点生成一个步标识;

为该处理节点生成日志记录,在所述日志记录中记录上一步标识和该处理节点的步标识,所述上一步标识是上一处理节点的步标识;

将该处理节点的步标识传递给下一处理节点。

本发明实施例还提供了一种日志生成装置,包括在逻辑处理过程的处理节点设置的日志生成模块,所述日志生成模块包括:

标识处理单元,设置为:获取上一处理节点的步标识,为本处理节点生成一个步标识并将本处理节点的步标识传递给下一处理节点;

记录生成单元,设置为:为本处理节点生成日志记录,在所述日志记录中记录上一步标识和该处理节点的步标识,所述上一步标识为所述标识处理单元获取的上一处理节点的步标识。

本发明实施例还提供了一种日志生成装置,包括处理器和存储器,其中:

所述存储器设置为:保存程序代码;

所述处理器设置为:读取所述程序代码,在所述逻辑处理过程的处理节点执行以下处理:

为该处理节点生成一个步标识;

为该处理节点生成日志记录,在所述日志记录中记录上一步标识和该处理节点的步标识,所述上一步标识是上一处理节点的步标识;

将该处理节点的步标识传递给下一处理节点。

上述方案生成的日志将逻辑处理过程的每一步串联起来,能够用于对复杂的逻辑处理过程(如分布式系统下多机多线程的逻辑处理过程)进行全链路的分析。

本发明实施例还提供了一种日志分析方法,用于对逻辑处理过程的日志记录进行分析,所述逻辑处理过程包括在n个处理节点上进行的n步处理,n≥2,所述日志记录中记录有步标识和上一步标识,所述方法包括:

确定所述n步处理中第n步处理的一组日志记录后,获取该组日志记录中记录的步标识并作为第n步步标识,n=1,2,3,……n;

查找记录的上一步标识为所述第n步步标识的日志记录,将查找到的日志记录确定为所述n步处理中第n+1步处理的一组日志记录。

本发明实施例还提供了一种日志分析装置,包括过程分析模块,所述过程分析模块用于对逻辑处理过程的日志记录进行分析,所述逻辑处理过程包括在n个处理节点上进行的n步处理,n≥2,所述日志记录中记录有步标识和上一步标识,所述过程分析模块包括:

步标识获取单元,设置为:确定所述n步处理中第n步处理的一组日志记录后,获取该组日志记录中记录的步标识并作为第n步步标识,n=1,2,3,……n;

记录查找单元,设置为:查找记录的上一步标识为所述第n步步标识的日志记录,将查找到的日志记录确定为所述n步处理中第n+1步处理的一组日志记录。

本发明实施例还提供了一种日志分析装置,包括处理器和存储器,其中:

所述存储器设置为:保存程序代码;

所述处理器设置为:读取所述程序代码,对逻辑处理过程的日志记录进行分析,所述逻辑处理过程包括在n个处理节点上进行的n步处理,n≥2,所述日志记录中记录有步标识和上一步标识,所述分析包括:

确定所述n步处理中第n步处理的一组日志记录后,获取该组日志记录中记录的步标识并作为第n步步标识,n=1,2,3,……n;

查找记录的上一步标识为所述第n步步标识的日志记录,将查找到的日志记录确定为所述n步处理中第n+1步处理的一组日志记录。

上述方案基于本发明实施例生成的日志,可以对复杂逻辑过程处理过程进行全链路的日志分析。

附图说明

图1是示例性的与3台服务器相关的分布式请求服务过程的示意图;

图2是本发明实施例一中示例性的逻辑处理过程的示意图;

图3是本发明实施例一日志生成方法的流程图;

图4是本发明实施例一日志生成模块的结构图;

图5是本发明实施例二日志分析方法的流程图;

图6是本发明实施例二过程分析模块的结构图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

实施例一

本实施例提供一种日志生成方法,使用该方法生成的日志可用于对包含逻辑处理过程进行全链路分析。

本申请的逻辑处理过程由多个处理节点完成,每一处理节点执行的处理构成其中的一步。为了帮助理解,以图2所示的一次逻辑处理过程作为示例。在该示例中,这些处理节点包括将服务器上的软件系统(简称系统)和系统中的组件(也可以称为控件、部件等),组件可以是实现一定功能的软件代码(源代码,二进制代码,可执行代码)或者一些类似内容(如脚本或者命令文件),但本发明处理节点的类型并不局限于此,可以根据逻辑处理过程的实际实现来划分。

在图2所示的示例中,该逻辑处理过程涉及的机器包括服务器1和服务器2,服务器1中包含组件1.1和组件1.2,服务2中包含组件2.1,而组件1.1可以对资源r1进行操作。

在服务器1接收到用户请求后,触发以下的逻辑处理过程:

服务器1上系统1的组件1.1执行内部处理(这里以更新资源r1为例);

服务器1上系统1的组件1.1调用服务器1上系统1的组件1.2;

服务器1上系统1的组件1.2调用服务器2上系统2的组件2.1;

服务器2上系统2的组件2.1返回调用给服务器1上系统1的组件1.2;

服务器1上系统1的组件1.2返回调用给服务器1上系统1的组件1.1;

服务器1上系统1的组件1.1返回响应给用户,逻辑处理完成。

如上所述,该逻辑处理过程涉及到多台机器上的系统,涉及到组件之间的多次调用。其中的处理节点包括系统1、组件1.1、组件1.2、系统2及组件2.1。

本实施例在所述逻辑处理过程的处理节点执行以下处理,如图3所示:

步骤110,为该处理节点生成一个步标识;

为该处理节点生成一个步标识(称为该处理节点的步标识),该步标识用于唯一标识该处理节点上的处理过程。每一个处理节点上的处理过程构成逻辑处理过程的一步处理。

就本实施例的示例而言,需要为系统1、组件1.1、组件1.2、系统2及组件2.1分别生成一个步标识,表示为stepid1~stepid5。另假定系统1、组件1.1、组件1.2、系统2及组件2.1的标识分别为system1、component1.1、component1.2、system2和component2.1。

本实施例中,为该处理节点生成所述步标识,可以通过日志生成装置在该处理节点增加拦截器,该拦截器检测到用户请求的逻辑处理过程进入该处理节点时,为该处理节点生成一个步标识。拦截器可以拦截代码的执行并做相关处理,例如,一个处理节点(系统或组件)被第一次调用时会被拦截器拦住,此时视为进入了处理节点,等系统/组件处理结束返回请求时又会回到拦截器里面,此时视为离开处理节点。进入及离开处理节点类似。拦截器既可以基于某些编程语言的特性,比如java的动态代理,进行自动拦截,也可以是不区分编程语言,而是在程序里需要拦截的地方显示的添加前后处理逻辑的代码。

所述为该处理节点生成日志记录,包括:在该处理节点增加拦截器,所述拦截器检测到所述一种或多种事件发生时,为该处理节点生成日志记录并输出,且在检测到进入该处理节点的事件时,还截取所述传递来的上一处理节点的步标识,并为该处理节点生成所述步标识。

为该处理节点生成步标识后,日志生成装置(也可以称为日志工具)将该步标识保存起来,在后续为该处理节点生成的日志记录中均需要记录该步标识。这些标识可以作为变量的值来保存如保存在堆栈中,日志生成装置经过配置后(输入配置文件,内容包括即将使用该工具的系统名称,运行时那些文件/代码属于什么组件等)开始被系统使用,日志生成装置可以为系统的每一个线程维护一组该线程的日志变量,以保存本线程的日志信息。

步骤120,为该处理节点生成日志记录,在所述日志记录中记录上一步标识和该处理节点的步标识,所述上一步标识是上一处理节点的步标识;

本实施例中,为该处理节点生成日志记录时,如未获取到上一处理节点的步标识(即为上一处理节点生成的步标识),则将一个默认在首个处理节点使用的上一步标识记录为该处理节点的上一步标识(用parentstepid表示)。就上述示例而言,系统1是首个处理节点,在系统1获取不到上一处理节点的步标识,因此为系统1生成的日志记录中的上一步标识采用默认标识如null。对于首个处理节点,也可以直接加一个标记,不一定通过parentstepid来表示。但用parentstepid统一表示可以简化后续的分析过程。

本实施例中,stepid表示当前处理节点上处理过程的id,parentstepid表示上一处理节点上处理过程的id,因而通过parentstepid和stepid可以将逻辑处理过程的每一步串联起来。例如,处理节点a调用处理节点b时,处理节点b的日志记录中parentstepid是为处理节点a生成的stepid,stepid是为处理节点b生成的stepid,就可以知道逻辑处理过程是从处理节点a上的处理过程进入到处理节点b上的处理过程。

本实施例中,步骤110需要为该处理节点生成所述步标识,本步骤120需要获取传递来的上一处理节点的步标识。这些处理可以通过日志生成装置在该处理节点增加的拦截器实现。例如,拦截器检测到逻辑处理过程进入该处理节点时,为该处理节点生成一个步标识,并截取传递来的上一处理节点的步标识。

拦截器截取传递来的上一处理节点的步标识可以包括:如果当前线程的日志变量stepid或者param中有有效的stepid值,或者http头里携带有stepid值,则获取stepid值,设置parentid为该stepid值,并保存在本线程的日志变量中。如果没有获取到,则将parentid设置为null。用户标识和跟踪标识的传递类似。当发生跨系统或跨服务器调用时,将本线程的日志变量保存在httpheader里或作为参数传给对方,由对方的拦截器截取出来。

本实施例中,在以下一种或多种事件发生时为该处理节点生成日志记录,且还在生成的日志记录中记录该处理节点的节点标识、相应事件的事件标识和事件发生时间(time):

进入该处理节点;

离开该处理节点;

该处理节点执行内部处理;

该处理节点发起调用;

该处理节点收到调用返回。

在上述示例中,当处理节点为系统时,相应的事件及事件标识包括:进入系统,事件标识为systemstart;离开系统,事件标识为systemend。当处理节点为组件时,相应的事件及事件标识包括:进入组件,事件标识为componentstart;离开组件,事件标识为componentend;组件执行内部处理,事件标识为componentprocessing;组件发起调用,事件标识为componentinvoke;组件的调用返回,事件标识为componentinvokereturn。在处理节点为组件时,在日志记录中还可以记录该组件所在系统的系统标识。另外,处理节点为系统和组件时,日志记录中均可以记录该处理节点所在机器的机器标识,如服务器1和服务顺2的标识server1、server2。本实施例有多个系统时,这些系统可以位于相同或不同的机器上。

以系统1和组件1.1为例,当用户请求进入到系统1处理时,将生成一条日志记录,该日志记录会记录步标识stepid=stepid1,上一步标识parentstepid=null,还会记录系统1的标识system1,所在服务器的机器标识server1,进入系统的事件标识systemstart及事件发生时间。当用户请求进入到组件1.1处理时,将生成一条日志记录,该日志记录会记录步标识stepid=stepid2,上一步标识parentstepid=stepid1,还会记录组件1.1的标识component1.1,所在系统的系统标识system1,所在服务器的机器标识,进入组件的事件标识componentstart及事件发生时间。其他事件的日志记录将在下文完整的示例中说明。

特别地,为该处理节点生成日志记录时,在该处理节点收到调用返回的事件发生时,在为该处理节点生成的日志记录中将被调用处理节点返回的该被调用处理节点的步标识记录为下一步标识(用childstepid表示)。例如,组件1.1调用组件1.2后,组件1.2在该调用返回时,可以将为其生成的步标识stepid3返回给组件1.1,而在组件1.1的调用返回时生成的日志记录中可以记录下一步标识childstepid=stepid3。

一步标识的作用可以用一个示例来说明:假定有处理节点a、b和c,如果调用方a先调用了b,等b返回了再调用c,则b的日志里能体现出来a->b的关联关系,c的日志里能体现出来a->c的关联关系,可是没有日志能直接体现a->b和a->c的顺序关系。为了能体现这个顺序,b调用返回给a时a的日志记录输出为b生成的步标识代表之前的调用是a->b,在c调用返回给a时a的日志记录输出为c生成的步标识代表之后的调用是a->c,这样结合日志记录的时间就能体现a->b和a->c的顺序关系。

步骤130,将该处理节点的步标识传递给下一处理节点。

本步骤的处理和生成日志记录处理并不要求有固定的顺序关系。

本实施例中,采用以下方式将该处理节点的步标识传递给下一处理节点:

该处理节点与下一处理节点属于不同系统时,将要传递的标识保存在http头中传递给下一处理节点;或者

该处理节点与下一处理节点属于同一系统时,将要传递的标识保存在日志变量中传递给下一处理节点。

在通过日志变量传递时,用于传递标识的日志变量可以是传入参数param,在标识用变量表示时,也可以是标识本身,如在一个线程内的不同组件之间传递时,可以用变量stepid或param传递步标识。

本实施例中,所述逻辑处理过程是对用户请求的服务过程;本实施例方法还包括:

在所述服务过程的首个处理节点获取所述用户的用户标识(user),并为所述服务过程生成一个跟踪标识(traceid);

所述服务过程的每个处理节点均将所述用户标识和跟踪标识传递到下一处理节点,可以采用与步标识相同的方式传递;

所述为该处理节点生成日志记录,还包括:在生成的日志记录中记录所述用户标识和跟踪标识。

其中,traceid可以用于标识一个逻辑处理过程。traceid和user也可以由拦截器从日志变量或http头中截取,如果截取不到,可以生成一个。另外,服务器标识可以根据当前服务器的ip/mac地址设置,并保存在本线程的日志变量中。系统标识和组件标识可以根据配置文件设置,并保存在本线程的日志变量中。

通过上述处理,就可以将用户标识和跟踪标识记录在该逻辑处理过程相关的每一个日志记录中,对跨机器和跨线程的逻辑处理过程同样适用。

另外,日志采集的能力是基于切片来实现的,包括用户id,系统信息等,都是切片,未来如果需要日志采集的时候输出其他信息,仅需要新增切片让日志系统载入这些切片即可,因而可支持动态扩展日志采集能力。

按照本实施例方法,针对上述示例中的逻辑处理过程,日志生成装置输出的日志记录如下(log1、log2等各代表一次日志记录,代码后的文字表示该日志记录对应的事件):

log1:[time][logiclevel=systemstart][loglevel=debug][user=user1][server=server1][system=system1][parentstepid=null][stepid=stepid1][traceid=traceid1][param](进入系统1)

log2:[time][logiclevel=componentstart][loglevel=debug][user=user1][server=server1][system=system1][component=component1.1][parentstepid=stepid1][traceid=traceid1][stepid=stepid2][param](进入组件1.1)

log3:[time][logiclevel=componentprocessing][loglevel=debug][user=user1][server=server1][system=system1][component=component1.1][parentstepid=stepid1][stepid=stepid2][traceid=traceid1][param][resource=r1](在组件1.1内更新资源)

log4:[time][logiclevel=componentinvoke][loglevel=debug][user=user1][server=server1][system=system1][component=component1.1][parentstepid=stepid1][stepid=stepid2][traceid=traceid1][param](组件1.1发起调用)

log5:[time][logiclevel=componentstart][loglevel=debug][user=user1][server=server1][system=system1][component=component1.2][parentstepid=stepid2][stepid=stepid3][traceid=traceid1][param](进入组件1.2)

log6:[time][logiclevel=componentinvoke][loglevel=debug][user=user1][server=server1][system=system1][component=component1.2][parentstepid=stepid2][stepid=stepid3][traceid=traceid1][param](组件1.2发起调用)

log7:[time][logiclevel=systemstart][loglevel=debug][user=user1][server=server2][system=system2][parentstepid=stepid3][stepid=stepid4][traceid=traceid1][param](进入系统2)

log8:[time][logiclevel=componentstart][loglevel=debug][user=user1][server=server2][system=system2][component=component2.1][parentstepid=stepid4][stepid=stepid5][traceid=traceid1][param](进入组件2.1)

log9:[time][logiclevel=componentend][loglevel=debug][user=user1][server=server2][system=system2][component=component2.1][parentstepid=stepid4][stepid=stepid5][traceid=traceid1][param][result](离开组件2.1)

log10:[time][logiclevel=systemend][loglevel=debug][user=user1][server=server2][system=system2][parentstepid=stepid3][stepid=stepid4][traceid=traceid1][param][result](离开系统2)

log11:[time][logiclevel=componentinvokereturn][loglevel=debug][user=user1][server=server1][system=system1][component=component1.2][parentstepid=stepid2][stepid=stepid3][childstepid=stepid4][traceid=traceid1][param](组件1.2调用返回)

log12:[time][logiclevel=componentend][loglevel=debug][user=user1][server=server1][system=system1][component=component1.2][parentstepid=stepid2][stepid=stepid3][traceid=traceid1][param][result](离开组件1.2)

log13:[time][logiclevel=componentinvokereturn][loglevel=debug][user=user1][server=server1][system=system1][component=component1.1][parentstepid=stepid1][stepid=stepid2][childstepid=stepid3][traceid=traceid1][param][result](组件1.1调用返回)

log14:[time][logiclevel=componentend][loglevel=debug][user=user1][server=server1][system=system1][component=component1.1][parentstepid=stepid1][traceid=traceid1][stepid=stepid2][param][result](离开组件1.1)

log15:[time][logiclevel=systemend][loglevel=debug][user=user1][server=server1][system=system1][parentstepid=null][stepid=stepid1][traceid=traceid1][param][result](离开系统1)

上述日志记录中的变量“resource”表示资源标识,logiclevel是是日志内容的级别,如是调试用的还是业务用的。其他变量在上文已经说明,这里不再赘述。

以上日志记录了逻辑处理过程在5个处理节点上的5步处理,步标识分别为stepid1~stepid5。

本实施例还提供了一种日志生成装置,包括在逻辑处理过程的处理节点设置的日志生成模块,如图4所示,所述日志生成模块包括:

标识处理单元10,设置为:获取上一处理节点的步标识,为本处理节点生成一个步标识并将本处理节点的步标识传递给下一处理节点;

记录生成单元20,设置为:为本处理节点生成日志记录,在所述日志记录中记录上一步标识和该处理节点的步标识,所述上一步标识为所述标识处理单元获取的上一处理节点的步标识。

本实施例中,

所述标识处理单元还设置为:在所述标识处理单元未获取到上一处理节点的步标识时,在为本处理节点生成的日志记录中将一个默认在首个处理节点使用的上一步标识作为要记录的上一步标识。

本实施例中,

所述记录生成单元为本处理节点生成日志记录,包括:在以下一种或多种事件发生时为本处理节点生成日志记录,且在生成的日志记录中记录本处理节点的节点标识、相应事件的事件标识和事件发生时间:

进入该处理节点;

离开该处理节点;

该处理节点执行内部处理;

该处理节点发起调用;

该处理节点收到调用返回。

本实施例中,

所述逻辑处理过程的处理节点包括服务器中的系统和系统中的组件;所述记录生成单元为本处理节点生成日志记录,包括:

如该处理节点为系统,在进入该系统和离开该系统的事件发生时为该处理节点生成日志记录;

如该处理节点为组件,在进入该组件、离开该组件、该组件执行内部处理、该组件调用其他组件和该组件调用返回的事件发生时为该组件生成日志记录,且在生成的日志记录中记录该组件所在系统的系统标识。

本实施例中,

所述记录生成单元为本处理节点生成日志记录,包括:在该处理节点收到调用返回的事件发生时,在为该处理节点生成的日志记录中将被调用处理节点返回的该被调用处理节点的步标识记录为下一步标识。

本实施例中,

在所述日志生成模块包括在处理节点增加的拦截器。

本实施例中,

所述逻辑处理过程是对用户请求的服务过程;

所述服务过程的首个处理节点上的标识处理单元还设置为:获取所述用户的用户标识,并为所述服务过程生成一个跟踪标识;

所述逻辑处理过程各处理节点上的标识处理单元还设置为:将所述用户标识和跟踪标识传递到下一处理节点;

所述记录生成单元为本处理节点生成日志记录,还包括:在生成的日志记录中记录所述用户标识和跟踪标识。

本实施例中,

所述标识处理单元采用以下方式将本处理节点的步标识传递给下一处理节点:

该处理节点与下一处理节点属于不同系统时,将要传递的标识保存在http头中传递给下一处理节点;或者

该处理节点与下一处理节点属于同一系统时,将要传递的标识保存在日志变量中传递给下一处理节点。

本发明实施例还提供了一种日志生成装置,包括处理器和存储器,其中:

所述存储器设置为:保存程序代码;

所述处理器设置为:读取所述程序代码,在所述逻辑处理过程的处理节点执行以下处理:

为该处理节点生成一个步标识;

为该处理节点生成日志记录,在所述日志记录中记录上一步标识和该处理节点的步标识,所述上一步标识是上一处理节点的步标识;

将该处理节点的步标识传递给下一处理节点。

所述处理器执行上述处理的具体方式及执行的其他处理见本实施例方法中的描述,这里不再赘述。

本实施例方案生成的日志通过步标识和上一步标识将逻辑处理过程的每一步串联起来,能够用于对复杂的逻辑处理过程(如分布式系统下多机多线程的逻辑处理过程,但不限于分布式系统)进行全链路的分析,确定逻辑处理过程中每一步处理之间的关系,包括处理节点之间的调用关系,不会受到系统时间差的影响。

虽然本实施例给出的示例是涉及两台服务器上的系统和组件的逻辑处理过程,但对于涉及到更多服务器的逻辑处理过程,包括一台服务器向多台服务器同时或先后发起调用的情况也同样适用。

实施例二

本实施例提供一种日志分析方法,基于实施例一日志生成方法生成的日志进行分析,即使对跨机器跨线程的逻辑处理过程,也可以通过日志分析将各处理节点上的处理过程串接起来,实现全链路分析的效果。

没有特别说明时,本申请的日志分析方法是基于本申请日志生成方法生成的日志进行分析。

本实施例提供了一种日志分析方法,用于对逻辑处理过程的日志记录进行分析,所述逻辑处理过程包括在n个处理节点上进行的n步处理,n≥2,所述日志记录中记录有步标识和上一步标识,如图5所示,所述方法包括:

步骤210,确定所述n步处理中第n步处理的一组日志记录后,获取该组日志记录中记录的步标识并作为第n步步标识,n=1,2,3,……n;

第n步步标识即进行第n步处理的处理节点的步标识。仍以作为实施例一示例的逻辑处理过程为例,基于实施例一为该逻辑处理过程生成的日志进行分析,该逻辑处理过程的日志记录可以根据该逻辑处理过程的跟踪标识traceid1筛选得到。按照实施例一示例生成的日志记录,在确定所述n步处理中第1步处理的一组日志记录即log1,log15后,可以获取到该组日志记录中记录的步标识为stepid1。

本实施例中,可以通过查找记录的上一步标识为默认在首个处理节点使用的上一步标识的日志记录,将查找到的日志记录确定为所述n步处理中第1步处理的一组日志记录。但本发明不局限于此,也可以通过日志记录中的其他变量或标志来表示这是首个处理节点的日志记录。

步骤220,查找记录的上一步标识为所述第n步步标识的日志记录,将查找到的日志记录确定为所述n步处理中第n+1步处理的一组日志记录。

按照示例,第1步处理的一组日志记录中记录的步标识为stepid1,查找上一步标识即parentstepid=stepid1的日志记录,可以查找到第二步处理的一组日志记录log2,log3,log4,log13,log14。

上述两个步骤表明对于n=1,2,3,4,5均按照相同的方式处理,就可以得到第1~5步的日志记录。n=5时查找不到parentstepid=stepid5日志记录,可以结束查找。

因为所述逻辑处理过程的日志记录中记录有事件的事件标识、事件发生时间及事件关联的处理节点的标识信息;因此,本实施例根据所述第n步处理的一组日志记录,可以确定所述第n步处理的处理节点、发生的事件及事件发生时间,其中,发生的所述事件包括以下一种或多种:进入处理节点、离开处理节点、处理节点执行内部处理、处理节点发起调用,及处理节点接收调用返回。

另外,实施例一生成的日志记录中还记录有用户id的信息,可以从发起这个逻辑处理的用户角度,根据用户id来过滤并获取日志,进而分析用户的操作行为以及每个操作的完成处理过程。如果需要从与这个逻辑处理相关联的其他对象角度分析,也可以根据对应的id来过滤并获取日志,分析该对象所关联的操作以及处理过程。从而能提供更加丰富的,多维度的逻辑处理过程的分析。

基于实施例一生成的日志,按照本实施例方法可以清晰的分析出来整个逻辑处理过程(用traceid1标识)的每一步处理的关系及每一步处理的内容,分析过程如下:

■根据parentstepid=null,traceid=traceid1找到log1,log15;

■对log1,log15进行分析:

■log1表明进入服务器1上系统1;

■log15表明离开服务器1上系统1;

■该系列日志记录的步标识stepid为stepid1;

■寻找上一步标识parentstepid=stepid1的日志记录,找到log2,log3,log4,log13,log14;

■对log2,log3,log4,log13,log14进行分析:

■log2表明进入服务器1上系统1的组件1.1;

■log3表明服务器1上系统1的组件1.1的一段内部处理逻辑,更新资源r1;

■log4表明服务器1上系统1的组件1.1正在调用另一个组件;

■log13表明服务器1上系统1的组件1.1收到调用返回;

■log14表明离开服务器1上系统1的组件1.1;

■该系列日志记录的步标识stepid为stepid2;

■寻找上一步标识parentstepid=stepid2的日志记录,找到log5,log6,log11,log12;

■对log5,log6,log11,log12进行分析:

■log5表明进入服务器1上系统1的组件1.2;

■log6表明服务器1上系统1的组件1.2正在调用另一个组件;

■log11表明服务器1上系统1的组件1.2收到调用返回;

■log12表明离开服务器1上系统1的组件1.2;

■该系列日志记录的步标识stepid为stepid3;

■寻找上一步标识parentstepid=stepid3的日志记录,找到日志记录log7,log10;

■对log7,log10进行分析:

■log7表明进入服务器2上系统2;

■log10表明离开服务器2上系统2;

■该系列日志记录的步标识stepid为stepid4;

■寻找上一步标识parentstepid=stepid4的日志记录,找到log8,log9;

■对log8,log9进行分析:

■log8表明进入服务器2上系统2的组件2.1;

■log9表明离开服务器2上系统2的组件2.1;

■该系列日志记录的步标识stepid为stepid5;

■寻找上一步标识parentstepid=stepid5的日志记录,没有找到,结束。

本实施例还提供了一种日志分析装置,包括过程分析模块,所述过程分析模块用于对逻辑处理过程的日志记录进行分析,所述逻辑处理过程包括在n个处理节点上进行的n步处理,n≥2,所述日志记录中记录有步标识和上一步标识,所述过程分析模块包括:

步标识获取单元50,设置为:确定所述n步处理中第n步处理的一组日志记录后,获取该组日志记录中记录的步标识并作为第n步步标识,n=1,2,3,……n;

记录查找单元60,设置为:查找记录的上一步标识为所述第n步步标识的日志记录,将查找到的日志记录确定为所述n步处理中第n+1步处理的一组日志记录。

本实施例中,

所述记录查找单元还设置为:查找记录的上一步标识为默认在首个处理节点使用的上一步标识的日志记录,将查找到的日志记录确定为所述n步处理中第1步处理的一组日志记录。

本实施例中,

所述逻辑处理过程的日志记录中还记录事件的事件标识、事件发生时间及事件关联的处理节点的标识信息;

所述过程分析模块还包括:事件查看模块70,设置为:根据所述第n步处理的一组日志记录,确定所述第n步处理的处理节点、发生的事件及事件发生时间;所述事件包括以下一种或多种:进入处理节点、离开处理节点、处理节点执行内部处理、处理节点发起调用,及处理节点接收调用返回。

本实施例还提供了一种日志分析装置,包括处理器和存储器,其中:

所述存储器设置为:保存程序代码;

所述处理器设置为:读取所述程序代码,对逻辑处理过程的日志记录进行分析,所述逻辑处理过程包括在n个处理节点上进行的n步处理,n≥2,所述日志记录中记录有步标识和上一步标识,所述分析包括:

确定所述n步处理中第n步处理的一组日志记录后,获取该组日志记录中记录的步标识并作为第n步步标识,n=1,2,3,……n;

查找记录的上一步标识为所述第n步步标识的日志记录,将查找到的日志记录确定为所述n步处理中第n+1步处理的一组日志记录。

所述处理器执行上述处理的具体方式及执行的其他处理见本实施例方法中的描述,这里不再赘述。

本实施例方案基于实施例一生成的日志,可以实现对复杂逻辑过程处理过程进行全链路的日志分析。

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

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1