一种Go源码的可观测性数据获取方法及装置与流程

文档序号:37142339发布日期:2024-02-26 16:54阅读:17来源:国知局
一种Go源码的可观测性数据获取方法及装置与流程

本技术涉及可观测性,具体而言,涉及一种go源码的可观测性数据获取方法及装置。


背景技术:

1、传统针对微服务应用的服务监控,例如获取可观测性数据等,主要采用在业务代码中埋点方案,方案是针对不同语言推出不同的apm sdk或agent,但是有些开发语言如go和c语言很难做到自动化插桩,只能提供sdk包以便人工插桩,需要通过开发人员在业务代码中手动埋点实现监控。


技术实现思路

1、本技术实施例的目的在于提供一种go源码的可观测性数据获取方法及装置,用以解决对go语言获取可观测性数据时,无法自动化插桩,需要通过开发人员在业务代码中手动埋点实现监控的问题。

2、本技术实施例提供的一种go源码的可观测性数据获取方法,包括:

3、利用代理模块引入opentelemetry的api和sdk;其中,代理模块包括api部分和实现部分;

4、对业务方的go源码进行编译增强,得到修改后代码;

5、将修改后代码与go源码一起混合编译,得到可执行文件;

6、在可执行文件运行过程中,利用代理模块调用opentelemtry api ,并初始化opentelemetry的tracer实例和/或metrics实例,利用初始化后的tracer实例和/或metrics实例使用追踪数据上报器,上报可观测性数据;可观测性数据包括跟踪数据和/或度量指标数据。

7、上述技术方案中,通过对接golang提供的编译增强能力,让业务系统无侵入地接入opentelemetry的监控体系,编译参数通过持续集成/持续交付(ci/cd)系统自动嵌入完成,业务方没有任何感知,升级的动作也能够通过ci/cd系统自动完成。本实施例通过代理模块实现了无侵入式支持opentelemetry,从而拓展了编译增强在可观测领域的应用,不仅支持了链路追踪的功能,同时也扩展支持了监控指标的功能。

8、在一些可选的实施方式中,对go源码进行编译增强,包括:

9、对go源码的runtime包进行增强,允许插件开发者在goroutine上下文中存储自定义变量;

10、增强代理核心插件,以提供复制代理模块插件目录,关联runtime包中的增强内容的能力,并提供一系列初始化函数供外部调用;

11、增强程序入口,以提供调用初始化程序的能力;

12、增强插件,以检测模块是否需要增强,检测业务方引入的第三方模型,以及匹配模块内部的抽象语法树;

13、增强指标,以提供注入指标监控功能的api的能力。

14、上述技术方案中,自定义变量存储,通过增强go源码的runtime包,允许插件开发者在goroutine上下文中存储自定义变量,这使得开发者可以在运行时为特定的goroutine设置和获取自定义的变量,提供了更灵活的插件开发体验。代理模块插件目录复制,通过增强代理核心插件,提供复制代理模块插件目录的能力,使得插件开发者可以轻松地将自己的插件目录复制到程序运行目录中,避免了手动复制和配置的麻烦。外部初始化函数调用,提供一系列初始化函数供外部调用,使得开发者可以在程序入口处或其他合适的位置调用这些函数,以完成插件的初始化工作。模块增强检测与抽象语法树(ast)应用,通过增强插件以检测模块是否需要增强以及检测业务方引入的第三方模型,以及匹配模块内部的抽象语法树,使得开发者可以更轻松地应用ast,从而进行更深入的代码分析和修改。指标监控功能注入,通过增强指标,提供api的能力以注入指标监控功能,使得开发者可以在程序中实现自定义的指标监控,从而更好地了解程序的运行状态和性能表现。总的来说,这些编译增强提供了更灵活、更强大的插件开发支持,使得开发者可以更加方便地进行插件开发、配置和部署。

15、在一些可选的实施方式中,可观测性数据还包括日志数据;

16、对go源码进行编译增强,还包括:增强logrus和zap日志框架,以实现日志与观测数据的耦合。

17、上述技术方案中,通过将日志框架与观测数据进行耦合,可以使得日志信息与可观测性数据(如指标、追踪等)在同一上下文中展示。这样方便开发者更好地了解程序运行状态,快速定位和解决问题。

18、在一些可选的实施方式中,初始化opentelemetry的tracer实例和/或metrics实例,包括:

19、通过调用init方法并根据用户传递的参数,来初始化tracer实例和/或metrics实例;其中,用户传递参数的方式包括通过环境变量、或配置文件的方式隐式传递。

20、上述技术方案中,通过调用init方法,可以使用用户传递的参数来初始化tracer和metrics实例,这样可以使初始化过程更加灵活和可配置。用户可以传递特定的参数,如tracer名称、metrics的度量名称和标签等,以控制实例的初始化和配置。用户可以通过传递参数来定义tracer和metrics实例的配置,例如采样率、缓冲区大小等,这样可以满足不同的使用场景和需求,使实例的配置更加自定义和灵活。通过将初始化逻辑封装在init方法中,可以简化tracer和metrics实例的初始化过程,用户只需调用该init方法并传递必要的参数,即可完成实例的初始化,不需要手动进行繁琐的配置和设置。

21、在一些可选的实施方式中,在可执行文件运行过程中,还包括:

22、通过调用go语言自带的性能剖析工具pprof,执行性能剖析,得到性能数据;性能数据包括cpu使用情况和/或内存分配情况和/或锁分配情况。

23、上述技术方案中,通过使用go语言自带的性能剖析工具pprof,可以获取到包括cpu使用、内存分配和锁分配等多个方面的性能数据,从而对程序的性能进行全面的评估和分析。这些数据可以帮助开发人员了解程序在各种资源使用上的表现,为优化程序性能提供了重要的依据。通过在程序运行时进行性能剖析,可以实时获取到程序的性能数据。这对于及时发现和解决程序在运行过程中的性能问题非常有帮助,可以避免程序在生产环境中出现意外的性能瓶颈。基于获取到的性能数据,开发人员可以对程序进行深度的性能调优。例如,根据cpu使用情况优化算法和数据结构,减少不必要的计算;根据内存分配情况优化内存管理策略,避免内存泄漏和不必要的内存分配;根据锁分配情况优化并发控制策略,提高并发性能。通过性能剖析得到的数据还可以用于故障排查和诊断。当程序出现性能下降或异常行为时,可以通过分析这些数据找到可能的问题所在,从而更快地定位和解决潜在的故障。在开发过程中,可以通过性能剖析来对程序的性能进行测试和评估。这有助于确保开发的程序在各种场景下都具有优秀的性能表现,并满足用户的需求。

24、在一些可选的实施方式中,对go源码进行编译增强,得到修改后代码,包括:

25、动态链接setter函数,setter函数用于在可执行文件运行过程中,通过动态链接的方式将初始化后的tracer实例和/或metrics实例赋值给全局变量,以使代理模块能够通过调用tracer api和/或metrics api来使用tracer实例和/或metrics实例。

26、上述技术方案中,通过将tracer实例和/或metrics实例赋值给全局变量,可以使得代理模块在任何地方都可以轻松地访问和调用这些实例。这避免了在代理模块中重复调用api或进行其他复杂的操作,提高了代码的效率和可读性。动态链接使得在不同操作系统和平台上使用tracer实例和/或metrics实例成为可能。即使在不同的环境中,也只需要进行简单的配置和设置,而不需要修改底层的代码。

27、在一些可选的实施方式中,在可执行文件运行过程中,还包括:

28、代理模块将初始化完成以后的tracer实例和/或metrics实例通过编译时动态链接的setter函数赋值给全局变量;

29、代理模块通过tracer api和/或metrics api调用全局变量,实现调用opentelemetry的api。

30、本技术实施例提供的一种go源码的可观测性数据获取装置,包括:

31、引入模块,用于利用代理模块引入opentelemetry的api和sdk;其中,代理模块包括api部分和实现部分;

32、编译模块,用于对业务方的go源码进行编译增强,得到修改后代码;将修改后代码与go源码一起混合编译,得到可执行文件;

33、运行模块,用于在可执行文件运行过程中,利用代理模块调用opentelemtry api,并初始化opentelemetry的tracer实例和/或metrics实例,利用初始化后的tracer实例和/或metrics实例使用追踪数据上报器,上报可观测性数据;可观测性数据包括跟踪数据和/或度量指标数据。

34、本技术实施例提供的一种电子设备,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述机器可读指令被所述处理器执行时执行如以上任一所述的方法。

35、本技术实施例提供的一种计算机可读存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如以上任一所述的方法。

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