CN113778777A - 一种日志回放方法和装置 - Google Patents

一种日志回放方法和装置 Download PDF

Info

Publication number
CN113778777A
CN113778777A CN202010598750.9A CN202010598750A CN113778777A CN 113778777 A CN113778777 A CN 113778777A CN 202010598750 A CN202010598750 A CN 202010598750A CN 113778777 A CN113778777 A CN 113778777A
Authority
CN
China
Prior art keywords
log
request
service
playback
original
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010598750.9A
Other languages
English (en)
Inventor
张恒强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202010598750.9A priority Critical patent/CN113778777A/zh
Publication of CN113778777A publication Critical patent/CN113778777A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种日志回放方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;根据所述请求的流水号,从数据库中获取所述请求对应的日志;基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。该实施方式能够解决需要回归大量测试场景的技术问题。

Description

一种日志回放方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种日志回放方法和装置。
背景技术
在日常编程中,因为性能的要求或者业务变更,需要对***进行重构,代码层面的重构更是频繁。如果重构较小,可以通过单元测试来保证重构的稳定性,但是如果重构改动较大或者***庞大、***间交互过多,则经常难以保证重构的稳定性,无法评估重构的影响范围。目前,主要依靠开发人员评估重构影响范围,测试人员根据影响范围全面回归测试。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
开发人员有时无法评估重构的影响范围,只能靠测试人员来最为最后一道防线,但是测试人员也无法覆盖所有的回归测试场景。而且,随着现代***基于微服务架构,***愈加复杂,重构的危险性更高,因此测试人员经常需要回归大量场景,费时又费力,还降低了重构***上线的效率。
发明内容
有鉴于此,本发明实施例提供一种日志回放方法和装置,以解决需要回归大量测试场景的技术问题。
为实现上述目的,根据本发明实施例的一个方面,提供了一种日志回放方法,包括:
在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;
根据所述请求的流水号,从数据库中获取所述请求对应的日志;
基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
可选地,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
可选地,在所述数据库中,行键为所述请求的流水号作为,列族包括所述请求调用的当前服务的原始出参和原始入参,所述请求调用的各个外部依赖服务的原始出参和原始入参。
可选地,从消息队列中获取消息之前,还包括:
将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。
可选地,基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,包括:
调用当前服务和各个外部依赖服务,并且在调用服务的过程中,每当遇到监控点,则获取所述当前服务的原数入参以及所述各个外部依赖服务的原始入参和原始出参,从而得到所述当前服务的出参;
将所述当前服务的出参与所述当前服务的原始出参进行对比,得到对比结果。
可选地,所述列族还包括回放结果和对比结果。
可选地,将对比结果和所述回放结果存储到所述数据库中,包括:
将所述当前服务的出参写入回放结果的列族中;
若所述对比结果为一致,则将所述对比结果写入对比结果的列族中;若所述对比结果为不一致,则将所述当前服务的出参和原始出参均写入对比结果的列族中。
另外,根据本发明实施例的另一个方面,提供了一种日志回放装置,包括:
获取模块,用于在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;
日志模块,用于根据所述请求的流水号,从数据库中获取所述请求对应的日志;
回放模块,用于基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
可选地,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
可选地,在所述数据库中,行键为所述请求的流水号作为,列族包括所述请求调用的当前服务的原始出参和原始入参,所述请求调用的各个外部依赖服务的原始出参和原始入参。
可选地,还包括注解模块,用于:
从消息队列中获取消息之前,将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。
可选地,所述回放模块还用于:
调用当前服务和各个外部依赖服务,并且在调用服务的过程中,每当遇到监控点,则获取所述当前服务的原数入参以及所述各个外部依赖服务的原始入参和原始出参,从而得到所述当前服务的出参;
将所述当前服务的出参与所述当前服务的原始出参进行对比,得到对比结果。
可选地,所述列族还包括回放结果和对比结果。
可选地,所述回放模块还用于:
将所述当前服务的出参写入回放结果的列族中;
若所述对比结果为一致,则将所述对比结果写入对比结果的列族中;若所述对比结果为不一致,则将所述当前服务的出参和原始出参均写入对比结果的列族中。
根据本发明实施例的另一个方面,还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行时,所述一个或多个处理器实现上述任一实施例所述的方法。
根据本发明实施例的另一个方面,还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例所述的方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用在重构业务***之后从消息队列中获取消息,然后根据消息携带的请求流水号从数据库中获取请求对应的日志,从而基于日志进行回放的技术手段,所以克服了现有技术中需要回归大量测试场景的技术问题。本发明实施例基于日志进行回放,不但能够保证重构的稳定性,还能减少人力成本、加快重构***上线的效率。因此,本发明实施例能够在保证重构稳定性的前提下,节省人力成本并加快***上线效率。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的日志回放方法的主要流程的示意图;
图2是根据本发明一个可参考实施例的日志回放方法的主要流程的示意图;
图3是根据本发明实施例的***架构的结构示意图;
图4是根据本发明实施例的日志回放装置的主要模块的示意图;
图5是本发明实施例可以应用于其中的示例性***架构图;
图6是适于用来实现本发明实施例的终端设备或服务器的计算机***的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的日志回放方法的主要流程的示意图。作为本发明的一个实施例,如图1所示,所述日志回放方法可以包括:
步骤101,在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号。
可选地,从消息队列中获取消息之前,还包括:将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。为了将回放结果与日志进行比对,需要在重构业务***之前,将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解,以收集日志;相应地,在重构业务***之后,也要将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解,以获取回放结果。
在本发明的实施例中,监控注解主要用于设置需要监控的点,方便收集日志数据或者回放结果,使用时需将此注解添加于需要监控的外部依赖服务对应的方法上。示例:
@ResourceMonitor(name=”xxx”,remark=”xxx”,class=”xxx”,method=”xx”),name标识收集点名称,remark用户说明收集点的作用,class声明类名,method声明监控的方法名称。
应用启动后,日志收集引擎自动启动,遍历所有监控点,施加监控,在实际执行的方法执行之前记录方法的入参,执行之后记录方法的出参。服务接收到请求后,会生成请求的流水号,并初始化顺序号。顺序号用于记录日志顺序,当前服务入口,顺序号为1,每到达一个服务,服务之前将顺序号加1。
例如:流水号为123,当前服务入口的顺序号为1,入参为{pin:xxxxx,id:123}。外部依赖服务1的顺序号为2,入参为{param1:xxx,param2:xxxx},出参为{result1:xxx,result2:xxxx},后续的外部依赖服务以此类推。比如,记录如下4条日志:
当前服务入参:
requestSerialNo:123,internalSerial:1,class:xxxx,method:xxxx,req:{pin:xxxx,id:123}
外部依赖服务1入参:
requestSerialNo:123,internalSerial:2,class:xxxx,method:xxxx,req:{param1:xxxx,param2:xxxx}
外部依赖服务1出参:
requestSerialNo:123,internalSerial:2,class:xxxx,method:xxxx,res:{result1:xxxx,result2:xxxx}
当前服务出参:
requestSerialNo:123,internalSerial:1,class:xxxx,method:xxxx,res:{result1:xxxx,result2:123}
中间若有其他的外部依赖服务,以此类推,不再赘述。
流水号标识一次请求的日志,顺序号标识请求中间日志生成的顺序。同时,日志收集引擎也会收集当前服务器的相关信息,记录于日志中。
由于收集过多日志,会影响***性能,因此提供临时的高速内存缓存服务,先将日志记录于内存中,待日志量增大到一定程度或者到了一段时间,将日志写至硬盘文件中。可以通过定时任务定时地将高速缓存中的日志取出,或者接到高速缓存的通知事件,将日志写至硬盘文件中。
可以通过LogStash(一个应用程序日志、事件的传输、处理、管理和搜索的平台)监听硬盘上的日志,将日志写至数据库中。同时,LogStash会对日志进行重新加工,将相同流水号的日志,写至同一个key中。可选地,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
根据定义的日志格式:
requestSerialNo:xxxx,internalSerial:xxxx,class:xxxx,method:xxxx,res:xxxxx,解析出请求流水号、顺序号、class、method等信息,根据请求流水号,将顺序号、class、method等信息写至key(即请求流水号)中。
可选地,在所述数据库中,行键(rowkey)为所述请求的流水号作为,列族包括所述请求调用的当前服务的原始出参和原始入参,所述请求调用的各个外部依赖服务的原始出参和原始入参。在数据库中,持久化存储日志数据,rowkey使用请求流水号,分为以下几个列族。
各个外部依赖服务的入参出参:detail
当前服务的入参出参:service
元数据信息:meta-info
回放结果:replay-result
对比结果:compara-result
示例如下:
当前服务(类为serviceclass,调用了method)有依赖外部服务1(类为class1,调用了方法method)和redis缓存服务(类为redisclass,调用了方法methhod)。则数据库中存储的日志数据如下:
列:detail:class1-method-req:{param1;xxx,param2:xxxx}
列:detail:class1-method-res:{result1:xxx,result2:xxx}
列:detail:redisclass-method-req:{key:xxxx}
列:redisclass-method-res:{result:xxxx}
列:service:serviceclass-method-req:{param1:xxx,param2:xxx}
列:service:serviceclass-method-res:{result1:xxxxx}
列:meta-info:ip:10.xx.xx.xx
列:meta-info:service-alias:xxxx
列:meta-info:service-class:serviceclass
列:meta-info:service-methhod:method
接着就可以对业务***进行重构,在重构业务***之后,通过定时任务定时地从数据库中取出日志数据中的流水号,放入消息队列,这样可以加快回放的速率。接着就可以从消息队列中获取消息,消息格式为{requestSerialNo:xxxx},解析得到流水号。
步骤102,根据所述请求的流水号,从数据库中获取所述请求对应的日志。
如步骤101中所述,由于在业务***重构之前,已经将收集到的日志存储到数据库中,因此可以根据消息中携带的请求流水号从数据库中获取所述请求对应的日志。可选地,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。在所述数据库中,行键为所述请求的流水号作为,列族包括所述请求调用的当前服务的原始出参和原始入参,所述请求调用的各个外部依赖服务的原始出参和原始入参。
步骤103,基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
由于在重构业务***之后,已将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解,因此基于日志对请求进行回放时可以收集回放结果。
可选地,基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,包括:调用当前服务和各个外部依赖服务,并且在调用服务的过程中,每当遇到监控点,则获取所述当前服务的原数入参以及所述各个外部依赖服务的原始入参和原始出参,从而得到所述当前服务的出参;将所述当前服务的出参与所述当前服务的原始出参进行对比,得到对比结果。
可选地,所述列族还包括回放结果和对比结果。rowkey还是步骤102中的请求流水号,此时会在请求流水号对应的回放结果列族写入回放结果,在对比结果列族写入对比结果。
可选地,将对比结果和所述回放结果存储到所述数据库中,包括:将所述当前服务的出参写入回放结果的列族中;若所述对比结果为一致,则将所述对比结果写入对比结果的列族中;若所述对比结果为不一致,则将所述当前服务的出参和原始出参均写入对比结果的列族中。如下所示:
列:replay-result:result{result1:xxx}
列:compare-result:result:same
若对比结果不一致,则;
列:compare-result:result:diff
compare-result:diff1:{expect:xxx,actual:xxxx}
compare-result:diff2:{expect:xxx,actual:xxxx}
根据上面所述的各种实施例,可以看出本发明实施例通过在重构业务***之后从消息队列中获取消息,然后根据消息携带的请求流水号从数据库中获取请求对应的日志,从而基于日志进行回放的技术手段,解决了现有技术中需要回归大量测试场景的技术问题。本发明实施例基于日志进行回放,不但能够保证重构的稳定性,还能减少人力成本、加快重构***上线的效率。因此,本发明实施例能够在保证重构稳定性的前提下,节省人力成本并加快***上线效率。
图2是根据本发明一个可参考实施例的日志回放方法的主要流程的示意图。作为本发明的又一个实施例,如图2所示,所述日志回放方法可以包括:
步骤201,在重构业务***之前,将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。
步骤202,应用启动后,日志收集引擎自动启动,遍历所有监控点,施加监控。
步骤203,服务接收到请求后,生成请求的流水号,并初始化顺序号,记录日志,并存储到数据库中。
其中,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
步骤204,在重构业务***之后,将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。
步骤205,从消息队列中获取消息,所述消息携带请求的流水号。
步骤206,根据所述请求的流水号,从数据库中获取所述请求对应的日志。
步骤207,调用当前服务和各个外部依赖服务,并且在调用服务的过程中,每当遇到监控点,则获取所述当前服务的原数入参以及所述各个外部依赖服务的原始入参和原始出参,从而得到所述当前服务的出参。
步骤208,将所述当前服务的出参与所述当前服务的原始出参进行对比,得到对比结果。
步骤209,将对比结果和所述回放结果存储到所述数据库中。
另外,在本发明一个可参考实施例中日志回放方法的具体实施内容,在上面所述日志回放方法中已经详细说明了,故在此重复内容不再说明。
图3是根据本发明实施例的***架构的结构示意图。如图3所示,所述***架构主要分为在原有***(即***重构之前)上部署的日志收集模块和在重构的***上运行的日志回放模块。
本发明实施例通过对***所有依赖的外部服务增加监控,记录当前服务请求的入参和出参,以及调用的各个外部服务的入参和出参,在进行日志回放时,排除了对外部服务的影响,最终影响回放结果的只有***自己的程序代码。对比服务的出参是否与原先服务的出参一致,若一致,则认为此日志回放通过。最终,随着回放日志的越来越多,日志回放通过的数量越来越多,通过率越来越高,则可认为重构的稳定性和准确性也是越来越高的。
下面详细描述日志收集模块和日志回放模块。
首先假设:要优化对外提供的一个服务,该服务依赖了多个外部依赖服务,分别为:依赖服务1、依赖服务2、缓存服务(redis缓存)和数据库服务。
日志收集模块主要包括:第一监控注解模块、监控日志收集引擎、请求上下文模块、高速缓存服务、定时任务、硬盘、LogStash和Hbase。
第一监控注解模块:
主要用于设置需要监控的点,方便收集日志数据,使用时需将此注解添加于需要监控的外部依赖服务对应的方法上。示例:
@ResourceMonitor(name=”xxx”,remark=”xxx”,class=”xxx”,method=”xx”),name标识收集点名称,remark用户说明收集点的作用,class声明类名,method声明监控的方法名称。
监控日志收集引擎:
应用启动后,监控日志收集引擎自动启动,遍历所有监控点,施加监控,在实际执行的方法执行之前记录方法的入参,执行之后记录方法的出参。服务接收到请求后,会生成请求的流水号,并初始化顺序号。顺序号用于记录日志顺序,当前服务入口,顺序号为1,每到达一个服务,服务之前将顺序号加1。
例如:流水号为123,当前服务入口的顺序号为1,入参为{pin:xxxxx,id:123}。外部依赖服务1的顺序号为2,入参为{param1:xxx,param2:xxxx},出参为{result1:xxx,result2:xxxx},后续的外部依赖服务以此类推。比如,记录如下4条日志:
当前服务入参:
requestSerialNo:123,internalSerial:1,class:xxxx,method:xxxx,req:{pin:xxxx,id:123}
外部依赖服务1入参:
requestSerialNo:123,internalSerial:2,class:xxxx,method:xxxx,req:{param1:xxxx,param2:xxxx}
外部依赖服务1出参:
requestSerialNo:123,internalSerial:2,class:xxxx,method:xxxx,res:{result1:xxxx,result2:xxxx}
当前服务出参:
requestSerialNo:123,internalSerial:1,class:xxxx,method:xxxx,res:{result1:xxxx,result2:123}
中间若有其他的外部依赖服务,以此类推,不再赘述。
请求上下文模块:
主要用于生成请求流水号和顺序号,流水号标识一次请求的日志,顺序号标识请求中间日志生成的顺序。同时,该模块还会收集当前服务器的相关信息,记录于日志中。
Memstore:
高速缓存服务,由于收集过多日志,会影响***性能,因此提供临时的高速内存缓存服务,先将日志记录于内存中,待日志量增大到一定程度或者到了一段时间,将日志写至硬盘文件中。
日志Worker:
定时地将高速缓存中的日志取出,或者接到高速缓存的通知事件,将日志写至硬盘文件中。
Disk File:
硬盘文件,存储日志。
LogStash:
监听硬盘上的日志,将日志写至数据库中。同时,LogStash会对日志进行重新加工,将相同流水号的日志,写至同一个key中。可选地,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
根据定义的日志格式:
requestSerialNo:xxxx,internalSerial:xxxx,class:xxxx,method:xxxx,res:xxxxx,解析出请求流水号、顺序号、class、method等信息,根据请求流水号,将顺序号、class、method等信息写至key(即请求流水号)中。
Hbase:
持久化存储日志数据,rowkey使用请求流水号,分为以下几个列族。
各个外部依赖服务的入参出参:detail
当前服务的入参出参:service
元数据信息:meta-info
回放结果:replay-result
对比结果:compara-result
示例如下:
当前服务(类为serviceclass,调用了method)有依赖外部服务1(类为class1,调用了方法method)和redis缓存服务(类为redisclass,调用了方法methhod)。则数据库中存储的日志数据如下:
列:detail:class1-method-req:{param1;xxx,param2:xxxx}
列:detail:class1-method-res:{result1:xxx,result2:xxx}
列:detail:redisclass-method-req:{key:xxxx}
列:redisclass-method-res:{result:xxxx}
列:service:serviceclass-method-req:{param1:xxx,param2:xxx}
列:service:serviceclass-method-res:{result1:xxxxx}
列:meta-info:ip:10.xx.xx.xx
列:meta-info:service-alias:xxxx
列:meta-info:service-class:serviceclass
列:meta-info:service-methhod:method
日志回放模块主要包括:回放配置中心、回放Worker、消息队列、第二监控注解模块、监控日志回放引擎、回放上下文模块、回放结果收集器、Hbase和WEB模块。
回放配置中心:
主要用于记录相关回放配置,比如回放日志断点,回放Worker一次取多少日志等。
回放Worker:
定时地从Hbase中取出数据,放入MQ消息队列,可以加快回放的速率。注意:需从回放配置中心获取数据回放点,从此处开始取数据,防止重复回放,浪费资源。
MQ消息队列:
接收回放Worker投入的消息,分发给消息消费者(即监控日志回放引擎)。消息格式为{requestSerialNo:xxxx}。
第二监控注解模块:
与第一监控注解模块类似,主要用于设置监控点,回放时遇到监控点,则根据注解从日志中获取数据,回放服务返回数据。
监控日志回放引擎:
监听MQ消息,处理日志回放,发起服务调用。在应用启动时,随之启动,收集监控注解获取监控点,并开启MQ消息监听,监听到消息后,从消息中获取到请求流水号,根据流水号从Hbase中获取到整个请求的所有数据,触发服务调用,注入服务入参,每遇到监控点,则从数据中获取到入参和出参,回放此依赖服务,最终获取到服务的出参,并与请求的原始出参比较,将比较结果写至回放结果收集器。
回放上下文模块:
临时存储当前请求的回放数据,方便日志回放。
回放结果收集器:
记录日志回放结果和比较结果。
Hbase:
存储回放结果,rowkey还是原先的请求流水号,此时会将请求流水号对应数据记录的回放结果和对比结果列族写入数据。
列:replay-result:result{result1:xxx}
列:compare-result:result:same
若对比结果不一致,则;
列:compare-result:result:diff
compare-result:diff1:{expect:xxx,actual:xxxx}
compare-result:diff2:{expect:xxx,actual:xxxx}
WEB模块:
主要提供可视化功能,查询收集的日志和回放结果,并提供简单的报表功能,此处不再详细概述
图4是根据本发明实施例的日志回放装置的主要模块的示意图,如图4所示,所述日志回放装置400包括获取模块401、日志模块402和回放模块403;其中,获取模块401用于在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;日志模块402用于根据所述请求的流水号,从数据库中获取所述请求对应的日志;回放模块403用于基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
可选地,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
可选地,在所述数据库中,行键为所述请求的流水号作为,列族包括所述请求调用的当前服务的原始出参和原始入参,所述请求调用的各个外部依赖服务的原始出参和原始入参。
可选地,还包括注解模块,用于:
从消息队列中获取消息之前,将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。
可选地,所述回放模块403还用于:
调用当前服务和各个外部依赖服务,并且在调用服务的过程中,每当遇到监控点,则获取所述当前服务的原数入参以及所述各个外部依赖服务的原始入参和原始出参,从而得到所述当前服务的出参;
将所述当前服务的出参与所述当前服务的原始出参进行对比,得到对比结果。
可选地,所述列族还包括回放结果和对比结果。
可选地,所述回放模块403还用于:
将所述当前服务的出参写入回放结果的列族中;
若所述对比结果为一致,则将所述对比结果写入对比结果的列族中;若所述对比结果为不一致,则将所述当前服务的出参和原始出参均写入对比结果的列族中。
根据上面所述的各种实施例,可以看出本发明实施例通过在重构业务***之后从消息队列中获取消息,然后根据消息携带的请求流水号从数据库中获取请求对应的日志,从而基于日志进行回放的技术手段,解决了现有技术中需要回归大量测试场景的技术问题。本发明实施例基于日志进行回放,不但能够保证重构的稳定性,还能减少人力成本、加快重构***上线的效率。因此,本发明实施例能够在保证重构稳定性的前提下,节省人力成本并加快***上线效率。
需要说明的是,在本发明所述日志回放装置的具体实施内容,在上面所述日志回放方法中已经详细说明了,故在此重复内容不再说明。
图5示出了可以应用本发明实施例的日志回放方法或日志回放装置的示例性***架构500。
如图5所示,***架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的物品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、物品信息——仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的日志回放方法一般由服务器505执行,相应地,所述日志回放装置一般设置在服务器505中。本发明实施例所提供的日志回放方法也可以由终端设备501、502、503执行,相应地,所述日志回放装置可以设置在终端设备501、502、503中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本发明实施例的终端设备的计算机***600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,计算机***600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有***600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本发明的***中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的***、方法和计算机程序的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取模块、日志模块和回放模块,其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,该设备实现如下方法:在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;根据所述请求的流水号,从数据库中获取所述请求对应的日志;基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
根据本发明实施例的技术方案,因为采用在重构业务***之后从消息队列中获取消息,然后根据消息携带的请求流水号从数据库中获取请求对应的日志,从而基于日志进行回放的技术手段,所以克服了现有技术中需要回归大量测试场景的技术问题。本发明实施例基于日志进行回放,不但能够保证重构的稳定性,还能减少人力成本、加快重构***上线的效率。因此,本发明实施例能够在保证重构稳定性的前提下,节省人力成本并加快***上线效率。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种日志回放方法,其特征在于,包括:
在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;
根据所述请求的流水号,从数据库中获取所述请求对应的日志;
基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
2.根据权利要求1所述的方法,其特征在于,所述日志包括:在重构业务***之前所述业务***接收的请求的流水号,所述请求调用的当前服务的顺序号、原始出参和原始入参,所述请求调用的各个外部依赖服务的顺序号、原始出参和原始入参。
3.根据权利要求2所述的方法,其特征在于,在所述数据库中,行键为所述请求的流水号作为,列族包括所述请求调用的当前服务的原始出参和原始入参,所述请求调用的各个外部依赖服务的原始出参和原始入参。
4.根据权利要求2所述的方法,其特征在于,从消息队列中获取消息之前,还包括:
将当前服务和各个外部依赖服务作为监控点,在所述当前服务对应的方法以及所述各个外部依赖服务对应的方法上分别添加监控注解。
5.根据权利要求4所述的方法,其特征在于,基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,包括:
调用当前服务和各个外部依赖服务,并且在调用服务的过程中,每当遇到监控点,则获取所述当前服务的原数入参以及所述各个外部依赖服务的原始入参和原始出参,从而得到所述当前服务的出参;
将所述当前服务的出参与所述当前服务的原始出参进行对比,得到对比结果。
6.根据权利要求5所述的方法,其特征在于,所述列族还包括回放结果和对比结果。
7.根据权利要求6所述的方法,其特征在于,将对比结果和所述回放结果存储到所述数据库中,包括:
将所述当前服务的出参写入回放结果的列族中;
若所述对比结果为一致,则将所述对比结果写入对比结果的列族中;若所述对比结果为不一致,则将所述当前服务的出参和原始出参均写入对比结果的列族中。
8.一种日志回放装置,其特征在于,包括:
获取模块,用于在重构业务***之后,从消息队列中获取消息,所述消息携带请求的流水号;
日志模块,用于根据所述请求的流水号,从数据库中获取所述请求对应的日志;
回放模块,用于基于所述日志对所述请求进行回放,将回放结果与所述日志进行对比,并将对比结果和所述回放结果存储到所述数据库中。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行时,所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
CN202010598750.9A 2020-06-28 2020-06-28 一种日志回放方法和装置 Pending CN113778777A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010598750.9A CN113778777A (zh) 2020-06-28 2020-06-28 一种日志回放方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010598750.9A CN113778777A (zh) 2020-06-28 2020-06-28 一种日志回放方法和装置

