SkyWalking系列之skywalking go agent 使用问题

概述

SkyWalking 是一个基于 OpenTracing 规范的、开源的 APM 系统,它是专门为微服务架构以及云原生架构而设计的,支持多种语言的客户端,部署简单,快速,目前在业界使用较为广泛。具体的skywalking安装部署参照上一篇博文:SkyWalking系列之SkyWalking搭建。
Skywalking go agent配置使用参照:SkyWalking系列之skywalking go agent配置使用
本文主要解决go agent使用过程中的问题:

Method not found: skywalking.v3.ManagementService/reports Instance
Properties

环境搭建

golang 1.15.10
gin v1.7.2
go2sky v1.0.0
go2sky-plugins v0.6.0
go2sky-plugins/gin/v3 v3.0.0
skywalking: v8.1.0/v8.5.0

问题描述和解决

集成go2sky 到gin框架后,启动后发现报错,错误提示:

Method not found: skywalking.v3.ManagementService/reports Instance
Properties

分析发现是gpc请求访问skywalking服务器报错引发,由skywalking服务器返回错误信息,找不对对应的方法,执行流程:
SkyWalking系列之skywalking go agent 使用问题_第1张图片

方法执行流程:
go2sky.NewTracer ->
reporter.Boot->
reporter.check->
reporter.reportInstanceProperties->
managementClient.ReportInstanceProperties
流程描述:创建Tracer,校验过程需要调用ReportInstanceProperties方法,给skywalking服务器上报实例信息,使用rpc请求的方式。
managementClient.ReportInstanceProperties方法:

func (c *managementServiceClient) ReportInstanceProperties(ctx context.Context, in *InstanceProperties, opts ...grpc.CallOption) (*v3.Commands, error) {
	out := new(v3.Commands)
	err := c.cc.Invoke(ctx, "/skywalking.v3.ManagementService/reportInstanceProperties", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

通过问题描述发现,应该是skywalking服务器,没有这个对应的方法,我们去v8.1.0的源码里去一探究竟

    public void reportInstanceProperties(org.apache.skywalking.apm.network.management.v3.InstanceProperties request,
        io.grpc.stub.StreamObserver<org.apache.skywalking.apm.network.common.v3.Commands> responseObserver) {
      asyncUnimplementedUnaryCall(getReportInstancePropertiesMethod(), responseObserver);
    }

同时看到通过protobuf协议生成的代码,服务名称为:ManagementService,我们在go client中调用的是:skywalking.v3.ManagementService,应该是我们使用的client版本跟skywalking不匹配导致的
SkyWalking系列之skywalking go agent 使用问题_第2张图片
这里我们将skywalking服务升级为v8.5.0的版本,重新启动gin 服务,发现可以正常运行,可以上报链路的数据,我们翻看v8.5.0的源码看下,我们到底错在哪里:
SkyWalking系列之skywalking go agent 使用问题_第3张图片
可以清晰的看到 SERVICE_NAME = "skywalking.v3.ManagementService"

问题定位了,Method not found: skywalking.v3.ManagementService/reports Instance Properties报错由go agent版本跟skywalking版本不配做,导致grpc请求失败引起,升级skywalking版本到对应的版本,解决该问题。

后记

使用go agent client需要注意,不是skywalking官方推出的版本,文档和坑相对较多,需要摸索解决

你可能感兴趣的:(分布式链路,skywalking,go)