mirror of https://github.com/grafana/grafana.git
				
				
				
			grpcserver: Extract existing span context from grpc request metadata prior to span creation (#77833)
Extract existing span context from grpc metadata
This commit is contained in:
		
							parent
							
								
									5bc4f56c79
								
							
						
					
					
						commit
						36dba7584d
					
				|  | @ -3,7 +3,10 @@ package interceptors | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 
 | 
 | ||||||
|  | 	"go.opentelemetry.io/otel" | ||||||
|  | 	"go.opentelemetry.io/otel/propagation" | ||||||
| 	"google.golang.org/grpc" | 	"google.golang.org/grpc" | ||||||
|  | 	"google.golang.org/grpc/metadata" | ||||||
| 
 | 
 | ||||||
| 	"github.com/grafana/grafana/pkg/infra/tracing" | 	"github.com/grafana/grafana/pkg/infra/tracing" | ||||||
| ) | ) | ||||||
|  | @ -17,6 +20,10 @@ func TracingUnaryInterceptor(tracer tracing.Tracer) grpc.UnaryServerInterceptor | ||||||
| 		info *grpc.UnaryServerInfo, | 		info *grpc.UnaryServerInfo, | ||||||
| 		handler grpc.UnaryHandler, | 		handler grpc.UnaryHandler, | ||||||
| 	) (resp any, err error) { | 	) (resp any, err error) { | ||||||
|  | 		if md, ok := metadata.FromIncomingContext(ctx); ok { | ||||||
|  | 			ctx = otel.GetTextMapPropagator().Extract(ctx, propagation.HeaderCarrier(md)) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		ctx, span := tracer.Start(ctx, tracingPrefix+info.FullMethod) | 		ctx, span := tracer.Start(ctx, tracingPrefix+info.FullMethod) | ||||||
| 		defer span.End() | 		defer span.End() | ||||||
| 		resp, err = handler(ctx, req) | 		resp, err = handler(ctx, req) | ||||||
|  | @ -26,7 +33,11 @@ func TracingUnaryInterceptor(tracer tracing.Tracer) grpc.UnaryServerInterceptor | ||||||
| 
 | 
 | ||||||
| func TracingStreamInterceptor(tracer tracing.Tracer) grpc.StreamServerInterceptor { | func TracingStreamInterceptor(tracer tracing.Tracer) grpc.StreamServerInterceptor { | ||||||
| 	return func(srv any, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { | 	return func(srv any, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { | ||||||
| 		ctx, span := tracer.Start(stream.Context(), tracingPrefix+info.FullMethod) | 		ctx := stream.Context() | ||||||
|  | 		if md, ok := metadata.FromIncomingContext(ctx); ok { | ||||||
|  | 			ctx = otel.GetTextMapPropagator().Extract(ctx, propagation.HeaderCarrier(md)) | ||||||
|  | 		} | ||||||
|  | 		ctx, span := tracer.Start(ctx, tracingPrefix+info.FullMethod) | ||||||
| 		defer span.End() | 		defer span.End() | ||||||
| 		tracingStream := &tracingServerStream{ | 		tracingStream := &tracingServerStream{ | ||||||
| 			ServerStream: stream, | 			ServerStream: stream, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue