本发明涉及计算机技术领域,具体涉及一种调用链路追踪方法及装置。
背景技术:
目前各种编程语言搭建的系统复杂度变得越来越高,程序中隐藏的bug在某时某刻就会影响正常系统服务的提供,因此对于提供服务的系统而言,如何快速定位程序中遇到的问题就成为了提高系统服务可用性的一项核心举措,为此一些语言已经开发出了针对本语言的调用链路追踪脚本,方便在系统异常时追踪发生问题的链路走向,溯源问题发生源头,避免了从海量日志中捞取所需内容造成的时间浪费,提升了处理问题的效率。
对于laravel框架开发的系统来说,服务异常时问题的处理速度是提高系统可用性的极为重要的一项能力,而现有的日志系统在错误发生时呈现的是错误发生处的点的信息,无法对本次调用的全貌进行及时展现,导致一个问题的平均定位时间达到30分钟到1小时,更差的甚至能到数小时,极大的影响了问题的解决时效。php语言的laravel框架目前并没有一套可套用的链路追踪服务提供链路问题定位功能,而java等服务均有对应的链路追踪组件可直接使用,因此开发一套laravel框架可用的链路追踪服务组件势在必行。
技术实现要素:
为解决现有技术中的问题,本发明实施例提供一种调用链路追踪方法及装置。
第一方面,本发明实施例提供一种调用链路追踪方法,该方法包括:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
进一步地,所述链路关键点包括路由请求,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听前端请求动作,初始化第一埋点器并将所述第一埋点器绑定到请求开始事件,初始化链路信息,所述链路信息包括第一链路id、第一服务id及第一节点id;获取所述请求开始事件中的所述第一埋点器的第一埋点信息,所述第一埋点信息包括第一请求参数及第一请求类型;监听请求完成事件,获取请求完成时的第一返回值,并将所述第一返回值添加到所述第一埋点信息;获取第一链路更新信息,并将所述第一链路更新信息添加到所述第一埋点信息;监听请求异常事件,获取所述请求异常事件内的第一异常信息,并将所述第一异常信息添加到所述第一埋点信息;当路由结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第一埋点信息。
进一步地,所述链路关键点包括rpc请求,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听rpc触发动作,初始化第二埋点器并绑定到rpc开始事件;获取链路的链路信息,所述链路信息包括第二链路id、第二服务id及第二节点id,基于所述链路信息进行链路信息更新;获取所述rpc开始事件内的http请求体,得到所述http请求体内的请求头的信息,在所述请求头的信息内注入所述链路信息;获取所述rpc开始事件中的所述第二埋点器的第二埋点信息,所述第二埋点信息包括第二请求参数及第二请求类型;监听rpc完成事件,获取http请求的第二返回值,并将所述第二返回值添加到所述第二埋点信息中;获取第二链路更新信息,并将所述第二链路更新信息添加到所述第二埋点信息中;监听rpc异常事件,获取发生异常的第二异常信息,并将所述第二异常信息添加到所述第二埋点信息中;当rpc结束点被采集完毕后,调用埋点器保存方法,保存所述第二埋点信息到当前链路内存。
进一步地,所述链路关键点包括数据库操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听sql事件,新建第三埋点器并绑定到所述sql事件;获取链路的链路信息,所述链路信息包括第三链路id、第三服务id及第三节点id,在所述链路信息的基础上进行链路信息更新;将第三埋点信息注入所述sql事件内,所述第三埋点信息包括sql事件的sql信息;获取第三链路更新信息,并将所述第三链路更新信息添加到所述第三埋点信息中;当sql结束时,调用埋点器保存方法,保存所述第三埋点信息到当前链路内存。
进一步地,所述链路关键点包括异步任务,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听异步事件触发动作;清理静态的链路信息,重置环境变量;初始化第四埋点器并绑定到异步事件开始事件;初始化链路信息,所述链路信息包括第四链路id、第四服务id及第四节点id;从事件信息中反序列化出事件内的参数,添加到所述第四埋点器的第四埋点信息中;监听异步事件完成动作,获取第四链路更新信息,并将所述第四链路更新信息添加到所述第四埋点信息中;监听异步事件异常动作,获取异步事件内的第四异常信息,并将所述第四异常信息添加到所述第四埋点信息中;当异步事件结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第四埋点信息。
进一步地,所述链路关键点包括脚本操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听脚本启动触发动作,初始化第五埋点器并绑定到脚本开始事件;初始化链路信息,所述链路信息包括第五链路id、第五服务id及第五节点id;监听脚本执行完成事件,获取第五链路更新信息,并将所述第五链路更新信息添加到所述第五埋点器的第五埋点信息中;当脚本结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第五埋点信息。
进一步地,所述链路关键点包括缓存操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听缓存事件;初始化第六埋点器并绑定到所述缓存事件;获取链路的链路信息,所述链路信息包括第六链路id、第六服务id及第六节点id,在所述链路信息的基础上进行链路信息更新;根据缓存类型获取所述缓存事件内的缓存关键数据,所述缓存关键数据包括缓存原始信息、执行操作信息及缓存参数;将所述缓存关键数据添加到所述第六埋点器的第六埋点信息中;当缓存结束时,调用埋点器保存方法,保存所述第六埋点信息到当前链路内存。
进一步地,所述方法还包括:将所述日志文件推送到提供链路分析的ketrace服务,以供所述ketrace服务分析所述全链路数据,获取所述请求的可视化调用链路。
进一步地,在所述执行所述调用埋点器保存方法之前,所述方法还包括:添加检索标签,所述检索标签包括已有日志系统的日志id或sql语句。
第二方面,本发明实施例提供一种调用链路追踪装置,该装置包括:关键信息记录模块,用于:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;全链路数据形成模块,用于:根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
进一步地,所述链路关键点包括路由请求,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息时,具体用于:监听前端请求动作,初始化第一埋点器并将所述第一埋点器绑定到请求开始事件,初始化链路信息,所述链路信息包括第一链路id、第一服务id及第一节点id;获取所述请求开始事件中的所述第一埋点器的第一埋点信息,所述第一埋点信息包括第一请求参数及第一请求类型;监听请求完成事件,获取请求完成时的第一返回值,并将所述第一返回值添加到所述第一埋点信息;获取第一链路更新信息,并将所述第一链路更新信息添加到所述第一埋点信息;监听请求异常事件,获取所述请求异常事件内的第一异常信息,并将所述第一异常信息添加到所述第一埋点信息;当路由结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第一埋点信息。
进一步地,所述链路关键点包括rpc请求,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息时,具体用于:监听rpc触发动作,初始化第二埋点器并绑定到rpc开始事件;获取链路的链路信息,所述链路信息包括第二链路id、第二服务id及第二节点id,基于所述链路信息进行链路信息更新;获取所述rpc开始事件内的http请求体,得到所述http请求体内的请求头的信息,在所述请求头的信息内注入所述链路信息;获取所述rpc开始事件中的所述第二埋点器的第二埋点信息,所述第二埋点信息包括第二请求参数及第二请求类型;监听rpc完成事件,获取http请求的第二返回值,并将所述第二返回值添加到所述第二埋点信息中;获取第二链路更新信息,并将所述第二链路更新信息添加到所述第二埋点信息中;监听rpc异常事件,获取发生异常的第二异常信息,并将所述第二异常信息添加到所述第二埋点信息中;当rpc结束点被采集完毕后,调用埋点器保存方法,保存所述第二埋点信息到当前链路内存。
进一步地,所述链路关键点包括数据库操作,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息时,具体用于:监听sql事件,新建第三埋点器并绑定到所述sql事件;获取链路的链路信息,所述链路信息包括第三链路id、第三服务id及第三节点id,在所述链路信息的基础上进行链路信息更新;将第三埋点信息注入所述sql事件内,所述第三埋点信息包括sql事件的sql信息;获取第三链路更新信息,并将所述第三链路更新信息添加到所述第三埋点信息中;当sql结束时,调用埋点器保存方法,保存所述第三埋点信息到当前链路内存。
进一步地,所述链路关键点包括异步任务,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息记录下来时,具体用于:监听异步事件触发动作;清理静态的链路信息,重置环境变量;初始化第四埋点器并绑定到异步事件开始事件;初始化链路信息,所述链路信息包括第四链路id、第四服务id及第四节点id;从事件信息中反序列化出事件内的参数,添加到所述第四埋点器的第四埋点信息中;监听异步事件完成动作,获取第四链路更新信息,并将所述第四链路更新信息添加到所述第四埋点信息中;监听异步事件异常动作,获取异步事件内的第四异常信息,并将所述第四异常信息添加到所述第四埋点信息中;当异步事件结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第四埋点信息。
进一步地,所述链路关键点包括脚本操作,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述各个链路关键点操作的预设关键信息时,具体用于:监听脚本启动触发动作,初始化第五埋点器并绑定到脚本开始事件;初始化链路信息,所述链路信息包括第五链路id、第五服务id及第五节点id;监听脚本执行完成事件,获取第五链路更新信息,并将所述第五链路更新信息添加到所述第五埋点器的第五埋点信息中;当脚本结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第五埋点信息。
进一步地,所述链路关键点包括缓存操作,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述各个链路关键点操作的预设关键信息时,具体用于:监听缓存事件;初始化第六埋点器并绑定到所述缓存事件;获取链路的链路信息,所述链路信息包括第六链路id、第六服务id及第六节点id,在所述链路信息的基础上进行链路信息更新;根据缓存类型获取所述缓存事件内的缓存关键数据,所述缓存关键数据包括缓存原始信息、执行操作信息及缓存参数;将所述缓存关键数据添加到所述第六埋点器的第六埋点信息中;当缓存结束时,调用埋点器保存方法,保存所述第六埋点信息到当前链路内存。
进一步地,所述装置还包括推送模块,所述推送模块用于:将所述日志文件推送到提供链路分析的ketrace服务,以供所述ketrace服务分析所述全链路数据,获取所述请求的可视化调用链路。
进一步地,关键信息记录模块10在用于执行所述调用埋点器保存方法之前,还用于:添加检索标签,所述检索标签包括已有日志系统的日志id或sql语句。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本发明实施例提供的调用链路追踪方法及装置,通过根据laravel框架中的链路关键点的调用顺序,将各个链路关键点操作的预设关键信息记录下来进行排序连接,形成laravel框架服务调用链的全链路数据,并存储于日志文件,可以生成展现调用链的全部信息的链路日志,而非孤立的错误信息,提升线上问题的解决时效。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的调用链路追踪方法流程图;
图2是本发明实施例提供的调用链路追踪方法中一串联链路的示意图;
图3是本发明实施例提供的调用链路追踪方法中另一串联链路的示意图;
图4是本发明实施例提供的调用链路追踪方法中再一串联链路的示意图;
图5是本发明一实施例提供的调用链路追踪方法中路由埋点采集流程图;
图6是本发明一实施例提供的调用链路追踪方法中rpc埋点采集流程图;
图7是本发明一实施例提供的调用链路追踪方法中sql埋点采集流程图;
图8是本发明一实施例提供的调用链路追踪方法中异步任务埋点采集流程图;
图9是本发明一实施例提供的调用链路追踪方法中脚本埋点采集流程图;
图10是本发明一实施例提供的调用链路追踪方法中缓存埋点采集流程图;
图11是本发明一实施例提供的调用链路追踪装置的结构示意图;
图12示例了一种电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明一实施例提供的调用链路追踪方法流程图。如图1所示,所述方法包括:
步骤101、根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;
步骤102、根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
图2是本发明实施例提供的调用链路追踪方法中一串联链路的示意图。图3是本发明实施例提供的调用链路追踪方法中另一串联链路的示意图。图4是本发明实施例提供的调用链路追踪方法中再一串联链路的示意图。如图2~4所示,trace代表整个请求,也就是整个链路;segment代表请求经过的一个进程或者线程,通常我们认为表示一个服务;span代表服务内的节点,比如mysql、rpc请求等;如果把整个trace看成一列火车,segment就是车厢,span就是车厢里的座位。其中,图2示出了串联链路的基本结构,图3示出了串联上下游数据的方式,即通过链路id,父服务id和父节点id进行不同服务之间节点的串联。图4示出了一种串联链路的体现样式。
要实现laravel框架的调用链路追踪,首先需要抽象出laravel框架中可以被定义出来的链路关键点,然后,根据各类点特征,建立定位其执行过程的监控,将操作的关键信息记录下来。将记录的点信息根据发生调用的顺序进行排序连接,形成laravel框架一次服务调用链的全链路数据,并存储于日志文件。所述全链路数据除了包含采集到的参数信息外,还包括表示调用关系的串联链路的链路信息。
本发明实施例通过根据laravel框架中的链路关键点的调用顺序,将各个链路关键点操作的预设关键信息记录下来进行排序连接,形成laravel框架服务调用链的全链路数据,并存储于日志文件,可以生成展现调用链的全部信息的链路日志,而非孤立的错误信息,提升线上问题的解决时效。
进一步地,基于上述实施例,所述链路关键点包括路由请求,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听前端请求动作,初始化第一埋点器并将所述第一埋点器绑定到请求开始事件,初始化链路信息,所述链路信息包括第一链路id、第一服务id及第一节点id;获取所述请求开始事件中的所述第一埋点器的第一埋点信息,所述第一埋点信息包括第一请求参数及第一请求类型;监听请求完成事件,获取请求完成时的第一返回值,并将所述第一返回值添加到所述第一埋点信息;获取第一链路更新信息,并将所述第一链路更新信息添加到所述第一埋点信息;监听请求异常事件,获取所述请求异常事件内的第一异常信息,并将所述第一异常信息添加到所述第一埋点信息;当路由结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第一埋点信息。
利用链路串联的机制,需要抽象出laravel框架需要埋点的位置完成埋点工作。其中,埋点的位置包括路由埋点。即所述链路关键点包括路由请求。
路由埋点介绍:路由埋点即控制器请求埋点,从控制器收到请求到返回调用方结果为一个埋点过程。
埋点原因:目前的日志监控无法得到路由请求的实际参数,而请求的参数对于链路的走向有重要作用。
埋点原理:在基类控制器做文章,找到基类控制器的执行函数,在执行前、执行后、执行异常位置埋点。
路由属于链路最外层的一环,因此当路由结束点被采集完毕后要存储全部已保存信息,即全链路信息。并且路由请求的链路信息需要初始化,即从0开始一个调用链路的构建。路由埋点即指建立定位路由请求执行过程的监控,将路由请求操作的预设关键信息记录的过程,具体包括:
请求开始:监听前端请求动作,初始化一个第一埋点器绑定到埋点事件,初始化traceid(第一链路id)、segmentid(第一服务id)、spanid(第一节点id)。
请求完成:获取请求开始事件中的第一埋点器,获取请求开始事件的第一埋点信息,包括第一请求参数、第一请求类型等,调用埋点器保存方法,保存链路中的全部信息到磁盘(即日志文件)。
请求异常:获取请求开始事件中的第一埋点器;获取请求开始事件的第一埋点信息,包括第一请求参数、第一请求类型等;得到异常事件内的第一异常信息,注入到点的参数内;调用埋点器保存方法,保存链路全部信息到磁盘。
在上述实施例的基础上,本发明实施例通过给出路由请求的埋点过程,实现了laravel框架路由请求所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括rpc请求,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听rpc触发动作,初始化第二埋点器并绑定到rpc开始事件;获取链路的链路信息,所述链路信息包括第二链路id、第二服务id及第二节点id,基于所述链路信息进行链路信息更新;获取所述rpc开始事件内的http请求体,得到所述http请求体内的请求头的信息,在所述请求头的信息内注入所述链路信息;获取所述rpc开始事件中的所述第二埋点器的第二埋点信息,所述第二埋点信息包括第二请求参数及第二请求类型;监听rpc完成事件,获取http请求的第二返回值,并将所述第二返回值添加到所述第二埋点信息中;获取第二链路更新信息,并将所述第二链路更新信息添加到所述第二埋点信息中;监听rpc异常事件,获取发生异常的第二异常信息,并将所述第二异常信息添加到所述第二埋点信息中;当rpc结束点被采集完毕后,调用埋点器保存方法,保存所述第二埋点信息到当前链路内存。
利用链路串联的机制,需要抽象出laravel框架需要埋点的位置完成埋点工作。其中,埋点的位置包括rpc埋点。即所述链路关键点包括rpc请求。
rpc埋点介绍:rpc埋点处理本服务开始调用外部服务的过程,其埋点过程包含rpc从本服务发起到本服务收到rpc调用方的正常或者异常返回为止。
埋点原因:rpc请求异常时一般为外部服务不稳定导致,此时需要用rpc请求串联到对应的外部服务追查异常原因。
埋点原理:网络组件发起调用处埋开始、结束处埋完成、异常时处埋异常。
rpc属于链路内具体的点,因此当rpc结束点被采集完毕后把rpc数据存储到当前链路内存,不写入磁盘。并且rpc请求需要基于前一处理过程进行,因此需要获取当前的链路信息(包括第二链路id、第二服务id及第二节点id),并根据rpc中包含的节点进行链路信息的更新。rpc埋点即指建立定位rpc请求执行过程的监控,将rpc请求操作的预设关键信息记录的过程,具体包括:
rpc开始:监听rpc触发动作;初始化一个第二埋点器绑定到埋点事件;获取链路第二链路id、第二服务id、第三节点id;当前点的spanid=spanid 1,以示为新增一个点,spanid表示节点id;获取rpc开始事件内的http请求体,得到请求体内的header信息;在header信息内注入trace信息,用于向下游传递上游trace节点。
rpc完成:获取rpc开始事件中的第二埋点器;获取rpc开始事件的第二埋点信息,包括第二请求参数、第二请求类型等;获取http请求的第二返回值;将第二返回值信息注入当前点;执行保存动作,保存rpc点到内存。
rpc异常:获取rpc开始事件中的第二埋点器;获取rpc开始事件的第二埋点信息,包括第二请求参数、第二请求类型等,获取发生异常的第二异常信息;调用埋点器保存方法;执行保存动作,保存rpc点到内存。
在上述实施例的基础上,本发明实施例通过给出rpc请求的埋点过程,实现了laravel框架rpc请求所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括数据库操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听sql事件,新建第三埋点器并绑定到所述sql事件;获取链路的链路信息,所述链路信息包括第三链路id、第三服务id及第三节点id,在所述链路信息的基础上进行链路信息更新;将第三埋点信息注入所述sql事件内,所述第三埋点信息包括sql事件的sql信息;获取第三链路更新信息,并将所述第三链路更新信息添加到所述第三埋点信息中;当sql结束时,调用埋点器保存方法,保存所述第三埋点信息到当前链路内存。
利用链路串联的机制,需要抽象出laravel框架需要埋点的位置完成埋点工作。其中,埋点的位置包括sql埋点。即所述链路关键点包括数据库操作。
sql埋点介绍:sql埋点记录sql发生的场景相关信息。
埋点原因:sql埋点用于串联整体的链路场景,作为分析的一个节点。
埋点原理:sql埋点直接采用laravel框架执行sql后生成的queryexecuted事件,将事件与处理绑定即可在sql执行完毕后获取执行内容。
sql属于链路内具体的点,因此当sql结束点被采集完毕后把sql数据存储到当前链路内存,不写入磁盘。并且数据库操作需要基于前一处理过程进行,因此需要获取当前的链路信息(包括第三链路id、第三服务id及第三节点id),并根据rpc中包含的节点进行链路信息的更新。sql埋点即指建立定位数据库操作执行过程的监控,将数据库操作的预设关键信息记录的过程,具体包括:
sql完成:新建一个第三埋点器;获取sql事件内的sql原始信息、执行时间、参数等关键数据;将第三埋点信息注入sql事件内;执行保存动作,保存sql点到内存。
在上述实施例的基础上,本发明实施例通过给出数据库操作的埋点过程,实现了laravel框架数据库操作所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括异步任务,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听异步事件触发动作;清理静态的链路信息,重置环境变量;初始化第四埋点器并绑定到异步事件开始事件;初始化链路信息,所述链路信息包括第四链路id、第四服务id及第四节点id;从事件信息中反序列化出事件内的参数,添加到所述第四埋点器的第四埋点信息中;监听异步事件完成动作,获取第四链路更新信息,并将所述第四链路更新信息添加到所述第四埋点信息中;监听异步事件异常动作,获取异步事件内的第四异常信息,并将所述第四异常信息添加到所述第四埋点信息中;当异步事件结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第四埋点信息。
利用链路串联的机制,需要抽象出laravel框架需要埋点的位置完成埋点工作。其中,埋点的位置包括异步任务埋点。即所述链路关键点包括异步任务。
异步任务埋点介绍:异步任务埋点包括异步事件埋点以及异步job埋点,记录从同步发起的并发过程。
埋点原因:异步任务在服务调用过程中属于调用的中间部分,因此将异步事件与发起异步的同步操作进行关联能将整体的调用链串联起来。
埋点原理:laravel框架为异步任务执行提供了三个自带事件,jobprocessing、jobprocessed、jobfailed,事件内携带了异步任务用于记录的全部信息,在脚本机监听这些事件可完成埋点。
异步事件属于链路最外层的一环,因此当异步事件结束点被采集完毕后要存储全部已保存信息。并且路由请求的链路信息需要初始化,即从0开始一个调用链路的构建。异步任务埋点即指建立定位异步任务执行过程的监控,将异步任务的预设关键信息记录的过程,具体包括:
异步事件开始:监听异步事件触发动作;清理静态的trace信息,保证环境被初始化,防止读到脏数据;初始化一个第四埋点器绑定到埋点事件;初始化第四链路id、第四服务id、第四节点id;初始化机器ip,根据事件类型属于job还是event-listener从事件信息中反序列化出事件内的参数,初始化trace点。
异步事件完成:监听异步事件完成动作;反序列化获取异步事件开始事件的第四埋点信息;将第四链路更新信息注入当前点;执行保存动作,保存链路全部信息到磁盘。
异步事件异常:监听异步事件异常动作;反序列化获取异步事件开始事件的第四埋点信息和异步事件内的参数以及第四异常信息;给埋点器设置参数信息;执行保存动作,保存链路全部信息到磁盘;清除设置的机器ip。
反序列化主要是实现任务关联,将异步任务和同步操作关联起来。
在上述实施例的基础上,本发明实施例通过给出异步任务的埋点过程,实现了laravel框架异步任务所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括脚本操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听脚本启动触发动作,初始化第五埋点器并绑定到脚本开始事件;初始化链路信息,所述链路信息包括第五链路id、第五服务id及第五节点id;监听脚本执行完成事件,获取第五链路更新信息,并将所述第五链路更新信息添加到所述第五埋点器的第五埋点信息中;当脚本结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第五埋点信息。
利用链路串联的机制,需要抽象出laravel框架需要埋点的位置完成埋点工作。其中,埋点的位置包括脚本埋点。即所述链路关键点包括脚本操作。
脚本埋点介绍:一次性脚本或者定时任务是除了web请求外的另一个服务入口。
埋点原因:一次性脚本执行过程会存在发起异步事件的过程,此过程也属于串联链路的关键一环,因此也需要进行埋点。
埋点原理:类似异步任务,laravel框架为脚本执行同样自带了两个事件commandstarting和commandfinished,事件内携带了用于记录脚本所需的基本数据、操作类型、参数等信息,监听这些事件即可完成埋点。
脚本属于链路最外层的一环,因此当脚本结束点被采集完毕后要存储全部已保存信息。并且脚本操作的链路信息需要初始化,即从0开始一个调用链路的构建。脚本埋点即指建立定位脚本操作执行过程的监控,将脚本操作的预设关键信息记录的过程,具体包括:
脚本开始:监听脚本启动触发动作;初始化一个第五埋点器绑定到埋点事件;初始化第五链路id、第五服务id、第五节点id。
脚本完成:获取脚本开始事件中的第五埋点器;将第五链路更新信息注入当前点;执行保存动作,保存脚本点到磁盘。
在脚本异常时,目前由于框架会直接中止脚本,故无需记录。
在上述实施例的基础上,本发明实施例通过给出脚本操作的埋点过程,实现了laravel框架脚本操作所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括缓存操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:监听缓存事件;初始化第六埋点器并绑定到所述缓存事件;获取链路的链路信息,所述链路信息包括第六链路id、第六服务id及第六节点id,在所述链路信息的基础上进行链路信息更新;根据缓存类型获取所述缓存事件内的缓存关键数据,所述缓存关键数据包括缓存原始信息、执行操作信息及缓存参数;将所述缓存关键数据添加到所述第六埋点器的第六埋点信息中;当缓存结束时,调用埋点器保存方法,保存所述第六埋点信息到当前链路内存。
利用链路串联的机制,需要抽象出laravel框架需要埋点的位置完成埋点工作。其中,埋点的位置包括缓存埋点。即所述链路关键点包括缓存操作。
缓存埋点介绍:缓存埋点可处理缓存新增、遗忘、命中、未命中的过程。
埋点原因:缓存问题在上线前后触发的几率会变大,尤其是新旧缓存格式不一致,因此可通过记录缓存增改的埋点来记录这个变化用于分析。
缓存属于链路内具体的点,因此当缓存结束时埋点数据存储到当前链路内存。并且缓存操作需要基于前一处理过程进行,因此需要获取当前的链路信息(包括第六链路id、第六服务id、第六节点id),并根据缓存操作中包含的节点进行链路信息的更新。缓存埋点即指建立定位缓存操作执行过程的监控,将缓存操作的预设关键信息记录的过程,具体包括:
缓存完成:新建一个第六埋点器;根据缓存类型(新增、遗忘、命中、未命中)获取缓存事件内的缓存原始信息、执行操作、参数等关键数据;将第六埋点信息注入缓存事件内;执行保存动作,保存缓存点到内存。
在上述实施例的基础上,本发明实施例通过给出缓存操作的埋点过程,实现了laravel框架缓存操作所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述方法还包括:将所述日志文件推送到提供链路分析的ketrace服务,以供所述ketrace服务分析所述全链路数据,获取所述请求的可视化调用链路。
得到包含服务调用链的全链路数据的日志文件后,将日志文件推送到提供链路分析的ketrace服务,分析日志,展现出请求的可视化调用链路。
在上述实施例的基础上,本发明实施例通过将日志文件推送到提供链路分析的ketrace服务,以供ketrace服务分析全链路数据,展现出请求的可视化调用链路,提高了链路调用的可视化效果。
进一步地,基于上述实施例,在所述执行所述调用埋点器保存方法之前,所述方法还包括:添加检索标签,所述检索标签包括已有日志系统的日志id或sql语句。
在执行调用埋点器保存方法之前,所述方法还包括为各个链路关键点的埋点信息添加检索标签。比如,可以设置检索标签为已有日志系统的日志id,已有日志系统日志和存储全链路信息的日志文件不同,是分别记录的。从而可以在查看全链路数据时根据已有日志系统的日志id查询已有日志系统的相关记录。
另外,对于sql操作,还可以设置检索标签为相关的sql语句,从而在获取全链路数据时便于发现sql语句的问题。
在上述实施例的基础上,本发明实施例通过在执行调用埋点器保存方法之前,为各个链路关键点的埋点信息添加检索标签,有助于问题定位分析。
进一步地,基于上述实施例,所述方法还包括:设置埋点类型,并添加到所述第一埋点信息、所述第二埋点信息、所述第三埋点信息、所述第四埋点信息、所述第五埋点信息或所述第六埋点信息中。
对于各个所述链路关键点,还可以在相应埋点信息中设置埋点类型,如对于请求异常设置埋点类型为error。
在上述实施例的基础上,本发明实施例通过设置埋点类型,有助于埋点信息分析。
对于上述各种链路关键点,调用链路追踪的主要流程如下:
1.对于单个点进行事件埋点。
2.监听器处理事件埋点,提取埋点内的点信息。
3.请求完成,保存已有的整条链路的全部点的信息。
4.将链路日志推送到ketrace服务方。
5.ketrace服务分析形成的链路信息得到可视化视图。
本发明实施例提供的调用链路追踪方法中,建立定位各个所述链路关键点执行过程的监控,将所述各个链路关键点操作的预设关键信息记录下来的过程实际主要是对各个链路关键点进行埋点采集的过程。采集过程如可以分为日志落磁盘和磁盘日志推送ketrace的过程。下面再通过具体实施例对各个链路关键点进行埋点采集的过程进行介绍(描述中不包括磁盘日志推送ketrace的过程)。
图5是本发明一实施例提供的调用链路追踪方法中路由埋点采集流程图。如图5所示:
在callprepare阶段:监听callprepare事件;新建一个埋点;执行启动埋点方法,初始化spanid和starttime(开始时间);将埋点设置到callprepare事件。
在callcomplete阶段:监听callcomplete事件;获取事件中的callprepare内容(埋点、请求信息);获取callcomplete中的返回值;获取埋点类;设置出入参(路由请求执行完成有返回值,所以需要设置出参)、打标签(自定义数据展示用),执行结束方法;执行埋点保存,追加到埋点数据spandata[]内。
在callexception阶段:监听callexception事件,获取事件中的callprepare内容(埋点、请求信息);获取callexception中的异常信息;获取埋点类;设置入参、打标签(自定义数据展示用),记录异常信息,执行结束方法;执行埋点保存,追加到埋点数据spandata[]内。
图6是本发明一实施例提供的调用链路追踪方法中rpc埋点采集流程图。如图6所示:
在rpcprepare阶段:监听rpcprepare事件;新建一个埋点;执行启动埋点方法,初始化spanid和starttime;将埋点设置到rpcprepare事件;修改apiconfig(请求的类)的curl头(请求头)的http_header(请求参数),添加trace头traceid、segmentid和spanid。
在rpccomplete阶段:监听rpccomplete事件;获取事件中的rpcprepare内容(埋点、请求数据);获取rpccomplete中的返回值;获取埋点类;设置出入参(rpc请求完成有返回值,所以需要设置出参)、打标签(自定义数据展示用),执行结束方法;执行埋点保存、追加到埋点数据spandata[]内。
在rpcexception阶段:监听rpcexception事件;获取事件中的rpcprepare内容(埋点、请求数据);获取rpcexception中的异常信息;获取埋点类;设置入参、打标签(自定义数据展示用),记录异常信息,执行结束方法;执行埋点保存、追加到埋点数据spandata[]内。
图7是本发明一实施例提供的调用链路追踪方法中sql埋点采集流程图。如图7所示:
在queryexecuted阶段:监听queryexecuted事件;获取事件中的sql信息(语句、参数、连接信息、执行时间);新建一个埋点,sql操作执行开始、执行完成;用完成时间减去执行时间重新设置开始时间;设置入参为sql参数,设置机器信息,把sql语句设置为标签选项用来查看;设置埋点类型为db/mysql;执行埋点保存$logger->record()方法将信息推入内存。
图8是本发明一实施例提供的调用链路追踪方法中异步任务埋点采集流程图。如图8所示:
在jobprocessing阶段:监听jobprocessing事件,重置环境变量traceid、segid、spanid、parentsegid、parentspanid;从事件中反序列化出traceid、segid、spanid执行的类;用反序列化的数据初始化链路静态变量traceid、segid、spanid;从env中读取脚本机ip,绑定到全局变量$server['server_addr'];新建一个埋点,绑定到$global['joblogger']。有的节点可以由系统自动带出机器ip,异步任务需要利用env读取。
在jobprocessed阶段:监听jobprocessed事件;从事件中反序列化出traceid、segid、spanid执行的类以及事件参数;获取$global['joblogger']中的埋点;执行埋点结束end方法,设置入参(异步任务无返回值,不需设置出参)、埋点类型;执行埋点保存record方法,追加数据到spandata[]内;添加logid(日志id)作为检索标签,然后执行saveall方法,将埋点内容全部写入磁盘。
在jobfailed阶段:监听jobfailed事件;从事件中反序列化出traceid、segid、spanid执行的类以及事件参数和异常信息;获取$global['joblogger']中的埋点;执行埋点结束end方法,设置入参、埋点类型、异常日志;执行埋点保存record方法,追加数据到spandata[]内;添加logid(日志id)作为检索标签,然后执行saveall方法,将埋点内容全部写入磁盘。
图9是本发明一实施例提供的调用链路追踪方法中脚本埋点采集流程图。如图9所示:
在commandstarting阶段:监听commandstarting事件;重置环境变量traceid、segid、spanid、parentsegid、parentspanid;从env中读取脚本机ip,绑定到全局变量$server['server_addr'];新建一个埋点;执行埋点开始start()方法;绑定埋点到$global['commandlogger']。
在commandfinished阶段:监听commandfinished事件;获取事件中的command信息(入参,脚本完成无返回值,无需设置出参);获取$global['commandlogger']中的埋点;执行埋点结束end方法;设置入参为command的参数,设置埋点类型为command;执行$logger->record()方法将数据保存到内存;给链路数据添加用于检索的logid,然后执行saveall方法将所有数据写入日志文件。
图10是本发明一实施例提供的调用链路追踪方法中缓存埋点采集流程图。如图10所示:
在cachehit阶段(命中):监听cachehit事件;获取key(字段名)、val(具体值),commandname=get;创建一个埋点,执行开始start方法;执行结束方法,方法名设置为commandname,设置入参为key、val,设置埋点类型为redis/cache;执行埋点保存record方法,追加数据到spandata[]内。
在cachemissed阶段(未命中):监听cachemissed事件;获取key,commandname=get;创建一个埋点,执行开始start方法;执行结束方法,方法名设置为commandname,设置入参为key、val,设置埋点类型为redis/cache;执行埋点保存record方法,追加数据到spandata[]内。
在keywritten阶段(新增):监听keywritten事件;获取key、val,commandname=put;创建一个埋点,执行开始start方法;执行结束方法,方法名设置为commandname,设置入参为key、val,设置埋点类型为redis/cache;执行埋点保存record方法,追加数据到spandata[]内。
在keyforgotten阶段(遗忘):监听keyforgotten,获取key,commandname=forget;创建一个埋点,执行开始start方法;执行结束方法,方法名设置为commandname,设置入参为key、val,设置埋点类型为redis/cache;执行埋点保存record方法,追加数据到spandata[]内。
利用本发明实施例提供的调用链路追踪方法实现一套能对laravel框架调用链进行全链路追踪的组件,生成展现调用链的全部信息的链路日志,而非孤立的错误信息,提升线上问题的解决时效。新系统接入组件的时间控制在2h以内,接入成本低。利用接入组件定位一个线上问题的调用链时间控制在30分钟以内,定位问题能力显著提升。
图11是本发明一实施例提供的调用链路追踪装置的结构示意图。如图11所示,所述装置包括关键信息记录模块10和全链路数据形成模块20,其中:关键信息记录模块10用于:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;全链路数据形成模块20用于:根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
本发明实施例通过根据laravel框架中的链路关键点的调用顺序,将各个链路关键点操作的预设关键信息记录下来进行排序连接,形成laravel框架服务调用链的全链路数据,并存储于日志文件,可以生成展现调用链的全部信息的链路日志,而非孤立的错误信息,提升线上问题的解决时效。
进一步地,基于上述实施例,所述链路关键点包括路由请求,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息时,具体用于:监听前端请求动作,初始化第一埋点器并将所述第一埋点器绑定到请求开始事件,初始化链路信息,所述链路信息包括第一链路id、第一服务id及第一节点id;获取所述请求开始事件中的所述第一埋点器的第一埋点信息,所述第一埋点信息包括第一请求参数及第一请求类型;监听请求完成事件,获取请求完成时的第一返回值,并将所述第一返回值添加到所述第一埋点信息;获取第一链路更新信息,并将所述第一链路更新信息添加到所述第一埋点信息;监听请求异常事件,获取所述请求异常事件内的第一异常信息,并将所述第一异常信息添加到所述第一埋点信息;当路由结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第一埋点信息。
在上述实施例的基础上,本发明实施例通过给出路由请求的埋点过程,实现了laravel框架路由请求所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括rpc请求,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息时,具体用于:监听rpc触发动作,初始化第二埋点器并绑定到rpc开始事件;获取链路的链路信息,所述链路信息包括第二链路id、第二服务id及第二节点id,基于所述链路信息进行链路信息更新;获取所述rpc开始事件内的http请求体,得到所述http请求体内的请求头的信息,在所述请求头的信息内注入所述链路信息;获取所述rpc开始事件中的所述第二埋点器的第二埋点信息,所述第二埋点信息包括第二请求参数及第二请求类型;监听rpc完成事件,获取http请求的第二返回值,并将所述第二返回值添加到所述第二埋点信息中;获取第二链路更新信息,并将所述第二链路更新信息添加到所述第二埋点信息中;监听rpc异常事件,获取发生异常的第二异常信息,并将所述第二异常信息添加到所述第二埋点信息中;当rpc结束点被采集完毕后,调用埋点器保存方法,保存所述第二埋点信息到当前链路内存。
在上述实施例的基础上,本发明实施例通过给出rpc请求的埋点过程,实现了laravel框架rpc请求所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括数据库操作,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息时,具体用于:监听sql事件,新建第三埋点器并绑定到所述sql事件;获取链路的链路信息,所述链路信息包括第三链路id、第三服务id及第三节点id,在所述链路信息的基础上进行链路信息更新;将第三埋点信息注入所述sql事件内,所述第三埋点信息包括sql事件的sql信息;获取第三链路更新信息,并将所述第三链路更新信息添加到所述第三埋点信息中;当sql结束时,调用埋点器保存方法,保存所述第三埋点信息到当前链路内存。
在上述实施例的基础上,本发明实施例通过给出数据库操作的埋点过程,实现了laravel框架数据库操作所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括异步任务,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息记录下来时,具体用于:监听异步事件触发动作;清理静态的链路信息,重置环境变量;初始化第四埋点器并绑定到异步事件开始事件;初始化链路信息,所述链路信息包括第四链路id、第四服务id及第四节点id;从事件信息中反序列化出事件内的参数,添加到所述第四埋点器的第四埋点信息中;监听异步事件完成动作,获取第四链路更新信息,并将所述第四链路更新信息添加到所述第四埋点信息中;监听异步事件异常动作,获取异步事件内的第四异常信息,并将所述第四异常信息添加到所述第四埋点信息中;当异步事件结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第四埋点信息。
在上述实施例的基础上,本发明实施例通过给出异步任务的埋点过程,实现了laravel框架异步任务所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括脚本操作,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述各个链路关键点操作的预设关键信息时,具体用于:监听脚本启动触发动作,初始化第五埋点器并绑定到脚本开始事件;初始化链路信息,所述链路信息包括第五链路id、第五服务id及第五节点id;监听脚本执行完成事件,获取第五链路更新信息,并将所述第五链路更新信息添加到所述第五埋点器的第五埋点信息中;当脚本结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第五埋点信息。
在上述实施例的基础上,本发明实施例通过给出脚本操作的埋点过程,实现了laravel框架脚本操作所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述链路关键点包括缓存操作,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,记录各个所述各个链路关键点操作的预设关键信息时,具体用于:监听缓存事件;初始化第六埋点器并绑定到所述缓存事件;获取链路的链路信息,所述链路信息包括第六链路id、第六服务id及第六节点id,在所述链路信息的基础上进行链路信息更新;根据缓存类型获取所述缓存事件内的缓存关键数据,所述缓存关键数据包括缓存原始信息、执行操作信息及缓存参数;将所述缓存关键数据添加到所述第六埋点器的第六埋点信息中;当缓存结束时,调用埋点器保存方法,保存所述第六埋点信息到当前链路内存。
在上述实施例的基础上,本发明实施例通过给出缓存操作的埋点过程,实现了laravel框架缓存操作所涉及的预设关键信息的记录。
进一步地,基于上述实施例,所述装置还包括推送模块,所述推送模块用于:将所述日志文件推送到提供链路分析的ketrace服务,以供所述ketrace服务分析所述全链路数据,获取所述请求的可视化调用链路。
在上述实施例的基础上,本发明实施例通过将日志文件推送到提供链路分析的ketrace服务,以供ketrace服务分析全链路数据,展现出请求的可视化调用链路,提高了链路调用的可视化效果。
进一步地,基于上述实施例,关键信息记录模块10在用于执行所述调用埋点器保存方法之前,还用于:添加检索标签,所述检索标签包括已有日志系统的日志id或sql语句。
在上述实施例的基础上,本发明实施例通过在执行调用埋点器保存方法之前,为各个链路关键点的埋点信息添加检索标签,有助于问题定位分析。
进一步地,基于上述实施例,关键信息记录模块10在用于建立定位各个所述链路关键点执行过程的监控,将所述各个链路关键点操作的预设关键信息记录下来时,还用于:设置埋点类型,并添加到所述第一埋点信息、所述第二埋点信息、所述第三埋点信息、所述第四埋点信息、所述第五埋点信息或所述第六埋点信息中。
在上述实施例的基础上,本发明实施例通过设置埋点类型,有助于埋点信息分析。
本发明实施例提供的装置是用于上述方法的,具体功能可参照上述方法流程,此处不再赘述。
图12示例了一种电子设备的实体结构示意图,如图12所示,该电子设备可以包括:处理器(processor)1210、通信接口(communicationsinterface)1220、存储器(memory)1230和通信总线1240,其中,处理器1210,通信接口1220,存储器1230通过通信总线1240完成相互间的通信。处理器1210可以调用存储器1230中的逻辑指令,以执行调用链路追踪方法,该方法包括:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
此外,上述的存储器1230中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的调用链路追踪方法,该方法包括:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的调用链路追踪方法,该方法包括:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
需要说明的是,本发明各个实施例中埋点器、埋点信息、异常信息、链路更新信息、请求参数、请求类型、链路id、服务id及节点id前面的序号是用于区分不同链路的相应信息,在参数概念上并无区别。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务端,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种调用链路追踪方法,其特征在于,包括:
根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;
根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
2.根据权利要求1所述的调用链路追踪方法,其特征在于,所述链路关键点包括路由请求,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:
监听前端请求动作,初始化第一埋点器并将所述第一埋点器绑定到请求开始事件,初始化链路信息,所述链路信息包括第一链路id、第一服务id及第一节点id;获取所述请求开始事件中的所述第一埋点器的第一埋点信息,所述第一埋点信息包括第一请求参数及第一请求类型;
监听请求完成事件,获取请求完成时的第一返回值,并将所述第一返回值添加到所述第一埋点信息;获取第一链路更新信息,并将所述第一链路更新信息添加到所述第一埋点信息;
监听请求异常事件,获取所述请求异常事件内的第一异常信息,并将所述第一异常信息添加到所述第一埋点信息;
当路由结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第一埋点信息。
3.根据权利要求1所述的调用链路追踪方法,其特征在于,所述链路关键点包括rpc请求,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:
监听rpc触发动作,初始化第二埋点器并绑定到rpc开始事件;
获取链路的链路信息,所述链路信息包括第二链路id、第二服务id及第二节点id,基于所述链路信息进行链路信息更新;获取所述rpc开始事件内的http请求体,得到所述http请求体内的请求头的信息,在所述请求头的信息内注入所述链路信息;
获取所述rpc开始事件中的所述第二埋点器的第二埋点信息,所述第二埋点信息包括第二请求参数及第二请求类型;
监听rpc完成事件,获取http请求的第二返回值,并将所述第二返回值添加到所述第二埋点信息中;获取第二链路更新信息,并将所述第二链路更新信息添加到所述第二埋点信息中;
监听rpc异常事件,获取发生异常的第二异常信息,并将所述第二异常信息添加到所述第二埋点信息中;
当rpc结束点被采集完毕后,调用埋点器保存方法,保存所述第二埋点信息到当前链路内存。
4.根据权利要求1所述的调用链路追踪方法,其特征在于,所述链路关键点包括数据库操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:
监听sql事件,新建第三埋点器并绑定到所述sql事件;获取链路的链路信息,所述链路信息包括第三链路id、第三服务id及第三节点id,在所述链路信息的基础上进行链路信息更新;将第三埋点信息注入所述sql事件内,所述第三埋点信息包括sql事件的sql信息;获取第三链路更新信息,并将所述第三链路更新信息添加到所述第三埋点信息中;当sql结束时,调用埋点器保存方法,保存所述第三埋点信息到当前链路内存。
5.根据权利要求1所述的调用链路追踪方法,其特征在于,所述链路关键点包括异步任务,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:
监听异步事件触发动作;清理静态的链路信息,重置环境变量;初始化第四埋点器并绑定到异步事件开始事件;初始化链路信息,所述链路信息包括第四链路id、第四服务id及第四节点id;从事件信息中反序列化出事件内的参数,添加到所述第四埋点器的第四埋点信息中;
监听异步事件完成动作,获取第四链路更新信息,并将所述第四链路更新信息添加到所述第四埋点信息中;
监听异步事件异常动作,获取异步事件内的第四异常信息,并将所述第四异常信息添加到所述第四埋点信息中;
当异步事件结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第四埋点信息。
6.根据权利要求1所述的调用链路追踪方法,其特征在于,所述链路关键点包括脚本操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:
监听脚本启动触发动作,初始化第五埋点器并绑定到脚本开始事件;初始化链路信息,所述链路信息包括第五链路id、第五服务id及第五节点id;
监听脚本执行完成事件,获取第五链路更新信息,并将所述第五链路更新信息添加到所述第五埋点器的第五埋点信息中;当脚本结束点被采集完毕后,调用埋点器保存方法,保存所述全链路数据到所述日志文件,所述全链路数据包括所述第五埋点信息。
7.根据权利要求1所述的调用链路追踪方法,其特征在于,所述链路关键点包括缓存操作,所述建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息,包括:
监听缓存事件;初始化第六埋点器并绑定到所述缓存事件;获取链路的链路信息,所述链路信息包括第六链路id、第六服务id及第六节点id,在所述链路信息的基础上进行链路信息更新;根据缓存类型获取所述缓存事件内的缓存关键数据,所述缓存关键数据包括缓存原始信息、执行操作信息及缓存参数;将所述缓存关键数据添加到所述第六埋点器的第六埋点信息中;当缓存结束时,调用埋点器保存方法,保存所述第六埋点信息到当前链路内存。
8.一种调用链路追踪装置,其特征在于,包括:
关键信息记录模块,用于:根据一次请求过程中laravel框架中的链路关键点的调用顺序,依次建立定位各个所述链路关键点执行过程的监控,记录各个所述链路关键点操作的预设关键信息;
全链路数据形成模块,用于:根据所述调用顺序将所述预设关键信息进行排序连接,形成laravel框架针对所述请求的服务调用链的全链路数据,并存储于日志文件。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述调用链路追踪的方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述调用链路追踪的方法的步骤。
技术总结