System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及可观测性,具体而言,涉及一种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提供的编译增强能力,让业务系统无侵入地接入opentel
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本文档来自技高网...
【技术保护点】
1.一种Go源码的可观测性数据获取方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述对所述Go源码进行编译增强,包括:
3.如权利要求2所述的方法,其特征在于,所述可观测性数据还包括日志数据;
4.如权利要求1所述的方法,其特征在于,所述初始化OpenTelemetry的Tracer实例和/或Metrics实例,包括:
5.如权利要求1所述的方法,其特征在于,在所述可执行文件运行过程中,还包括:
6.如权利要求1所述的方法,其特征在于,所述对所述Go源码进行编译增强,得到修改后代码,包括:
7.如权利要求6所述的方法,其特征在于,在所述可执行文件运行过程中,还包括:
8.一种Go源码的可观测性数据获取装置,其特征在于,包括:
9.一种电子设备,其特征在于,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述机器可读指令被所述处理器执行时执行如权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其特征在于,该存储介质上存储有
...【技术特征摘要】
1.一种go源码的可观测性数据获取方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述对所述go源码进行编译增强,包括:
3.如权利要求2所述的方法,其特征在于,所述可观测性数据还包括日志数据;
4.如权利要求1所述的方法,其特征在于,所述初始化opentelemetry的tracer实例和/或metrics实例,包括:
5.如权利要求1所述的方法,其特征在于,在所述可执行文件运行过程中,还包括:
6.如权利要求1所述的方法,其特征在于,所述对所述go...
【专利技术属性】
技术研发人员:常建龙,陆家靖,徐豪,
申请(专利权)人:南京研利科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。