天天看點

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 使用問題概述環境搭建問題描述和解決後記

方法執行流程:

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 使用問題概述環境搭建問題描述和解決後記

這裡我們将skywalking服務更新為v8.5.0的版本,重新啟動gin 服務,發現可以正常運作,可以上報鍊路的資料,我們翻看v8.5.0的源碼看下,我們到底錯在哪裡:

SkyWalking系列之skywalking go agent 使用問題概述環境搭建問題描述和解決後記

可以清晰的看到

SERVICE_NAME = "skywalking.v3.ManagementService"

問題定位了,

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

報錯由go agent版本跟skywalking版本不配做,導緻grpc請求失敗引起,更新skywalking版本到對應的版本,解決該問題。

後記

使用go agent client需要注意,不是skywalking官方推出的版本,文檔和坑相對較多,需要摸索解決