LoongSuite Go Agent 的前身是 alibaba/opentelemetry-go-auto-instrumentation 项目,通过无侵入编译时插桩技术为 Go 应用提供可观测数据采集能力。
之所以不能像 Java 那样动态挂载 Agent,是因为 Java 可以使用字节码增强技术实现动态 Agent 挂载,而 Go 编译后的产物是一个可以直接运行的二进制文件,无法在运行时动态注入。
Go Agent 的实现原理是利用 Go 提供的 go toolexec 能力:
- Go 的编译流程是:编译器前端对源代码做词法语法分析,解析成抽象语法树(AST),之后编译器后端做代码优化和机器码生成。
- 通过 go toolexec,可以在编译器前端和后端之间插入一个中间层,对前端生成的 AST 做任意修改。
- 通过 AST 语法树分析查找监控埋点,根据提前定义好的埋点规则,在编译前插入需要的监控代码(如 Span 创建、指标统计、上下文透传等)。
这个方案不需要修改任何代码,只需修改编译命令;同时由于经过完整的 Go 编译流程,自然支持 Go 的所有运行场景,避免了不可预料的错误。