Publications (1)

Publication Number Publication Date
CN113778777A true CN113778777A (zh) 2021-12-10

Family

ID=78835218

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010598750.9A Pending CN113778777A (zh) 2020-06-28 2020-06-28 一种日志回放方法和装置

Country Status (1)

Country Link
CN (1) CN113778777A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114510494A (zh) * 2022-04-18 2022-05-17 成方金融科技有限公司 日志回放方法、装置及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109960653A (zh) * 2019-02-18 2019-07-02 天津五八到家科技有限公司 回归测试方法、装置、设备和存储介质
CN110489310A (zh) * 2018-09-25 2019-11-22 北京数聚鑫云信息技术有限公司 一种记录用户操作的方法、装置、存储介质及计算机设备
CN110928853A (zh) * 2018-09-14 2020-03-27 北京京东尚科信息技术有限公司 一种标识日志的方法和装置
CN110990228A (zh) * 2019-12-13 2020-04-10 集奥聚合(北京)人工智能科技有限公司 数据接口监控方法及装置
CN111209181A (zh) * 2018-11-21 2020-05-29 北京京东尚科信息技术有限公司 回归测试方法、***、装置以及计算机存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928853A (zh) * 2018-09-14 2020-03-27 北京京东尚科信息技术有限公司 一种标识日志的方法和装置
CN110489310A (zh) * 2018-09-25 2019-11-22 北京数聚鑫云信息技术有限公司 一种记录用户操作的方法、装置、存储介质及计算机设备
CN111209181A (zh) * 2018-11-21 2020-05-29 北京京东尚科信息技术有限公司 回归测试方法、***、装置以及计算机存储介质
CN109960653A (zh) * 2019-02-18 2019-07-02 天津五八到家科技有限公司 回归测试方法、装置、设备和存储介质
CN110990228A (zh) * 2019-12-13 2020-04-10 集奥聚合(北京)人工智能科技有限公司 数据接口监控方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114510494A (zh) * 2022-04-18 2022-05-17 成方金融科技有限公司 日志回放方法、装置及存储介质

