Go Agent 常见问题说明

本文介绍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编译即可。

image.png

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

image.png

  • 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分钟等待资源初始化成功。

  • 如果暂停监控开关被开启,则无法上报数据,请在应用设置查看。

image.png

  • 确认探针管理是否有这个应用的实例数据,状态是否正常。

调用链分析没有数据

先查看应用的trace 采样率是多少,默认10%,如果看不到,可能是因为请求太少没有采集到,可以先调整采样率看下是否有数据。

image.png

确认go mod中使用的SDK是否支持

ARMS应用监控支持的Go组件和框架

查看网络是否联通

Golang应用监控网络配置

查看Agent监控日志是否有报错

在二进制运行目录存在arms_go_agent.log日志,查看是否有上报数据错误日志。

日志Trace关联

调用链分析页面日志无法跳转

确认是否在应用设置-应用日志关联设置,开关是否打开,是否正确配置sls信息。

image.png

日志中没有traceId、SpanId

  1. 查看使用的框架是否在以下列表中:

    组件

    仓库地址

    低版本

    高版本

    Gokit Log

    https://github.com/go-kit/log

    v0.1.0

    v0.2.1

    Zerolog

    https://github.com/rs/zerolog

    v1.10.0

    v1.34.0

    Zap

    https://github.com/uber-go/zap

    v1.13.0

    v1.27.0

    Logrus

    https://github.com/sirupsen/logrus

    v1.5.0

    无限制

    Log

    https://pkg.go.dev/log

    v1.21

    无限制

    Slog

    https://pkg.go.dev/log/slog

    v1.21

    无限制

    go-zero logx

    https://github.com/zeromicro/go-zero/tree/master/core/logx

    v1.6.5

    无限制

    Kratos log

    https://github.com/go-kratos/kratos/blob/main/middleware/logging

    v2.1.2

    v2.4.0

  2. 使用自定义的format输出日志可能导致key冲突,确认业务代码中是否也加了trace_id、span_id,如果有,可以将arms 注入的trace_id、span_id key 修改为一个唯一key,如下修改为arms_trace_id、arms_span_id。

    image.png

说明

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