SkyWalking系列之skywalking 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服务器返回错误信息,找不对对应的方法,执行流程:

方法执行流程: 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服务升级为v8.5.0的版本,重新启动gin 服务,发现可以正常运行,可以上报链路的数据,我们翻看v8.5.0的源码看下,我们到底错在哪里: 可以清晰的看到 SERVICE_NAME = "skywalking.v3.ManagementService"

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

后记

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

经验分享 程序员 微信小程序 职场和发展