SkyWalking系列之skywalking go agent 使用问题
Posted 小小一刀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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服务器返回错误信息,找不对对应的方法,执行流程:
方法执行流程:
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官方推出的版本,文档和坑相对较多,需要摸索解决
以上是关于SkyWalking系列之skywalking go agent 使用问题的主要内容,如果未能解决你的问题,请参考以下文章
SkyWalking系列之skywalking go agent 使用问题
SkyWalking系列之skywalking go agent 使用问题
SkyWalking系列之skywalking go agent配置使用
SkyWalking系列之skywalking go agent配置使用