Similar Documents

Publication Publication Date Title
CN110362544B (zh) 日志处理***、日志处理方法、终端及存储介质
CN111752799A (zh) 一种业务链路跟踪方法、装置、设备及储存介质
CN109992454B (zh) 故障定位的方法、装置和存储介质
US11036608B2 (en) Identifying differences in resource usage across different versions of a software application
CN111881011A (zh) 日志管理方法、平台、服务器及存储介质
US10657099B1 (en) Systems and methods for transformation and analysis of logfile data
US11526413B2 (en) Distributed tracing of huge spans for application and dependent application performance monitoring
EP3937022A1 (en) Method and apparatus of monitoring interface performance of distributed application, device and storage medium
CN110928934A (zh) 一种用于业务分析的数据处理方法和装置
CN111666201A (zh) 回归测试方法、装置、介质及电子设备
CN113886485A (zh) 数据处理方法、装置、电子设备、***和存储介质
CN114356692A (zh) 一种应用监控链路的可视化处理方法、装置及存储介质
CN115203004A (zh) 代码覆盖率测试方法、装置、存储介质及电子设备
CN115580607A (zh) 彩票***链路监控方法、装置及***
CN114153703A (zh) 微服务的异常定位方法、装置、电子设备和程序产品
CN112445691B (zh) 非侵入式智能合约性能检测方法和装置
CN113778777A (zh) 一种日志回放方法和装置
CN111698109A (zh) 监控日志的方法和装置
CN108959041B (zh) 信息发送的方法、服务器及计算机可读存储介质
CN110866031A (zh) 数据库访问路径的优化方法、装置、计算设备以及介质
US20160132399A1 (en) Implementing change data capture by interpreting published events as a database recovery log
CN110515803B (zh) 针对日志消息的处理方法、装置以及电子设备
CN112817874A (zh) 一种用户界面的测试方法、装置、设备及介质
CN113254325A (zh) 测试用例的处理方法和装置
CN112783754A (zh) 一种对页面进行测试的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination