CN111427780A - 函数信息的追踪方法、装置和计算机可读存储介质 - Google Patents
函数信息的追踪方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111427780A CN111427780A CN202010192409.3A CN202010192409A CN111427780A CN 111427780 A CN111427780 A CN 111427780A CN 202010192409 A CN202010192409 A CN 202010192409A CN 111427780 A CN111427780 A CN 111427780A
- Authority
- CN
- China
- Prior art keywords
- tracking
- information
- function
- link
- function information
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Abstract
本发明提供了一种函数信息的追踪方法、装置和计算机可读存储介质。其中,方法包括:获取函数信息的追踪配置信息;根据追踪配置信息织入函数信息的追踪逻辑;响应于函数信息的调用请求,获取函数信息的链路追踪信息;根据链路追踪信息和追踪逻辑生成函数信息的链路追踪日志。本发明提供的追踪方法,实现了自动化链路追踪逻辑静态织入,避免了开发人员重复编写大量的代码,能够有针对性的生成链路追踪日志,系统不需要中断或者停止,就能够生成完整精细的链路追踪日志,达到按需上报数据的目的,以便于研发人员快速诊断一次请求中的性能问题,解决了定位性能问题过程复杂、收集不必要链路日志的问题,提高了研发效率。
Description
本申请要求于2020年03月10日提交中国国家知识产权局、申请号为“2020101610166”、发明名称为“函数信息的追踪方法、装置和计算机可读存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本发明涉及应用程序技术领域,具体而言,涉及一种函数信息的追踪方法、一种函数信息的追踪装置和一种计算机可读存储介质。
背景技术
在软件应用中,一次用户请求可能涉及到多个函数的协作完成。在请求时可能发生异常或者超时,开发人员需要定位有问题的函数,解决问题。
目前,采用全链路追踪的方式可以记录应用中整个函数调用的有效信息(参数、耗时等),利用全链路追踪可以快速发现异常、诊断性能问题。
传统的链路追踪主要通过给函数手动埋点上报信息,但需要开发人员重复编写大量的代码,费时费力,而且在云环境中,开发人员一般会在特定时间段分析特定业务的性能问题,相关技术中,通过监听请求-响应协议(http)和java数据库连接(JDBC,Java DataBase Connectivity)上报链路日志,对函数链路日志的力度不够深入,不能形成完整精细的链路日志。
发明内容
本发明旨在至少解决现有技术或相关技术中存在的技术问题之一。
为此,本发明的第一方面提供了一种函数信息的追踪方法。
本发明的第二方面还提供了一种函数信息的追踪装置。
本发明的第三方面还提供了一种计算机可读存储介质。
有鉴于此,本发明的第一方面提出了一种函数信息的追踪方法,包括:获取函数信息的追踪配置信息;根据追踪配置信息织入函数信息的追踪逻辑;响应于函数信息的调用请求,获取函数信息的链路追踪信息;根据链路追踪信息和追踪逻辑生成函数信息的链路追踪日志。
本发明提供的函数信息的追踪方法,在调用函数信息前,获取追踪配置信息,即记录程序集中需要静态织入链路追踪特性的函数信息文件,根据追踪配置信息织入函数信息的追踪逻辑,以对代码中的函数信息进行标记,在接收到函数信息的调用请求后,获取函数信息的链路追踪信息,并存储于当前线程的上下文中,以确定需要被追踪的目标函数和时机等信息,同时初始化包含有追踪逻辑的函数信息,即确认能够被追踪的对象,通过加载当前线程上下文中的链路追踪信息,记录包含有追踪逻辑的函数信息中目标函数的相关参数,进而生成链路追踪日志。一方面,实现了自动化链路追踪逻辑静态织入,避免了开发人员重复编写大量的代码,提高了研发效率,另一方面,由操作员定制追踪方案,只收集操作员需要的信息,减少不必要的冗余数据,又一方面,能够有针对性的生成链路追踪日志,系统不需要中断或者停止,就能够生成完整精细的链路追踪日志,达到按需上报数据的目的,便于操作员快速诊断一次请求中的性能问题,解决了针对任意一种调用请求时,均会生成链路追踪日志导致的定位性能问题过程复杂、收集不必要链路日志的问题。
具体地,链路追踪信息是开发人员根据具体的业务请求制定的(例如修改销货单),包括上报函数的名称、参数的上报名单、上报期间、是否开启等。
根据本发明提供的上述的函数信息的追踪方法,还可以具有以下附加技术特征:
在上述技术方案中,进一步地,根据追踪配置信息织入函数信息的追踪逻辑,具体包括:根据追踪配置信息确定函数信息的追踪特性;根据追踪特征生成并织入追踪逻辑,其中,追踪逻辑包括追踪对象和追踪对象关联的参数信息。
在该技术方案中,根据追踪配置信息为程序集中指定函数标记追踪特性,其中,程序集和函数支持分层,支持模糊匹配,再根据标记的追踪特性为函数信息织入构建追踪对象和参数信息的追踪逻辑,以对代码中的函数信息进行标记,从而实现了自动化链路追踪逻辑静态织入,避免了开发人员重复编写大量的代码,提高了研发效率。
具体地,参数信息包括:函数内容、函数参数字典、执行函数对象等,追踪对象中包括四个切入点方法,分别为函数进入时(OnEntry)、函数执行成功时(OnSuccess)、函数异常时(OnException)、函数离开时(OnExit)。
在上述任一技术方案中,进一步地,根据链路追踪信息和追踪逻辑生成函数信息的链路追踪日志,具体包括:获取函数信息的调用信息;比对调用信息和链路追踪信息;基于调用信息满足链路追踪信息的情况,根据链路追踪信息和追踪逻辑生成链路追踪日志。
在该技术方案中,通过比对调用信息和链路追踪信息,判断链路追踪信息中是否包含调用的函数信息,即确定当前的调用信息是否符合操作员指定的追踪要求,在调用信息满足链路追踪信息时,才会生成链路追踪日志,例如,链路追踪信息的目标函数信息集合中包括当前调用的函数信息,且当前时间在上报期间之间,且预置的追踪信息开启,此时记录包含有追踪逻辑的函数信息中目标函数的相关参数,生成链路追踪日志,从而能够有针对性的生成链路追踪日志,系统不需要中断或者停止,就能够生成完整精细的链路追踪日志,达到按需上报数据的目的,解决了针对任意一种调用请求时,均会生成链路追踪日志导致的定位性能问题过程复杂、收集不必要链路日志的问题。
在上述任一技术方案中,进一步地,根据链路追踪信息和追踪逻辑生成函数信息的链路追踪日志,具体包括:获取函数信息的身份标识;解析链路追踪信息中的目标函数和目标参数;根据目标函数和身份标识,调取目标参数对应的参数信息,以生成链路追踪日志。
在该技术方案中,获取函数信息中每一个函数的身份标识,通过链路追踪信息中目标函数和身份标识定位函数信息中需要被追踪的函数,并按照目标参数记录目标函数的参数信息,例如名称、进入时间、离开时间等,从而达到了追踪函数运行的目的,以便于研发人员快速诊断一次请求中的性能问题。
在上述任一技术方案中,进一步地,获取函数信息的身份标识,具体包括:获取当前函数所属链路的第一身份标识和上一级函数的第二身份标识;根据第一身份标识和第二身份标识,确定当前函数的第三身份标识。
在该技术方案中,根据当前函数所属链路的第一身份标识(traceId)和上一级函数的第二身份标识(CurrentSpanId),确定当前函数的第三身份标识(SpanId),并存储于当前上下文中,设置第二身份标识(CurrentSpanId)的值等于第三身份标识(SpanId)的值,例如,两条链路分别为A和B,上一级函数为A1,当前函数为A11,下一级函数为A111从而形成“树”状分布,便于进行快速的服务调用追踪。
具体地,如果不存在当前函数所属链路的第一身份标识(traceId),则程序创建traceId作为根。
在上述任一技术方案中,进一步地,调取目标参数对应的参数信息之后,还包括:对参数信息进行序列化处理。
在该技术方案中,将得到的参数信息Json格式序列化后存储,以将对象的状态转换为Json格式的字符串,以便于满足数据传输解析的要求,不仅方便传输解析,还特别易于用户阅读和编写。
在上述任一技术方案中,进一步地,还包括:基于多线程调用函数信息的情况,根据当前线程的函数信息的身份标识、链路追踪信息和追踪逻辑,生成其他线程的链路追踪日志。
在该技术方案中,现阶段市场上存在APM(Asynchronous Programming Model,异步编程模型)工具主要是OneAPM,OneAPM虽然支持应用中函数的性能监控,但它无法记录整个函数调用的信息,也无法准确记录异步线程函数的耗时信息,为此,在调取异步线程函数时,将当前线程上下文中的traceId、CurrentSpanId、链路追踪信息等信息赋值给异步线程上下文,从而能够准确记录异步线程的信息,完成跨线程收集链路调用数据,实现全链路追踪。
在上述任一技术方案中,进一步地,采用InjectSharp工具织入追踪逻辑。
在该技术方案中,InjectSharp执行后可以给函数织入多个切面,而且不会破坏原有代码逻辑的规则,开发人员可以像使用类库(Class Library)内置的Attribute工具那样编写代码逻辑,通过InjectSharp轻松将代码逻辑织入到执行的函数中,实现辅助功能,并且InjectSharp是一个轻量级的工具,无需太多程序集,使用方便,有效提高了研发效率。
根据本发明的第二方面,提出了一种函数信息的追踪装置,存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时执行上述第一方面任一技术方案提出的函数信息的追踪方法的步骤。因此具有上述第一方面任一技术方案提出的函数信息的追踪方法的全部有益效果。
根据本发明的第三方面,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时执行如上述第一方面任一技术方案提出的函数信息的追踪方法的步骤。因此该计算机可读存储介质具备上述第一方面任一技术方案提出的函数信息的追踪方法的全部有益效果。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了本发明一个实施例的函数信息的追踪方法流程示意图;
图2示出了本发明又一个实施例的函数信息的追踪方法流程示意图;
图3示出了本发明又一个实施例的函数信息的追踪方法流程示意图;
图4示出了本发明又一个实施例的函数信息的追踪方法流程示意图;
图5示出了本发明又一个实施例的函数信息的追踪方法流程示意图;
图6示出了本发明一个具体实施例的全链路函数信息追踪方法流程示意图;
图7示出了本发明一个具体实施例的预置链路追踪方案结构层次示意图;
图8示出了本发明另一个具体实施例的全链路函数信息追踪方法流程示意图;
图9示出了本发明一个具体实施例的函数信息的调用顺序示意图;
图10示出了本发明一个具体实施例的CurrentSpanId切换过程示意图;
图11示出了本发明一个具体实施例的销货单的链路追踪日志示意图;
图12示出了本发明一个实施例的函数信息的追踪装置示意框图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
下面参照图1至图12描述根据本发明一些实施例的函数信息的追踪方法、函数信息的追踪装置和计算机可读储存介质。
实施例一
如图1所示,根据本发明第一方面的实施例,提出了一种函数信息的追踪方法,该方法包括:
步骤102,获取函数信息的追踪配置信息;
步骤104,根据追踪配置信息织入函数信息的追踪逻辑;
步骤106,响应于函数信息的调用请求,获取函数信息的链路追踪信息;
步骤108,根据链路追踪信息和追踪逻辑生成函数信息的链路追踪日志。
在该实施例中,在调用函数信息前,获取追踪配置信息,即记录程序集中需要静态织入链路追踪特性的函数信息文件,根据追踪配置信息织入函数信息的追踪逻辑,以对代码中的函数信息进行标记,在接收到函数信息的调用请求后,获取函数信息的链路追踪信息,并存储于当前线程的上下文中,以确定需要被追踪的目标函数和时机等信息,同时初始化包含有追踪逻辑的函数信息,即确认能够被追踪的对象,通过加载当前线程上下文中的链路追踪信息,记录包含有追踪逻辑的函数信息中目标函数的相关参数,进而生成链路追踪日志。一方面,实现了自动化链路追踪逻辑静态织入,避免了开发人员重复编写大量的代码,提高了研发效率,另一方面,由操作员定制追踪方案,只收集操作员需要的信息,减少不必要的冗余数据,便于操作员快速诊断一次请求中的性能问题,又一方面,能够有针对性的生成链路追踪日志,系统不需要中断或者停止,就能够生成完整精细的链路追踪日志,达到按需上报数据的目的,解决了针对任意一种调用请求时,均会生成链路追踪日志导致的定位性能问题过程复杂、收集不必要链路日志的问题。
具体地,链路追踪信息是开发人员根据具体的业务请求制定的(例如修改销货单),包括上报函数的名称、参数的上报名单、上报期间、是否开启等。
实施例二
如图2所示,根据本发明的一个实施例,提出了一种函数信息的追踪方法,该方法包括:
步骤202,获取函数信息的追踪配置信息;
步骤204,根据追踪配置信息确定函数信息的追踪特性;
步骤206,根据追踪特征生成并织入追踪逻辑;
步骤208,响应于函数信息的调用请求,获取函数信息的链路追踪信息;
步骤210,根据链路追踪信息和追踪逻辑生成函数信息的链路追踪日志。
其中,追踪逻辑包括追踪对象和追踪对象关联的参数信息。
在该实施例中,根据追踪配置信息为程序集中指定函数标记追踪特性,其中,程序集和函数支持分层,支持模糊匹配,再根据标记的追踪特性为函数信息织入构建追踪对象和参数信息的追踪逻辑,以对代码中的函数信息进行标记,从而实现了自动化链路追踪逻辑静态织入,避免了开发人员重复编写大量的代码,提高了研发效率。
具体地,参数信息包括:函数内容、函数参数字典、执行函数对象等,追踪对象中包括四个切入点方法,分别为函数进入时(OnEntry)、函数执行成功时(OnSuccess)、函数异常时(OnException)、函数离开时(OnExit)。
进一步地,采用InjectSharp工具织入函数信息的追踪逻辑,InjectSharp执行后可以给函数织入多个切面,而且不会破坏原有代码逻辑的规则,开发人员可以像使用类库内置的Attribute工具那样编写代码逻辑,通过InjectSharp轻松将代码逻辑织入到执行的函数中,实现辅助功能,并且InjectSharp是一个轻量级的工具,无需太多程序集,使用方便,有效提高了研发效率。
实施例三
如图3所示,根据本发明的一个实施例,提出了一种函数信息的追踪方法,该方法包括:
步骤302,获取函数信息的追踪配置信息;
步骤304,根据追踪配置信息织入函数信息的追踪逻辑;
步骤306,响应于函数信息的调用请求,获取函数信息的链路追踪信息和调用信息;
步骤308,比对调用信息和链路追踪信息;
步骤310,基于调用信息满足链路追踪信息的情况,根据链路追踪信息和追踪逻辑生成链路追踪日志。
在该实施例中,通过比对调用信息和链路追踪信息,判断链路追踪信息中是否包含调用的函数信息,即确定当前的调用信息是否符合操作员指定的追踪要求,在调用信息满足链路追踪信息时,才会生成链路追踪日志,例如,链路追踪信息的目标函数信息集合中包括当前调用的函数信息,且当前时间在上报期间之间,且预置的追踪信息开启,此时记录包含有追踪逻辑的函数信息中目标函数的相关参数,生成链路追踪日志,从而能够有针对性的生成链路追踪日志,系统不需要中断或者停止,就能够生成完整精细的链路追踪日志,达到按需上报数据的目的,解决了针对任意一种调用请求时,均会生成链路追踪日志导致的定位性能问题过程复杂、收集不必要链路日志的问题。
实施例四
如图4所示,根据本发明的一个实施例,提出了一种函数信息的追踪方法,该方法包括:
步骤402,获取函数信息的追踪配置信息;
步骤404,根据追踪配置信息确定函数信息的追踪特性;
步骤406,根据追踪特征生成并织入追踪逻辑;
步骤408,响应于函数信息的调用请求,获取函数信息的链路追踪信息;
步骤410,获取函数信息的身份标识;
步骤412,解析链路追踪信息中的目标函数和目标参数;
步骤414,根据目标函数和身份标识,调取目标参数对应的参数信息,以生成链路追踪日志。
在该实施例中,获取函数信息中每一个函数的身份标识,通过链路追踪信息中目标函数和身份标识定位函数信息中需要被追踪的函数,并按照目标参数记录目标函数的参数信息,例如名称、进入时间、离开时间等,从而达到了追踪函数运行的目的,以便于研发人员快速诊断一次请求中的性能问题。
进一步地,如图9和图10所示,获取函数信息的身份标识,具体包括:获取当前函数所属链路的第一身份标识和上一级函数的第二身份标识;根据第一身份标识和第二身份标识,确定当前函数的第三身份标识。具体地,根据当前函数所属链路的第一身份标识(traceId)和上一级函数的第二身份标识(CurrentSpanId),确定当前函数的第三身份标识(SpanId),并存储于当前上下文中,设置第二身份标识(CurrentSpanId)的值等于第三身份标识(SpanId)的值,例如,两条链路分别为A和B,上一级函数为A1,当前函数为A11,下一级函数为A111从而形成“树”状分布,便于进行快速的服务调用追踪,其中,如果不存在当前函数所属链路的第一身份标识(traceId),则程序创建traceId作为根。
实施例五
如图5所示,根据本发明的一个实施例,提出了一种函数信息的追踪方法,该方法包括:
步骤502,获取函数信息的追踪配置信息;
步骤504,根据追踪配置信息确定函数信息的追踪特性;
步骤506,根据追踪特征生成并织入追踪逻辑;
步骤508,响应于函数信息的调用请求,获取函数信息的链路追踪信息;
步骤510,获取函数信息的身份标识;
步骤512,解析链路追踪信息中的目标函数和目标参数;
步骤514,根据目标函数和身份标识,调取目标参数对应的参数信息;
步骤516,对参数信息进行序列化处理,并存储序列化处理后的参数信息。
在该实施例中,将得到的参数信息Json格式序列化后存储,以将对象的状态转换为Json格式的字符串,以便于满足数据传输解析的要求,不仅方便传输解析,还特别易于用户阅读和编写。
进一步地,还包括:基于多线程调用函数信息的情况,根据当前线程的函数信息的身份标识、链路追踪信息和追踪逻辑,生成其他线程的链路追踪日志。
由于现阶段市场上存在APM(Asynchronous Programming Model,异步编程模型)工具主要是OneAPM,OneAPM虽然支持应用中函数的性能监控,但它无法记录整个函数调用的信息,也无法准确记录异步线程函数的耗时信息,为此,在调取异步线程函数时,将当前线程上下文中的traceId、CurrentSpanId、链路追踪信息等信息赋值给异步线程上下文,从而能够准确记录异步线程的信息,完成跨线程收集链路调用数据,实现全链路追踪。
实施例六
根据本发明的一个具体实施例,提出了一种全链路函数信息追踪的方法,用于在函数调用时,根据预置的链路追踪方案(链路追踪信息)采集必要的函数链路追踪日志,具体步骤如下:
(1)在应用程序上线前,开发人员给应用程序中的函数标记链路追踪特性或者在配置文件中增加链路追踪配置信息。
(1.1)链路追踪特性:表示需要采集被标记的函数信息。
(1.2)链路追踪配置文件:表示一个记录程序集中需要静态织入链路追踪特性的函数信息文件。具体地,[{程序集1:[{函数1:{链路追踪特性},{函数2:{链路追踪特性}}}]},{程序集2:[….]}]。其中,程序集和函数支持分层,支持模糊匹配。
配置文件的格式示例如下:
[{"assembly":"D:\\Works\\1300_4\\uap\\SF\\EBS\\pubref\\ConsoleApp1.exe","methods":[{"fullName":"ConsoleApp1.Test.Do","attributes":[{"assemblyName":"ClassLibrary1.dll","className":"ClassLibrary1.TAttribute","path":null}]}]}]。其中assembly表示要织入的程序集,methods表示要织入特性的方法集合,attributes表示方法要织入的标注特性,assemblyName表示特性所在程序集,className表示特性全名称。
(2)如图6所示,运行全链路函数信息追踪的装置InjectSharp。
(2.1)InjectSharp根据链路追踪配置文件,给程序中的特定函数标记链路追踪特性。
(2.2)根据标记的链路追踪特性,织入构建链路追踪对象和链路追踪参数对象(包括函数信息、函数参数字典、执行函数对象等)逻辑。
(2.3)将链路追踪对象中的四个方法(OnEntry,OnSuccess,OnException,OnExit)分别在函数进入时、执行成功时、异常时、离开时织入。
(2.4)生成新的应用程序。
(3)应用程序上线后,应用程序接收请求。
(3.1)根据请求信息(资源定位符URL等)和预置的链路追踪方案集合获取当前请求的预置链路追踪方案,并存储于当前线程的上下文中。
(3.2)函数接收到调用请求,初始化链路追踪对象,链路追踪对象加载当前线程上下文中的链路追踪预置方案。
(3.3)上述预置的链路追踪方案是开发人员根据具体的业务请求(例如修改销货单),预置的函数信息集合、上报期间、是否开启等。具体地,预置链路追踪方案结构层次如图7所示,[方案名称1:{方案11},{方案12},{函数集合:[{函数1},{函数2}…],上报期间:{开始时间,结束时间},期间类型,是否开启},方案名称2:…]。
(3.4)预置的链路追踪方案中预置的函数信息,包括但不限于函数的全名称和参数的上报名单,参数上报名单存储用于调用函数需上报的参数名称集合。
(3.5)如图8所示,在链路追踪对象执行OnEntry方法时,根据预置链路追踪方案判断调用的函数是否上报链路日志。
(3.6)在上述的判断中,如果预置链路追踪方案的函数信息集合中包括调用函数信息,且当前时间在上报期间之间,且预置方案开启,则执行后续逻辑,否则不执行后续逻辑。
(3.7)上述后续逻辑包括:
(3.7.1)在当前线程上下文中获取本次请求的链路的追踪标记traceId以及调用当前函数的上一级函数的唯一追踪标记CurrentSpanId。
(3.7.2)如果不存在traceId,则程序创建traceId作为根。
(3.7.3)根据traceId和CurrentSpanId生成当前函数的唯一追踪标记SpanId,并存储于当前上下文中,设置CurrentSpanId等于SpanId。
(3.7.4)根据预置链路追踪方案中参数的上报名单,判断是否上报函数中的某个具体参数值。
(3.7.5)如果参数上报名单中存在此参数名称,则参数Json序列化后存储记录,否则参数值不会存储记录。
(3.7.6)将函数参数信息(名称、进入时间)等诊断性能的信息存储记录,函数间调用的顺序如图9所示,将函数调取的层次日志上报给链路服务器,基于的核心思想是线程上下文中的CurrentSpanId标记的切换,CurrentSpanId切换的过程如图10所示。
(3.8)执行完上述逻辑后,执行原有程序逻辑,最后执行链路追踪对象的onExit方法。
(3.8.1)存储记录函数参数信息(离开时间)。
(3.8.2)将当前线程上下文中追踪标记重置为上一级函数的追踪标记。
(3.8.3)将存储的记录上报给全链路追踪服务,具体地销货单的链路追踪图如图11所示。
(3.9)为了准确记录异步线程的信息,在调取异步线程函数时,需将当前线程上下文中的traceId、CurrentSpanId、预置链路追踪方案等信息赋值给异步线程上下文。
在该实施例中,利用InjectSharp工具实现了链路追踪代码逻辑织入,InjectSharp执行后可以给函数织入多个切面,而且不会破坏原有代码逻辑的规则,不仅解决链路追踪逻辑的织入问题,而且提供了一种新的AOP(Aspect Oriented Programming,面向切面编程)方式,开发人员可以像使用类库(Class Library)内置的Attribute那样编写代码逻辑,运用InjectSharp轻松将这些逻辑织入到执行的函数中,减少了重复代码,提高了研发效率。并且InjectSharp是一个轻量级的工具,无需太多程序集,使用非常方便。另外,操作员能够定制上报方案,只收集操作员需要的信息,减少不必要的冗余数据,而且能够跨线程收集链路调用数据,实现全链路追踪,系统不需要中断或者停止,就能够达到按需上报数据的目的,帮助研发人员快速诊断一次请求中的性能问题,提高效率。
实施例七
如图12所示,根据本发明第二方面的实施例,提出了一种函数信息的追踪装置600,包括存储器602和处理器604,存储器602存储有计算机程序,处理器604执行计算机程序时实现上述第一方面实施例的函数信息的追踪方法。因此该函数信息的追踪装置600具备上述第一方面实施例的函数信息的追踪方法的全部有益效果。
实施例八
根据本发明第三方面的实施例,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时执行如上述第一方面的实施例的函数信息的追踪方法的步骤。因此该计算机可读存储介质具备上述第一方面的实施例的函数信息的追踪方法的全部有益效果。
在本发明中,术语“多个”则指两个或两个以上,除非另有明确的限定。术语“安装”、“相连”、“连接”、“固定”等均应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或一体地连接;“相连”可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
在本说明书的描述中,术语“一个实施例”、“一些实施例”、“具体实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或实例。而且,描述的具体特征、结构、材料或特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种函数信息的追踪方法,其特征在于,包括:
获取所述函数信息的追踪配置信息;
根据所述追踪配置信息织入所述函数信息的追踪逻辑;
响应于所述函数信息的调用请求,获取所述函数信息的链路追踪信息;
根据所述链路追踪信息和所述追踪逻辑,生成所述函数信息的链路追踪日志。
2.根据权利要求1所述的函数信息的追踪方法,其特征在于,所述根据所述追踪配置信息织入所述函数信息的追踪逻辑,具体包括:
根据所述追踪配置信息确定所述函数信息的追踪特性;
根据所述追踪特征生成并织入所述追踪逻辑,
其中,所述追踪逻辑包括追踪对象和所述追踪对象关联的参数信息。
3.根据权利要求1所述的函数信息的追踪方法,其特征在于,所述根据所述链路追踪信息和所述追踪逻辑生成所述函数信息的链路追踪日志,具体包括:
获取所述函数信息的调用信息;
比对所述调用信息和所述链路追踪信息;
基于所述调用信息满足所述链路追踪信息的情况,根据所述链路追踪信息和所述追踪逻辑生成所述链路追踪日志。
4.根据权利要求2所述的函数信息的追踪方法,其特征在于,所述根据所述链路追踪信息和所述追踪逻辑生成所述函数信息的链路追踪日志,具体包括:
获取所述函数信息的身份标识;
解析所述链路追踪信息中的目标函数和目标参数;
根据所述目标函数和所述身份标识,调取所述目标参数对应的所述参数信息,以生成所述链路追踪日志。
5.根据权利要求4所述的函数信息的追踪方法,其特征在于,所述获取所述函数信息的身份标识,具体包括:
获取当前函数所属链路的第一身份标识和上一级函数的第二身份标识;
根据所述第一身份标识和所述第二身份标识,确定所述当前函数的第三身份标识。
6.根据权利要求4所述的函数信息的追踪方法,其特征在于,所述调取所述目标参数对应的所述参数信息之后,还包括:
对所述参数信息进行序列化处理。
7.根据权利要求4所述的函数信息的追踪方法,其特征在于,还包括:
基于多线程调用所述函数信息的情况,根据当前线程的所述函数信息的所述身份标识、所述链路追踪信息和所述追踪逻辑,生成其他线程的所述链路追踪日志。
8.根据权利要求1至7中任一项所述的函数信息的追踪方法,其特征在于,
采用InjectSharp工具织入所述追踪逻辑。
9.一种函数信息的追踪装置,其特征在于,包括:存储器和处理器,所述存储器存储有计算机程序,所述处理器执行计算机程序时执行如权利要求1至8中任一项所述的函数信息的追踪方法的步骤。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时执行了如权利要求1至8中任一项所述的函数信息的追踪方法的步骤。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010161016 | 2020-03-10 | ||
CN2020101610166 | 2020-03-10 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111427780A true CN111427780A (zh) | 2020-07-17 |
Family
ID=71546501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010192409.3A Pending CN111427780A (zh) | 2020-03-10 | 2020-03-18 | 函数信息的追踪方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111427780A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148574A (zh) * | 2020-09-21 | 2020-12-29 | 北京基调网络股份有限公司 | 一种性能数据采集方法、计算机设备及存储介质 |
CN113064750A (zh) * | 2021-04-26 | 2021-07-02 | 山东英信计算机技术有限公司 | 一种bios日志信息的追踪方法、装置和介质 |
CN113918377A (zh) * | 2021-12-16 | 2022-01-11 | 深圳软牛科技有限公司 | C++程序崩溃的定位方法、装置、设备及存储介质 |
CN114024975A (zh) * | 2021-11-26 | 2022-02-08 | 中国电力科学研究院有限公司 | 服务负载均衡路径计算方法、系统、设备及存储介质 |
CN114257502A (zh) * | 2020-09-21 | 2022-03-29 | 华为终端有限公司 | 一种日志上报方法及装置 |
CN115658431A (zh) * | 2022-10-25 | 2023-01-31 | 贝壳找房(北京)科技有限公司 | 链路追踪的方法、电子设备及计算机可读存储介质 |
CN117591436A (zh) * | 2024-01-18 | 2024-02-23 | 南京研利科技有限公司 | 一种Go源码的可观测性数据获取方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070283331A1 (en) * | 2006-06-02 | 2007-12-06 | Microsoft Corporation | Arbitrary Runtime Function Call Tracing |
CN102722440A (zh) * | 2012-06-07 | 2012-10-10 | 中兴通讯股份有限公司 | 一种嵌入式系统可执行代码的调试装置、调试方法及嵌入式系统 |
CN107943646A (zh) * | 2017-11-08 | 2018-04-20 | 北京云杉世纪网络科技有限公司 | 一种程序监控方法及装置 |
CN108959069A (zh) * | 2018-06-11 | 2018-12-07 | 北京奇艺世纪科技有限公司 | 一种函数运行的追踪方法和装置 |
CN110830577A (zh) * | 2019-11-08 | 2020-02-21 | 深圳前海环融联易信息科技服务有限公司 | 服务请求调用追踪方法、装置、计算机设备及存储介质 |
-
2020
- 2020-03-18 CN CN202010192409.3A patent/CN111427780A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070283331A1 (en) * | 2006-06-02 | 2007-12-06 | Microsoft Corporation | Arbitrary Runtime Function Call Tracing |
CN102722440A (zh) * | 2012-06-07 | 2012-10-10 | 中兴通讯股份有限公司 | 一种嵌入式系统可执行代码的调试装置、调试方法及嵌入式系统 |
CN107943646A (zh) * | 2017-11-08 | 2018-04-20 | 北京云杉世纪网络科技有限公司 | 一种程序监控方法及装置 |
CN108959069A (zh) * | 2018-06-11 | 2018-12-07 | 北京奇艺世纪科技有限公司 | 一种函数运行的追踪方法和装置 |
CN110830577A (zh) * | 2019-11-08 | 2020-02-21 | 深圳前海环融联易信息科技服务有限公司 | 服务请求调用追踪方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
向勇;曹睿东;毛英明;: "基于QEMU的动态函数调用跟踪", 计算机研究与发展, no. 07 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148574A (zh) * | 2020-09-21 | 2020-12-29 | 北京基调网络股份有限公司 | 一种性能数据采集方法、计算机设备及存储介质 |
CN112148574B (zh) * | 2020-09-21 | 2021-04-23 | 北京基调网络股份有限公司 | 一种性能数据采集方法、计算机设备及存储介质 |
CN114257502A (zh) * | 2020-09-21 | 2022-03-29 | 华为终端有限公司 | 一种日志上报方法及装置 |
CN114257502B (zh) * | 2020-09-21 | 2023-08-22 | 华为终端有限公司 | 一种日志上报方法及装置 |
CN113064750A (zh) * | 2021-04-26 | 2021-07-02 | 山东英信计算机技术有限公司 | 一种bios日志信息的追踪方法、装置和介质 |
CN113064750B (zh) * | 2021-04-26 | 2023-03-28 | 山东英信计算机技术有限公司 | 一种bios日志信息的追踪方法、装置和介质 |
CN114024975A (zh) * | 2021-11-26 | 2022-02-08 | 中国电力科学研究院有限公司 | 服务负载均衡路径计算方法、系统、设备及存储介质 |
CN113918377A (zh) * | 2021-12-16 | 2022-01-11 | 深圳软牛科技有限公司 | C++程序崩溃的定位方法、装置、设备及存储介质 |
CN115658431A (zh) * | 2022-10-25 | 2023-01-31 | 贝壳找房(北京)科技有限公司 | 链路追踪的方法、电子设备及计算机可读存储介质 |
CN117591436A (zh) * | 2024-01-18 | 2024-02-23 | 南京研利科技有限公司 | 一种Go源码的可观测性数据获取方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111427780A (zh) | 函数信息的追踪方法、装置和计算机可读存储介质 | |
US7178134B2 (en) | Method and apparatus for resolving memory allocation trace data in a computer system | |
US7792950B2 (en) | Coverage analysis of program code that accesses a database | |
US6654948B1 (en) | Methods and apparatus for partial and consistent monitoring of object-oriented programs and systems | |
US20050204342A1 (en) | Method, system and article for detecting memory leaks in Java software | |
US7496615B2 (en) | Method, system and article for detecting critical memory leaks causing out-of-memory errors in Java software | |
US20030106045A1 (en) | Object-oriented creation breakpoints | |
US10169002B2 (en) | Automated and heuristically managed solution to quantify CPU and path length cost of instructions added, changed or removed by a service team | |
CN112529528B (zh) | 基于大数据流计算的工作流监控与告警方法、装置及系统 | |
US7043400B2 (en) | Testing using policy-based processing of test results | |
CN113946499A (zh) | 一种微服务链路跟踪及性能分析方法、系统、设备及应用 | |
CN112905431A (zh) | 系统性能问题自动定位方法、装置及设备 | |
US6951011B1 (en) | Diagnostic method and article for identifying significant events | |
CN111901399A (zh) | 云平台块设备异常审计方法、装置、设备及存储介质 | |
CN114428733A (zh) | 基于静态程序分析与模糊测试的内核数据竞争检测方法 | |
CN115664939A (zh) | 一种基于自动化技术的综合运维方法、装置和存储介质 | |
CN111625428A (zh) | 监控Java应用程序运行状态的方法、系统、设备和存储介质 | |
CN114781648A (zh) | 面向机器学习任务的自动化编排、构建、执行方法及系统 | |
CN113031991B (zh) | 一种嵌入式系统的远程自适应升级方法及其装置 | |
GB2399897A (en) | Memory recycling in computer system where the processing is stopped to identify where the data items allocated in the memory | |
Peiris et al. | Automatically detecting" excessive dynamic memory allocations" software performance anti-pattern | |
US7370327B2 (en) | Method for managing memory resources in a shared memory system | |
CN111459984B (zh) | 基于流式处理的日志数据处理系统及方法 | |
US20040268297A1 (en) | Generating a model of software in execution | |
Lui et al. | Real-time detection of the more is less performance anti-pattern in mysql databases |
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 |