阿里巴巴、Datadog 和 Quesma 联手推出 Go 编译时插桩
标准只有被广泛采用才有意义,而只有当可用工具促进采用时,采用才是有效的。我想象一下,如果当初引入国际单位制(SI units)时,你必须自己制作称来称量东西的公斤数,它就不会那么受欢迎了!
如果您在 Go 中使用 OpenTelemetry,您将熟悉配置插桩库以自动从知名开源组件生成遥测数据的挑战。由于 Go 语言的编译特性,您目前有两种选择1
- 使用一个独立的二进制文件,该文件分析您的 Go 进程并将 eBPF 程序附加到应用程序的钩子上——请参阅 opentelemetry-go-instrumentation。
- 在代码中手动配置插桩库,例如,请参阅 Instrument the HTTP server。
出于各种原因,以上两种选择在您的环境中可能都不可行或并非最佳。然而,情况即将改变!
行业协作是开放标准的核心
在过去的几个月里,OpenTelemetry 收到不止一个,而是两个来自行业领导者的捐赠提案,旨在为上述问题提供解决方案,并实现 Go 应用程序的零代码、供应商中立的编译时插桩。它们是:
- 阿里巴巴的 捐赠提案,内容为 opentelemetry-go-auto-instrumentation
- Datadog 的 捐赠提案,内容为 Orchestrion
我们非常感谢阿里巴巴和 Datadog 提出的这些捐赠提案。这继续表明了整个行业向 OpenTelemetry 定义的标准靠拢的趋势。
编译时插桩利用标准的 Go 工具链的 -toolexec 机制,在 Go 源代码被传递给 Go 编译器之前对其进行重写,在所有相关位置(包括依赖项和 Go 标准库)添加插桩。
本次公告最令人兴奋的部分是,最终不会是阿里巴巴或 Datadog 的解决方案“获胜”。本着开源协作的真正精神,这两家公司已决定联手并贡献必要的资源,来启动一个新的 Go 编译时插桩 SIG。其目标是提供一个统一的、供应商中立的方法,借鉴每个解决方案的最佳方面,并使整个社区受益。他们还将获得 Quesma 的进一步支持,Quesma 将带来在 instrgen 方面的经验。instrgen 是 OpenTelemetry 最初的实验性方法,用于提供基于 -toolexec 的 Go 编译时插桩,它将被 SIG 的初步工作所取代。
从长远来看,该 SIG 将专注于:
- 开发编译器插件或增强功能,自动注入插桩代码,确保最低的运行时性能开销和与现有 Go 项目的兼容性。
- 提供与 OpenTelemetry 和其他监控框架一致的标准化插桩模式。
如果您有兴趣贡献,或者只是想了解更多信息,以下是有关 SIG 的一些有用信息:
- GitHub 仓库:opentelemetry-go-compile-instrumentation
- CNCF Slack:#otel-go-compt-instr-sig
- 会议:每隔一周的星期四 UTC:08:00 – 09:00(订阅 此 Google 群组 以获取日历邀请,或阅读有关 我们社区日历 的更多信息)
我们期待看到这个新 SIG 的运作,并迫不及待地希望看到这次了不起的合作成果!
除非您想“自己制作称”,或者 OTel 的等效项,即手动插桩第三方库。↩︎