我的 Go gRPC 服务器配备了
谷歌追踪跨度导出器:
import texporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace" ... gcp, err := texporter.NewExporter() ... tracer := trace.NewTracerProvider(trace.WithSyncer(traceExporter), trace.WithSampler(trace.AlwaysSample())) otel.SetTracerProvider(tracer)
otelgrpc 拦截器在 gRPC 服务器上注册。
unaryInterceptors := grpc_middleware.WithUnaryServerChain( otelgrpc.UnaryServerInterceptor(), ) streamInterceptors := grpc_middleware.WithStreamServerChain( otelgrpc.StreamServerInterceptor(), )
现在我正在尝试在 RPC 实现中创建一个跟踪跨度,以便我可以为该方法创建子跨度,例如:
func (s *srv) Test(ctx context.Context, req *pb.Request) (*pb.TestResponse, error) {
// create a span here
span1 := [??????].Start()
doWork1()
span1.End()
span2 := [??????].Start()
doWork2()
span2.End()
...
}
然而,从 OpenTelemetry 文档中却非常不清楚如何做到这一点。
我得到的最接近的是otel.GetTracerProvider().Tracer("some string here???")
提供一个Start(ctx)(ctx,Span)
. 但是我不清楚在这里提供什么字符串(我的出口商没有像文档所示的网址),这似乎很不方便。
我在想otelgrpc.SpanFromCtx(ctx)
某处有某种方法可以拉动示踪剂+用我没有找到的 rpc ctx 创建一个跨度。遗憾的是,OT+gRPC+Go 上的文档非常缺乏。