亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go GRPC opentracing 中的子跨度

Go GRPC opentracing 中的子跨度

Go
飲歌長嘯 2022-06-13 15:26:07
我正在使用 Jaeger 在我們的微服務中添加開放跟蹤。我有兩臺 GRPC 服務器和一臺 REST 服務器。GRPC 服務器和所有 rest-grpc 請求都在一個父跨度下跟蹤,默認的 opentracing 非常好。使用 Java GRPC,我可以添加自定義子跨度,并且它以完美的層次結構出現在 Jaeger UI 中。但是當我嘗試在 Go Lang 中添加相同的自定義子時,它不會添加到調用 GRPC 服務的父 Rest Service 跨度中。下面是golang代碼"github.com/opentracing/opentracing-go"cfg := jaegerConfig.Configuration{    ServiceName: t.Name,}tracer, closer, err := cfg.NewTracer(    jaegerConfig.Logger(jLogger),    jaegerConfig.Metrics(jMetricsFactory),)gRPCServer := grpc.NewServer(        grpc.UnaryInterceptor(            otgrpc.OpenTracingServerInterceptor(tracer)),        grpc.StreamInterceptor(            otgrpc.OpenTracingStreamServerInterceptor(tracer)))var span = tracer.StartSpan("Test Span")span.SetTag("one", "value")span.Finish()我不想進行整個 http 標頭提取,因為 GRPC 庫已經處理好了。即使使用 java GRPC,我也不進行任何提取。我在 opentracing 中使用的范圍管理器不適用于 go lang opentracing。
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

您可以StartSpanFromContext在 gRPC 處理程序中嘗試使用 , :


    // import "github.com/opentracing/opentracing-go"

    

    span, _ := opentracing.StartSpanFromContext(ctx, "some_child_span")

    defer span.Finish()


    span.SetTag("foo", "bar")

正如文檔otgrpc.OpenTracingServerInterceptor所說:


[...] 服務器 Span 將嵌入到 context.Context 中,供特定于應用程序的 gRPC 處理程序訪問。


如果我們看一下函數實現:


// import "github.com/opentracing/opentracing-go"


func OpenTracingServerInterceptor(tracer opentracing.Tracer, optFuncs ...Option) grpc.UnaryServerInterceptor {

        // ... a lot omitted

        ctx = opentracing.ContextWithSpan(ctx, serverSpan)

        // ...

        resp, err = handler(ctx, req) // your gRPC handler

        // ...   

}



編輯:鑒于上述情況,您可能可以省略此代碼:


var span = tracer.StartSpan("Test Span")

span.SetTag("one", "value")

span.Finish()


查看完整回答
反對 回復 2022-06-13
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號