陕西建设交通集团招聘信息网站,网站项目策划大纲,泉州软件开发制作,免费flash网站模板带后台Go 编译时插桩
Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术#xff0c;目的是在不修改业务代码的情况下#xff0c;实现对应用程序的监控和追踪。
基本原理
Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改#xff0c;将监控代码注入到…Go 编译时插桩
Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术目的是在不修改业务代码的情况下实现对应用程序的监控和追踪。
基本原理
Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改将监控代码注入到目标函数中。具体步骤如下
在编译流程中通过抽象语法树AST分析源代码。根据预定义的规则如配置文件或插桩框架找到需要监控的函数或方法。在这些函数的入口和出口插入自定义的监控代码。完成修改后的代码继续经过正常的编译流程生成最终的可执行文件。
优势
零侵入性无需修改业务代码减少了对现有代码的干扰。性能优化由于插桩代码经过完整的编译流程不会产生不可预料的错误并且可以利用编译器的优化。全面监控可以实现与 Java 监控类似的全面监控能力包括链路追踪、指标统计、日志关联等。
实践
当前主要是基于 Datadog 提供的工具 Orchestrion用于在编译时对 Go 代码进行自动插桩。它通过与 Go 工具链交互在源代码发送到编译器之前对其进行检查和修改。
要求
Go 版本 ≥ 1.18Go Module 管理项目
创建 DEMO
1、创建目录
mkdir go-runtime-demo
cd go-runtime-demo2、编写 main.go
package mainimport net/httpfunc main() {http.HandleFunc(/, helloFunc)http.ListenAndServe(localhost:18080, nil)
}func helloFunc(w http.ResponseWriter, r *http.Request) {w.Write([]byte(ok))
}3、初始化目录
go mod init http_service
go mod tidy安装 Orchestrion
1、下载依赖
go install github.com/DataDog/orchestrionlatest2、创建连接点
即在上面的 go-runtime-demo 目录下执行以下命令
orchestrion pin执行成功后在当前目录下生成orchestrion.tool.go 文件。
3、更新依赖
go mod tidy编译运行
1、设置环境变量由于 Datadog 默认端口为 8125需要调整端口推送到观测云
export DD_SERVICEgo-runtime-demo
export DD_TRACE_AGENT_PORT95292、使用 Orchestrion 编译运行项目
在项目的根目录下使用以下命令进行编译
orchestrion go build .
orchestrion go run .3、查看日志
输出以下日志则表示加载成功。
rootliurui:/home/liurui/code/go/go-runtime-demo# export DD_SERVICEgo-runtime-demo
rootliurui:/home/liurui/code/go/go-runtime-demo# export DD_TRACE_AGENT_PORT9529
rootliurui:/home/liurui/code/go/go-runtime-demo# orchestrion go build .
rootliurui:/home/liurui/code/go/go-runtime-demo# orchestrion go run .
2025/02/17 14:02:42 Datadog Tracer v1.71.0 INFO: DATADOG TRACER CONFIGURATION {date:2025-02-17T14:02:4208:00,os_name:Linux Mint,os_version:21.1 (Vera),version:v1.71.0,lang:Go,lang_version:go1.23.6,env:,service:http_service,agent_url:http://localhost:9529/v0.4/traces,agent_error:,debug:false,analytics_enabled:false,sample_rate:NaN,sample_rate_limit:disabled,trace_sampling_rules:null,span_sampling_rules:null,sampling_rules_error:,service_mappings:null,tags:{runtime-id:404bbb85-f951-4cdf-a5f5-436a275614f2},runtime_metrics_enabled:false,runtime_metrics_v2_enabled:false,profiler_code_hotspots_enabled:true,profiler_endpoints_enabled:true,dd_version:,architecture:amd64,global_service:,lambda_mode:false,appsec:false,agent_features:....观测云
登录观测云控制台点击「应用性能监控」 -「链路」查看链路信息。 通过编译时插桩技术Go 开发者可以在不修改业务代码的情况下快速实现对应用程序的全面监控和优化显著提升开发效率和运维能力。