ARMS Go 可观测性提供自定义扩展功能,由「规则配置 + 待注入代码」组成,通过编译时插桩完成代码注入,无需修改原始代码。以日志打印为例,步骤如下:
- 创建 hook 文件夹并编写
hook.go,定义sqlQueryOnEnter函数打印 SQL 语句和参数 - 编写
conf.json配置规则,指定目标函数为database/sql::(*DB).Query() - 使用
instgo set --rule=./conf.json加载规则,然后instgo go build .编译
记录 Span 的方式类似,在 hook 代码中使用 OpenTelemetry API 创建自定义 Span 并设置属性,然后配置规则指向目标业务函数。此外还支持流量回放场景,通过 hook net/http::(*Transport).RoundTrip() 函数记录 HTTP 请求的 header 和 body,将这些数据存储后用于开发和测试阶段的回归验证。这一功能的核心优势是非项目开发人员也可以在不修改源码的情况下完成功能注入。