From 9f671a59aa71bb231ea7c3d7a279c522b6c374e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Rold=C3=A1n=20Betancort?= Date: Fri, 1 Mar 2024 13:42:30 +0000 Subject: [PATCH] adds OpenTelemetry TraceID to logs so we can correlate logs, traces and metric exemplars --- pkg/cmd/server/defaults.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/pkg/cmd/server/defaults.go b/pkg/cmd/server/defaults.go index 3d25fda5f2..1212fcd84e 100644 --- a/pkg/cmd/server/defaults.go +++ b/pkg/cmd/server/defaults.go @@ -125,6 +125,12 @@ var defaultGRPCLogOptions = []grpclog.Option{ grpclog.WithDurationField(func(duration time.Duration) grpclog.Fields { return grpclog.Fields{"grpc.time_ms", duration.Milliseconds()} }), + grpclog.WithFieldsFromContext(func(ctx context.Context) grpclog.Fields { + if span := trace.SpanContextFromContext(ctx); span.IsSampled() { + return grpclog.Fields{"traceID", span.TraceID().String()} + } + return nil + }), } const ( @@ -176,13 +182,14 @@ func DefaultUnaryMiddleware(opts MiddlewareOption) (*MiddlewareChain[grpc.UnaryS Done(), NewUnaryMiddleware(). - WithName(DefaultMiddlewareGRPCLog). - WithInterceptor(grpclog.UnaryServerInterceptor(InterceptorLogger(opts.logger), determineEventsToLog(opts)...)). + WithName(DefaultMiddlewareOTelGRPC). + WithInterceptor(otelgrpc.UnaryServerInterceptor()). // nolint: staticcheck Done(), NewUnaryMiddleware(). - WithName(DefaultMiddlewareOTelGRPC). - WithInterceptor(otelgrpc.UnaryServerInterceptor()). // nolint: staticcheck + WithName(DefaultMiddlewareGRPCLog). + WithInterceptor(grpclog.UnaryServerInterceptor(InterceptorLogger(opts.logger), determineEventsToLog(opts)...)). + EnsureAlreadyExecuted(DefaultMiddlewareOTelGRPC). // dependency so that OTel traceID is injected in logs Done(), NewUnaryMiddleware(). @@ -242,13 +249,14 @@ func DefaultStreamingMiddleware(opts MiddlewareOption) (*MiddlewareChain[grpc.St Done(), NewStreamMiddleware(). - WithName(DefaultMiddlewareGRPCLog). - WithInterceptor(grpclog.StreamServerInterceptor(InterceptorLogger(opts.logger), determineEventsToLog(opts)...)). + WithName(DefaultMiddlewareOTelGRPC). + WithInterceptor(otelgrpc.StreamServerInterceptor()). // nolint: staticcheck Done(), NewStreamMiddleware(). - WithName(DefaultMiddlewareOTelGRPC). - WithInterceptor(otelgrpc.StreamServerInterceptor()). // nolint: staticcheck + WithName(DefaultMiddlewareGRPCLog). + WithInterceptor(grpclog.StreamServerInterceptor(InterceptorLogger(opts.logger), determineEventsToLog(opts)...)). + EnsureInterceptorAlreadyExecuted(DefaultMiddlewareOTelGRPC). // dependency so that OTel traceID is injected in logs Done(), NewStreamMiddleware().