本申请涉及数据处理技术领域,尤其涉及一种全链路日志的生成方法及相关系统。
背景技术:
针对请求方发送的请求,一般需要通过多个节点执行多个服务的调用。由请求方开始直至多个节点之间所构成的调用链路则可称之为全链路。全链路日志则用于记录每一个服务被节点所调用的状态。
目前,实现全链路日志的生成过程,一般是通过修改调用服务的程序,让服务在被调用后生成并传递对应的链路日志。然而,修改调用服务的程序,意味着针对任意一种请求而调用该服务时,均需要生成链路日志,这会增加许多不必要的链路日志。
技术实现要素:
基于上述现有技术的不足,本申请提出一种全链路日志的生成方法及相关系统,以解决针对任意一种请求而调用服务时,均生成链路日志导致增加了不必要的链路日志的问题。
为解决上述问题,现提出的方案如下:
一种全链路日志的生成方法,包括:
接收调用请求,其中,所述调用请求用于调用服务;
判断所述调用请求对应的服务是否属于被监控的服务;
若判断出所述调用请求对应的服务属于所述被监控的服务,则在所述调用请求对应的服务被调用后,生成链路日志。
可选地,在上述方法中,所述判断所述调用请求对应的服务,是否属于被监控的服务,包括:
获取预设构建的名单,其中,所述名单包括黑名单和白名单的至少一个;其中,所述黑名单用于存储无需监控的服务信息,所述白名单用于存储需要监控的服务信息;
将所述调用请求对应的服务与所述名单中的服务信息进行匹配;
若所述调用请求对应的服务与所述黑名单中的服务信息不匹配,和/或,所述调用请求对应的服务与所述白名单中的服务信息相匹配,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,在上述方法中,所述名单包括黑名单,且所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;
所述将所述调用请求对应的服务与所述名单中的服务信息进行匹配,包括:
确定出所述调用请求对应的服务的类型信息和调用的方法名;
将所述确定出的服务的类型信息与所述黑名单中的容器级名单进行匹配,且将所述确定出的服务调用的方法名与所述黑名单中程序级名单进行匹配;
若所述确定出的服务的类型信息不属于所述黑名单中的容器级名单,且所述确定出的类型信息不属于所述黑名单中程序级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,在上述方法中,所述名单包括白名单,且所述白名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;
所述将所述调用请求对应的服务与所述名单中的服务信息进行匹配,包括:
确定出所述调用请求对应的服务的类型信息和调用的方法名;
将所述确定出的服务的类型信息与所述白名单中的容器级名单进行匹配,且将所述确定出的服务调用的方法名与所述白名单中程序级名单进行匹配;
其中,若所述确定出的服务的类型信息属于所述白名单中的容器级名单,且所述确定出的类型信息属于所述白名单中程序级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,在上述方法中,所述名单包括黑名单和白名单,且所述白名单包括容器级名单和程序级名单,所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;
所述将所述调用请求对应的服务与所述名单中的服务信息进行匹配,包括:
确定出所述调用请求对应的服务的类型信息和调用的方法名;
将所述确定出的服务的类型信息,分别与所述白名单的容器级名单和所述黑名单的容器级名单进行匹配,且将所述确定出的服务调用的方法名,分别与所述白名单的程序级名单和所述黑名单的程序级名单进行匹配;
其中,若所述确定出的服务的类型信息属于所述白名单的容器级名单、且不属于所述黑名单的容器级名单,所述确定出的服务调用的方法名属于所述白名单的程序级名单,且不属于所述黑名单的容器级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,在上述方法中,生成链路日志后,还包括:
获取所述调用请求中的事务id以及服务调用链序号;
更新所述服务调用链序号;
依据所述事务id和所述更新后的服务调用链序号生成调用请求,并向下一服务传输。
可选地,在上述方法中,还包括:
判断出获取不到所述调用请求中的事务id以及服务调用链序号,则创建唯一的事务id并设置服务调用链序号为初始值。
一种全链路日志的生成装置,包括:
接收单元,用于接收调用请求,其中,所述调用请求用于调用服务;
判断单元,用于判断所述调用请求对应的服务是否属于被监控的服务;
生成单元,用于所述判断单元若判断出所述调用请求对应的服务属于所述被监控的服务,则在所述调用请求对应的服务被调用后,生成链路日志。
可选地,在上述装置中,所述判断单元,包括:
第一获取单元,用于获取预设构建的名单,其中,所述名单包括黑名单和白名单的至少一个;其中,所述黑名单用于存储无需监控的服务信息,所述白名单用于存储需要监控的服务信息;
匹配单元,用于将所述调用请求对应的服务与所述名单中的服务信息进行匹配;
若所述调用请求对应的服务与所述黑名单中的服务信息不匹配,和/或,所述调用请求对应的服务与所述白名单中的服务信息相匹配,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,在上述装置中,所述名单包括黑名单和白名单,且所述白名单包括容器级名单和程序级名单,所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;所述匹配单元,包括:
确定单元,用于确定出所述调用请求对应的服务的类型信息和调用的方法名;
匹配子单元,用于将所述确定出的服务的类型信息,分别与所述白名单的容器级名单和所述黑名单的容器级名单进行匹配,且将所述确定出的服务调用的方法名,分别与所述白名单的程序级名单和所述黑名单的程序级名单进行匹配;
其中,若所述确定出的服务的类型信息属于所述白名单的容器级名单、且不属于所述黑名单的容器级名单,所述确定出的服务调用的方法名属于所述白名单的程序级名单,且不属于所述黑名单的容器级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
一种电子设备,包括:
存储器和处理器;其中,所述存储器同于存储计算机指令;所述处理器用于执行所述存储器存储的计算机指令,具体执行上述中任意一项所述的全链路日志的生成方法。
一种存储介质,用于存储程序,所述程序被执行时,用于实现上述任意一项所述的全链路日志的生成方法。
本申请提供的全链路日志的生成方法中,在接收到调用请求后,先判断所述调用请求对应的服务是否属于被监控的服务;在判断出所述调用请求对应的服务属于所述被监控的服务,才在所述调用请求对应的服务被调用后,生成链路日志,解决了针对任意一种请求而调用服务时,均生成链路日志导致增加了不必要的链路日志的问题。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例公开的一种全链路日志的生成方法的流程图;
图2为本申请另一实施例公开的步骤s102的一种实施方式的流程图;
图3为本申请另一实施例公开的步骤s202的一种实施方式的流程图;
图4为本申请另一实施例公开的步骤s202的一种实施方式的流程图;
图5为本申请另一实施例公开的步骤s202的一种实施方式的流程图;
图6为本申请另一实施例公开的黑白名单展示图;
图7为本申请另一实施例公开的一种全链路日志的生成方法的流程图;
图8为本申请另一实施例公开的全链路日志的生成装置的结构示意图;
图9位本发明另一实施例公开的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提出一种全链路日志的生成方法及装置,以解决针对任意一种请求而调用服务时,均生成链路日志导致增加了不必要的链路日志的问题。
如图1所示,本申请实施例公开的全链路日志的生成方法,包括步骤:
s101、接收调用请求,其中,所述调用请求用于调用服务。
请求方向接收方发送调用请求,以调用接收方的每个服务。作为任意一个节点的接收方,接收到所述调用请求之后,确定该调用请求用于请求的服务,即调用请求对应的服务。
s102、判断所述调用请求对应的服务是否属于被监控的服务。
针对需要进行监控的服务,节点需要生成链路日志。因此,在接收方接收到调用请求,确定该调用请求对应的服务后,需要进一步判断该调用请求对应的服务是否属于被监控的服务。
其中,作为一种是实施方式,预先为被监控的服务设置标签,发送方发送的调用请求中携带调用请求对应的服务的标签,在接收方确定出调用请求对应的服务,则可以利用标签匹配的方式来判断调用请求对应的服务是否属于被监控的服务。
可选地,本申请的另一实施例中,步骤s102的另一种实施方式,可以设置两个名单,具体为黑名单和白名单,所述黑名单用于存储无需监控的服务信息,所述白名单用于存储需要监控的服务信息。并且,本实施例中,服务信息也可以是服务的标签,当然还可以是其他信息,只要能唯一确定出服务即可。
具体的,本实施例公开的判断所述调用请求对应的服务是否属于被监控的服务,如图2所示,包括:
s201、获取预设构建的名单。
本步骤中,获取的名单包括黑名单和白名单中的至少一个。因此,可以仅获取白名单,也可以仅获取黑名单,当然还可以获取黑名单和白名单,通过两个名单来判断调用请求对应的服务是否属于被监控的服务。
s202、将所述调用请求对应的服务与获取的名单中的服务信息进行匹配。
根据步骤s201获取得到的不同的名单,将调用请求对应的服务来与之进行匹配。其中,本步骤中的匹配是指:将所述调用请求对应的服务与获取的名单所包括的服务信息进行相似度比对,若判断出所述调用请求对应的服务与名单所包括的某个服务信息相似度较高,则说明调用请求对应的服务与该名单中的服务信息相匹配。
可选地,本申请的另一实施例中,步骤s201中获取的名单包括黑名单,且所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法。
需要说明的是,服务对应的调用方法会包括多种,例如:http服务,其调用方法包括:usercontroller.save和usercontroller.edit等。但是,一种服务的多种调用方法,并不需要全部进行监控,因此,本实施例中,通过设置容器级名单和程序级名单,来分别对需要监控的服务和需要监控的服务的调用方法进行设定。
另外,如果仅需要对某种特地调用方法的服务进行监控,则也可以通过上述容器级名单和程序级名单进行设定。
本实施例中,步骤s202的一种实施方式,如图3所示,包括:
s301、确定出所述调用请求对应的服务的类型信息和调用的方法名。
请求方发送调用请求,该请求中可以携带有请求调用的服务的类型信息和调用的方法名,因此,可以直接从调用请求中读取服务的类型信息和调用的方法名。当然,若所述调用请求未包含服务的类型信息和调用的方法名,但该调用请求用于需要说明其调用的服务以及该服务的访问路径,因此,依据该调用请求确定出其调用的服务,再获取确定出的服务的类型信息。并且,服务的访问路径即服务调用的方法名,因此,也可以根据调用请求来确定出服务调用的方法名。
s302、将所述确定出的服务的类型信息与所述黑名单中的容器级名单进行匹配,且将所述确定出的服务调用的方法名与所述黑名单中程序级名单进行匹配。
其中,若所述确定出的服务的类型信息不属于所述黑名单中的容器级名单,且所述确定出的类型信息不属于所述黑名单中程序级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
本实施例中,黑名单是用于保存不需要进行监控的服务信息,因此,黑名单中的容器级名单保存的是不需要进行监控的服务的类型信息,程序级名单保存的是不需要进行监控的服务的调用方法。
因此,将确定出的服务的类型信息与黑名单中的容器级名单进行匹配,将确定出的服务调用方法与黑名单中的程序级名单进行匹配。且在上述两个匹配过程的结果是:所述确定出的服务的类型信息不属于所述黑名单中的容器级名单,且所述确定出的类型信息不属于所述黑名单中程序级名单,说明所述调用请求对应的服务不属于黑名单,则需要对其进行监控。
可选地,本申请的另一实施例中,步骤s201中获取的名单包括白名单,且所述白名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法。
本实施例中,步骤s202的另一种实施方式,如图4所示,包括:
s401、确定出所述调用请求对应的服务的类型信息和调用的方法名。
s402、将所述确定出的服务的类型信息与所述白名单中的容器级名单进行匹配,且将所述确定出的服务调用的方法名与所述白名单中程序级名单进行匹配。
其中,若所述确定出的服务的类型信息属于所述白名单中的容器级名单,且所述确定出的类型信息属于所述白名单中程序级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
本实施例中,利用白名单中的服务信息进行调用请求对应的服务是否需要监控的判断。具体的,将确定出的服务的类型信息与白名单中的容器级名单进行匹配,将确定出的服务调用方法与白名单中的程序级名单进行匹配。
在上述两个匹配过程的结果是:所述确定出的服务的类型信息属于所述白名单中的容器级名单,且所述确定出的类型信息属于所述白名单中程序级名单,说明所述调用请求对应的服务属于白名单,则需要对其进行监控。
可选地,本申请的另一实施例中,步骤s201中获取的名单包括黑名单和白名单,且所述白名单包括容器级名单和程序级名单,所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法。
本实施例中,步骤s202的另一种实施方式,如图5所示,包括:
s501、确定出所述调用请求对应的服务的类型信息和调用的方法名。
s502、将所述确定出的服务的类型信息,分别与所述白名单的容器级名单和所述黑名单的容器级名单进行匹配,且将所述确定出的服务调用的方法名,分别与所述白名单的程序级名单和所述黑名单的程序级名单进行匹配。
其中,若所述确定出的服务的类型信息属于所述白名单的容器级名单、且不属于所述黑名单的容器级名单,所述确定出的服务调用的方法名属于所述白名单的程序级名单,且不属于所述黑名单的容器级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
本实施例中,为了更为充分的确定调用请求对应的服务是否需要监控,需要将调用请求对应的服务的类型信息和调用的方法名分别于黑名单和白名单进行匹配。
例如:参见图6,白名单中,容器级名单中包括http服务和jdbc服务,程序级名单包括tpc服务的mysql.dumpbinlog方法名。黑名单中,容器级名单中包括http服务和jdbc服务,程序级名单包括http服务的usercontroller.save和usercontroller.edit。
利用本实例中的黑、白名单进行服务监控时,需要监控除了usercontroller.save和usercontroller.edit外的所有http服务和tpc服务的mysql.dumpbinlog,不监控所有方法名下的jdbc服务。
s203、若所述调用请求对应的服务与所述黑名单中的服务信息不匹配、和/或,所述调用请求对应的服务与所述白名单中的服务信息相匹配,则判断出所述调用请求对应的服务属于所述被监控的服务。
其中,黑名单中的服务信息均是无需监控,白名单中的服务信息均是需要监控。因此,在步骤s201中,获取到的名单为黑名单时,所述调用请求对应的服务与所述黑名单中的服务信息不匹配,判断出所述调用请求对应的服务属于所述被监控的服务;在步骤s201中,获取到的名单为白名单时,所述调用请求对应的服务与所述白名单中的服务信息相匹配,判断出所述调用请求对应的服务属于所述被监控的服务;在步骤s201中,获取到的名单包括白名单和黑名单时,所述调用请求对应的服务与所述白名单中的服务信息相匹配,且与所述黑名单中的服务信息不匹配,判断出所述调用请求对应的服务属于所述被监控的服务。
若判断出所述调用请求对应的服务属于所述被监控的服务,则执行步骤s103、在所述调用请求对应的服务被调用后,生成链路日志。
若步骤s102中,判断出所述调用请求对应的服务属于被监控的服务,则说明需要生成链路日志,因此,在该调用请求对应的服务被调用后,生成链路日志。其中,链路日志可包括:调用请求的事务id、调用请求的接收方标识、调用请求所调用的服务标识、调用时间、调用接口等。
还需要说明的是,若步骤s102中,判断出所述调用请求对应的服务不属于被监控的服务,则可退出本实施例的流程。
本申请另一实施例还公开了一种全链路日志的生成方法,如图7所示,包括步骤:
s701、接收调用请求,其中,所述调用请求用于调用服务。
s702、判断所述调用请求对应的服务是否属于被监控的服务。
若判断出所述调用请求对应的服务属于所述被监控的服务,则执行步骤s703、在所述调用请求对应的服务被调用后,生成链路日志。
s704、获取所述调用请求中的事务id以及服务调用链序号。
步骤s701中接收到的调用请求,其可能需要用于调用多个服务。因此,在一个节点接收到该调用请求,且生成链路日志后,还需要将调用请求向下一个节点传输。具体的,为了使标明该调用请求对应的链路为一条链路,因此,需要获取调用请求中的事务id以及服务调用链序号。
可选地,本申请的另一实施例中,在判断出获取不到所述调用请求中的事务id以及服务调用链序号的情况下,则说明该调用请求为整个链路的起始,因此,需要为整个链路创建唯一的事务id,并设置服务调用链序号为初始值。
s705、更新所述服务调用链序号。
其中,为了便于分辨链路的不同节点,服务调用链序号的初始值可设置为0。并且,更新服务调用链序号,则是在原有的服务调用链序号的基础上加一,其用于说明经过了一个节点。
s706、依据所述事务id和所述更新后的服务调用链序号生成调用请求,并向下一服务传输。
具体的,本步骤生成的调用请求作为待生成的调用请求,其生成方式的一种实施方式为:建立所述事务id、所述更新后的服务调用链序号和待生成的调用请求之间的关联关系,使得将所述待生成的调用请求发送至下一服务后,可以利用所述待生成的调用请求,在关联关系中获得所述事务id和所述更新后的服务调用链序号。另一种实施方式中,可以将所述id和所述更新后的服务调用链序号携带于所述待生成的调用请求中,这样,可以从待生成的调用请求中获取携带的事务id和更新后的服务调用链序号。
在下一服务接收到调用请求之后,则可以根据自身所在节点设定的黑白名单进行是否生成链路日志的判断。
还需要说明的是,本实施例中,步骤s701~s703的具体工作过程,可参见上述实施例内容,此处不再赘述。
本申请另一实施例还公开了一种全链路日志的生成装置,如图8所示,包括:
接收单元801,用于接收调用请求,其中,所述调用请求用于调用服务。
判断单元802,用于判断所述调用请求对应的服务是否属于被监控的服务。
生成单元803,用于所述判断单元若判断出所述调用请求对应的服务属于所述被监控的服务,则在所述调用请求对应的服务被调用后生成链路日志。
本申请实施例中的各个单元的具体工作过程可参见对应图1的实施例内容,此处不再赘述。
可选地,本申请的另一实施例中,判断单元802,包括:
第一获取单元,用于获取预设构建的名单,其中,所述名单包括黑名单和白名单的至少一个;其中,所述黑名单用于存储无需监控的服务信息,所述白名单用于存储需要监控的服务信息。
匹配单元,用于将所述调用请求对应的服务与所述名单中的服务信息进行匹配。
若所述调用请求对应的服务与所述黑名单中的服务信息不匹配,和/或,所述调用请求对应的服务与所述白名单中的服务信息相匹配,则判断出所述调用请求对应的服务属于所述被监控的服务。
本申请实施例中的各个单元的具体工作过程可参见对应图2的实施例内容,此处不再赘述。
可选地,本申请的另一实施例中,所述名单包括黑名单和白名单,且所述白名单包括容器级名单和程序级名单,所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;所述匹配单元,包括:
确定单元,用于确定出所述调用请求对应的服务的类型信息和调用的方法名。
匹配子单元,用于将所述确定出的服务的类型信息,分别与所述白名单的容器级名单和所述黑名单的容器级名单进行匹配,且将所述确定出的服务调用的方法名,分别与所述白名单的程序级名单和所述黑名单的程序级名单进行匹配。
其中,若所述确定出的服务的类型信息属于所述白名单的容器级名单、且不属于所述黑名单的容器级名单,所述确定出的服务调用的方法名属于所述白名单的程序级名单,且不属于所述黑名单的容器级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,本申请的另一实施例中,所述名单包括黑名单,且所述黑名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;所述匹配单元用于:
确定出所述调用请求对应的服务的类型信息和调用的方法名;
将所述确定出的服务的类型信息与所述黑名单中的容器级名单进行匹配,且将所述确定出的服务调用的方法名与所述黑名单中程序级名单进行匹配;
若所述确定出的服务的类型信息不属于所述黑名单中的容器级名单,且所述确定出的类型信息不属于所述黑名单中程序级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
可选地,本申请的另一实施例中,所述名单包括白名单,且所述白名单包括容器级名单和程序级名单;其中,所述容器级名单包括多种服务类型信息,所述程序级名单包括服务的调用方法;所述匹配单元用于:
确定出所述调用请求对应的服务的类型信息和调用的方法名;
将所述确定出的服务的类型信息与所述白名单中的容器级名单进行匹配,且将所述确定出的服务调用的方法名与所述白名单中程序级名单进行匹配;
其中,若所述确定出的服务的类型信息属于所述白名单中的容器级名单,且所述确定出的类型信息属于所述白名单中程序级名单,则判断出所述调用请求对应的服务属于所述被监控的服务。
本申请上述几个实施例公开的单元的具体工作过程,可参见对应的方法实施例内容,此处不再赘述。
本申请另一实施例还公开了一种电子设备,如图9所示,包括:存储器901和处理器902;其中,存储器901同于存储计算机指令;处理器902用于执行存储器901存储的计算机指令,具体执行上述中任意一项所述的全链路日志的生成方法。
本申请另一实施例还公开了一种存储介质,用于存储程序,所述程序被执行时,用于实现上述任意一项所述的全链路日志的生成方法。
在本申请上述实施例中,可以全部或者部分地通过软件、硬件或者其组合来实现。当使用软件实现时,可以全部或者部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或者多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或者部分地产生按照本申请实施例所述的流程或功能,所述计算机可以是通过计算机、专用计算机、计算机网络或者其他可编辑装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如:所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、双绞线、光纤)或者无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或者多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如:软盘、硬盘、磁带)、光介质(例如:光盘)、或者半导体介质(例如固态硬盘(ssd))等。
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。