From 8706e71a2779f4cd3095377f0df7fad7cff57f70 Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Wed, 12 Mar 2025 17:49:26 +0000 Subject: [PATCH 1/2] Refactor: Use TraceOptions TextMapPropagator --- stats/opentelemetry/client_tracing.go | 10 ++++++---- stats/opentelemetry/e2e_test.go | 3 --- stats/opentelemetry/server_tracing.go | 6 +++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/stats/opentelemetry/client_tracing.go b/stats/opentelemetry/client_tracing.go index 075f401588a1..9273283c8e37 100644 --- a/stats/opentelemetry/client_tracing.go +++ b/stats/opentelemetry/client_tracing.go @@ -20,11 +20,13 @@ import ( "context" "strings" - "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" + "google.golang.org/grpc" otelinternaltracing "google.golang.org/grpc/stats/opentelemetry/internal/tracing" ) +const traceName = "grpc-go" + // traceTagRPC populates provided context with a new span using the // TextMapPropagator supplied in trace options and internal itracing.carrier. // It creates a new outgoing carrier which serializes information about this @@ -32,10 +34,10 @@ import ( // options. if TextMapPropagator is not provided, it returns the context as is. func (h *clientStatsHandler) traceTagRPC(ctx context.Context, ai *attemptInfo) (context.Context, *attemptInfo) { mn := "Attempt." + strings.Replace(ai.method, "/", ".", -1) - tracer := otel.Tracer("grpc-open-telemetry") + tracer := h.options.TraceOptions.TracerProvider.Tracer(traceName, trace.WithInstrumentationVersion(grpc.Version)) ctx, span := tracer.Start(ctx, mn) carrier := otelinternaltracing.NewOutgoingCarrier(ctx) - otel.GetTextMapPropagator().Inject(ctx, carrier) + h.options.TraceOptions.TextMapPropagator.Inject(ctx, carrier) ai.traceSpan = span return carrier.Context(), ai } @@ -48,7 +50,7 @@ func (h *clientStatsHandler) createCallTraceSpan(ctx context.Context, method str return ctx, nil } mn := strings.Replace(removeLeadingSlash(method), "/", ".", -1) - tracer := otel.Tracer("grpc-open-telemetry") + tracer := h.options.TraceOptions.TracerProvider.Tracer(traceName, trace.WithInstrumentationVersion(grpc.Version)) ctx, span := tracer.Start(ctx, mn, trace.WithSpanKind(trace.SpanKindClient)) return ctx, span } diff --git a/stats/opentelemetry/e2e_test.go b/stats/opentelemetry/e2e_test.go index 9d03680dcc64..970e07cb7e9f 100644 --- a/stats/opentelemetry/e2e_test.go +++ b/stats/opentelemetry/e2e_test.go @@ -24,7 +24,6 @@ import ( "testing" "time" - "go.opentelemetry.io/otel" otelcodes "go.opentelemetry.io/otel/codes" oteltrace "go.opentelemetry.io/otel/trace" @@ -110,8 +109,6 @@ func defaultTraceOptions(_ *testing.T) (*experimental.TraceOptions, *tracetest.I spanProcessor := trace.NewSimpleSpanProcessor(spanExporter) tracerProvider := trace.NewTracerProvider(trace.WithSpanProcessor(spanProcessor)) textMapPropagator := propagation.NewCompositeTextMapPropagator(opentelemetry.GRPCTraceBinPropagator{}) - otel.SetTextMapPropagator(textMapPropagator) - otel.SetTracerProvider(tracerProvider) traceOptions := &experimental.TraceOptions{ TracerProvider: tracerProvider, TextMapPropagator: textMapPropagator, diff --git a/stats/opentelemetry/server_tracing.go b/stats/opentelemetry/server_tracing.go index c55e03dcaab6..54d8bd7de032 100644 --- a/stats/opentelemetry/server_tracing.go +++ b/stats/opentelemetry/server_tracing.go @@ -20,8 +20,8 @@ import ( "context" "strings" - "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" + "google.golang.org/grpc" otelinternaltracing "google.golang.org/grpc/stats/opentelemetry/internal/tracing" ) @@ -35,8 +35,8 @@ import ( func (h *serverStatsHandler) traceTagRPC(ctx context.Context, ai *attemptInfo) (context.Context, *attemptInfo) { mn := strings.Replace(ai.method, "/", ".", -1) var span trace.Span - tracer := otel.Tracer("grpc-open-telemetry") - ctx = otel.GetTextMapPropagator().Extract(ctx, otelinternaltracing.NewIncomingCarrier(ctx)) + tracer := h.options.TraceOptions.TracerProvider.Tracer(traceName, trace.WithInstrumentationVersion(grpc.Version)) + ctx = h.options.TraceOptions.TextMapPropagator.Extract(ctx, otelinternaltracing.NewIncomingCarrier(ctx)) // If the context.Context provided in `ctx` to tracer.Start(), contains a // span then the newly-created Span will be a child of that span, // otherwise it will be a root span. From cb9039574a8cbd641dedc77f6cecd75e253619ce Mon Sep 17 00:00:00 2001 From: Vinothkumar Date: Wed, 12 Mar 2025 18:37:25 +0000 Subject: [PATCH 2/2] small tweaks --- stats/opentelemetry/client_tracing.go | 6 +++--- stats/opentelemetry/server_tracing.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/stats/opentelemetry/client_tracing.go b/stats/opentelemetry/client_tracing.go index 9273283c8e37..2cc974b56cd0 100644 --- a/stats/opentelemetry/client_tracing.go +++ b/stats/opentelemetry/client_tracing.go @@ -25,7 +25,7 @@ import ( otelinternaltracing "google.golang.org/grpc/stats/opentelemetry/internal/tracing" ) -const traceName = "grpc-go" +const tracerName = "grpc-go" // traceTagRPC populates provided context with a new span using the // TextMapPropagator supplied in trace options and internal itracing.carrier. @@ -34,7 +34,7 @@ const traceName = "grpc-go" // options. if TextMapPropagator is not provided, it returns the context as is. func (h *clientStatsHandler) traceTagRPC(ctx context.Context, ai *attemptInfo) (context.Context, *attemptInfo) { mn := "Attempt." + strings.Replace(ai.method, "/", ".", -1) - tracer := h.options.TraceOptions.TracerProvider.Tracer(traceName, trace.WithInstrumentationVersion(grpc.Version)) + tracer := h.options.TraceOptions.TracerProvider.Tracer(tracerName, trace.WithInstrumentationVersion(grpc.Version)) ctx, span := tracer.Start(ctx, mn) carrier := otelinternaltracing.NewOutgoingCarrier(ctx) h.options.TraceOptions.TextMapPropagator.Inject(ctx, carrier) @@ -50,7 +50,7 @@ func (h *clientStatsHandler) createCallTraceSpan(ctx context.Context, method str return ctx, nil } mn := strings.Replace(removeLeadingSlash(method), "/", ".", -1) - tracer := h.options.TraceOptions.TracerProvider.Tracer(traceName, trace.WithInstrumentationVersion(grpc.Version)) + tracer := h.options.TraceOptions.TracerProvider.Tracer(tracerName, trace.WithInstrumentationVersion(grpc.Version)) ctx, span := tracer.Start(ctx, mn, trace.WithSpanKind(trace.SpanKindClient)) return ctx, span } diff --git a/stats/opentelemetry/server_tracing.go b/stats/opentelemetry/server_tracing.go index 54d8bd7de032..f04d28c52ec3 100644 --- a/stats/opentelemetry/server_tracing.go +++ b/stats/opentelemetry/server_tracing.go @@ -35,7 +35,7 @@ import ( func (h *serverStatsHandler) traceTagRPC(ctx context.Context, ai *attemptInfo) (context.Context, *attemptInfo) { mn := strings.Replace(ai.method, "/", ".", -1) var span trace.Span - tracer := h.options.TraceOptions.TracerProvider.Tracer(traceName, trace.WithInstrumentationVersion(grpc.Version)) + tracer := h.options.TraceOptions.TracerProvider.Tracer(tracerName, trace.WithInstrumentationVersion(grpc.Version)) ctx = h.options.TraceOptions.TextMapPropagator.Extract(ctx, otelinternaltracing.NewIncomingCarrier(ctx)) // If the context.Context provided in `ctx` to tracer.Start(), contains a // span then the newly-created Span will be a child of that span,