概述
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官方推出的版本,文檔和坑相對較多,需要摸索解決