本文介绍Go Agent常见问题。
接入问题
instgo支持的版本?
Go版本1.18及以上。
编译时候是否一定要设置LicenseKey
不强制设置,设置LicenseKey是为了Instgo 接入时候能按版本规则下载对应Agent,否则就默认使用线上最新稳定版本。
是否支持vendor模式编译
注意在go build后添加 -mod=vendor。
是否支持go install 方式编译
支持,与go build相同,将instgo 添加到go install前编译,无需做其他修改。
instgo 是否支持打印的日志级别设置
instgo编译前加上环境变量ARMS_LOG_LEVEL即可,默认值是warn,可以设置为debug/info/warn/error。
支持哪些环境下编译
Linux/Mac/Windows (X86/ARM64)均支持。
编译报错
编译环境的go 版本是否大于等于go mod 中写的版本。
确认go build 是否会报错 。
go 1.18.4 编译会报错,go版本问题,使用1.18.5编译即可。

Mac/Windows下编译出现filename or extension is too long,这个报错是因为Mac/Windows下命令行的字符数量固定,换成Linux 编译即可。

vendor 编译报错,确认go mod 是否包含
google.golang.org/protobuf,没有的话在项目main.go文件的import中增加以下依赖:_ "google.golang.org/protobuf/proto" _ "google.golang.org/protobuf/runtime/protoimpl"
看不到数据问题
应用概览看不到数据
应用接入启动后看下是否有下列日志在标准输出,没有的话表示接入不成功(ECS下环境变量没有加、容器K8s下通过ack-onepilot 接入 label没有写或者位置不对,请按照接入文档处理)。
Load Aliyun Golang Agent version: xxx report to region: xxx第一次接入需要等待1-2分钟等待资源初始化成功。
如果暂停监控开关被开启,则无法上报数据,请在应用设置查看。

确认探针管理是否有这个应用的实例数据,状态是否正常。
调用链分析没有数据
先查看应用的trace 采样率是多少,默认10%,如果看不到,可能是因为请求太少没有采集到,可以先调整采样率看下是否有数据。

确认go mod中使用的SDK是否支持
查看网络是否联通
查看Agent监控日志是否有报错
在二进制运行目录存在arms_go_agent.log日志,查看是否有上报数据错误日志。
日志Trace关联
调用链分析页面日志无法跳转
确认是否在应用设置-应用日志关联设置,开关是否打开,是否正确配置sls信息。

日志中没有traceId、SpanId
查看使用的框架是否在以下列表中:
组件
仓库地址
低版本
高版本
Gokit Log
v0.1.0
v0.2.1
Zerolog
v1.10.0
v1.34.0
Zap
v1.13.0
v1.27.0
Logrus
v1.5.0
无限制
Log
v1.21
无限制
Slog
v1.21
无限制
go-zero logx
v1.6.5
无限制
Kratos log
https://github.com/go-kratos/kratos/blob/main/middleware/logging
v2.1.2
v2.4.0
使用自定义的format输出日志可能导致key冲突,确认业务代码中是否也加了trace_id、span_id,如果有,可以将arms 注入的trace_id、span_id key 修改为一个唯一key,如下修改为arms_trace_id、arms_span_id。

部分场景关联不到是因为获取不到trace的上下文,请确认打日志的位置在发起请求或者处理请求后。