From b4abb1aa48ef8a319501fbe2c475ddeaab72bcfd Mon Sep 17 00:00:00 2001 From: askuy Date: Tue, 31 Dec 2024 11:52:52 +0800 Subject: [PATCH] optimize otel --- core/etrace/compatible.go | 45 +++++++++++++----------------- core/etrace/compatible_test.go | 50 ++++++++++++++-------------------- core/etrace/otel/config.go | 13 ++++++++- server/egin/interceptor.go | 2 +- server/egrpc/interceptor.go | 4 +-- 5 files changed, 55 insertions(+), 59 deletions(-) diff --git a/core/etrace/compatible.go b/core/etrace/compatible.go index c2ecae0a..3294081c 100644 --- a/core/etrace/compatible.go +++ b/core/etrace/compatible.go @@ -1,38 +1,31 @@ package etrace -import ( - "net/http" - "strings" - - "google.golang.org/grpc/metadata" -) - // CompatibleExtractHTTPTraceID ... // Deprecated 该方法会在v1.2.0移除 -func CompatibleExtractHTTPTraceID(header http.Header) { - xTraceID := header.Get("X-Trace-Id") - if xTraceID != "" { - header.Set("Traceparent", CompatibleParse(xTraceID)) - } -} +//func CompatibleExtractHTTPTraceID(header http.Header) { +// xTraceID := header.Get("X-Trace-Id") +// if xTraceID != "" { +// header.Set("Traceparent", CompatibleParse(xTraceID)) +// } +//} // CompatibleExtractGrpcTraceID ... // Deprecated 该方法会在v1.2.0移除 -func CompatibleExtractGrpcTraceID(header metadata.MD) { - xTraceID := header.Get("x-trace-id") - if len(xTraceID) > 0 { - header.Set("Traceparent", CompatibleParse(xTraceID[0])) - } -} +//func CompatibleExtractGrpcTraceID(header metadata.MD) { +// xTraceID := header.Get("x-trace-id") +// if len(xTraceID) > 0 { +// header.Set("Traceparent", CompatibleParse(xTraceID[0])) +// } +//} // CompatibleParse ... // opentrace: 18af9db18a77f4b7:18af9db18a77f4b7:0000000000000000:0 // opentelemetry: 00-18af9db18a77f4b718af9db18a77f4b7-18af9db18a77f4b7-00 // https://www.w3.org/TR/trace-context/ -func CompatibleParse(traceID string) string { - traceArr := strings.Split(traceID, ":") - if len(traceArr) == 4 { - return "00-" + traceArr[0] + traceArr[1] + "-" + traceArr[1] + "-0" + traceArr[3] - } - return "" -} +//func CompatibleParse(traceID string) string { +// traceArr := strings.Split(traceID, ":") +// if len(traceArr) == 4 { +// return "00-" + traceArr[0] + traceArr[1] + "-" + traceArr[1] + "-0" + traceArr[3] +// } +// return "" +//} diff --git a/core/etrace/compatible_test.go b/core/etrace/compatible_test.go index b18018d7..2478ca31 100644 --- a/core/etrace/compatible_test.go +++ b/core/etrace/compatible_test.go @@ -1,31 +1,23 @@ package etrace -import ( - "net/http" - "testing" - - "github.com/stretchr/testify/assert" - "google.golang.org/grpc/metadata" -) - -func TestCompatibleExtractHTTPTraceID(t *testing.T) { - header := http.Header{} - header.Set("X-Trace-Id", "123:45:6789:abc") - CompatibleExtractHTTPTraceID(header) - tp := header.Get("Traceparent") - assert.Equal(t, "00-12345-45-0abc", tp) -} - -func TestCompatibleExtractGrpcTraceID(t *testing.T) { - md := metadata.Pairs("x-trace-id", "123:45:6789:abc") - CompatibleExtractGrpcTraceID(md) - exp := "00-12345-45-0abc" - traceparent := md.Get("Traceparent") - assert.Equal(t, exp, traceparent[0]) - - // 测试空的 "x-trace-id" - emptyMD := metadata.Pairs("x-trace-id", "") - CompatibleExtractGrpcTraceID(emptyMD) - tp := emptyMD.Get("Traceparent") - assert.Equal(t, "", tp[0]) -} +//func TestCompatibleExtractHTTPTraceID(t *testing.T) { +// header := http.Header{} +// header.Set("X-Trace-Id", "123:45:6789:abc") +// CompatibleExtractHTTPTraceID(header) +// tp := header.Get("Traceparent") +// assert.Equal(t, "00-12345-45-0abc", tp) +//} +// +//func TestCompatibleExtractGrpcTraceID(t *testing.T) { +// md := metadata.Pairs("x-trace-id", "123:45:6789:abc") +// CompatibleExtractGrpcTraceID(md) +// exp := "00-12345-45-0abc" +// traceparent := md.Get("Traceparent") +// assert.Equal(t, exp, traceparent[0]) +// +// // 测试空的 "x-trace-id" +// emptyMD := metadata.Pairs("x-trace-id", "") +// CompatibleExtractGrpcTraceID(emptyMD) +// tp := emptyMD.Get("Traceparent") +// assert.Equal(t, "", tp[0]) +//} diff --git a/core/etrace/otel/config.go b/core/etrace/otel/config.go index 07c43a21..0599ca1e 100644 --- a/core/etrace/otel/config.go +++ b/core/etrace/otel/config.go @@ -151,6 +151,15 @@ func (config *Config) buildJaegerTP() trace.TracerProvider { } func (config *Config) buildOtlpTP() trace.TracerProvider { + var tpOptions []tracesdk.TracerProviderOption + // 当开启了采集,才会设置采样率 + // traceExp 为 nil,不采集,但是目前来看在ego 1.2 版本,怀疑otel升级后,traceExp确实不为空,导致有采集行为,影响性能,所以需要关闭这个 + // 所以通过这个方式,屏蔽采集 + if config.Fraction == 0 { + tp := tracesdk.NewTracerProvider(tpOptions...) + return tp + } + // otlp exporter options := []otlptracegrpc.Option{ otlptracegrpc.WithHeaders(config.Otlp.Headers), // WithHeaders will send the provided headers with each gRPC requests. @@ -188,14 +197,16 @@ func (config *Config) buildOtlpTP() trace.TracerProvider { } // tp - tpOptions := []tracesdk.TracerProviderOption{ + tpOptions = []tracesdk.TracerProviderOption{ // Set the sampling rate based on the parent span to 100% tracesdk.WithSampler(tracesdk.ParentBased(tracesdk.TraceIDRatioBased(config.Fraction))), // WithSpanProcessor registers the SpanProcessor with a TracerProvider. + // traceExp 为 nil,不采集,但是目前来看在ego 1.2 版本,怀疑otel升级后,traceExp确实不为空,导致有采集行为,影响性能,所以需要关闭这个 tracesdk.WithSpanProcessor(tracesdk.NewBatchSpanProcessor(traceExp)), // Record information about this application in a Resource. tracesdk.WithResource(res), } + tpOptions = append(tpOptions, config.options...) tp := tracesdk.NewTracerProvider(tpOptions...) return tp diff --git a/server/egin/interceptor.go b/server/egin/interceptor.go index 8e046ce1..71a95f5e 100644 --- a/server/egin/interceptor.go +++ b/server/egin/interceptor.go @@ -356,7 +356,7 @@ func traceServerInterceptor() gin.HandlerFunc { } return func(c *gin.Context) { // 该方法会在v0.9.0移除 - etrace.CompatibleExtractHTTPTraceID(c.Request.Header) + //etrace.CompatibleExtractHTTPTraceID(c.Request.Header) ctx, span := tracer.Start(c.Request.Context(), c.Request.Method+"."+c.FullPath(), propagation.HeaderCarrier(c.Request.Header), trace.WithAttributes(attrs...)) span.SetAttributes( semconv.HTTPURLKey.String(c.Request.URL.String()), diff --git a/server/egrpc/interceptor.go b/server/egrpc/interceptor.go index 16e74777..7dc9704e 100644 --- a/server/egrpc/interceptor.go +++ b/server/egrpc/interceptor.go @@ -48,7 +48,7 @@ func traceUnaryServerInterceptor() grpc.UnaryServerInterceptor { md = metadata.New(nil) } // Deprecated 该方法会在v0.9.0移除 - etrace.CompatibleExtractGrpcTraceID(md) + //etrace.CompatibleExtractGrpcTraceID(md) ctx, span := tracer.Start(ctx, info.FullMethod, transport.GrpcHeaderCarrier(md), trace.WithAttributes(attrs...)) span.SetAttributes( semconv.RPCMethodKey.String(info.FullMethod), @@ -116,7 +116,7 @@ func traceStreamServerInterceptor() grpc.StreamServerInterceptor { md = metadata.New(nil) } // Deprecated 该方法会在v0.9.0移除 - etrace.CompatibleExtractGrpcTraceID(md) + //etrace.CompatibleExtractGrpcTraceID(md) ctx, span := tracer.Start(ss.Context(), info.FullMethod, transport.GrpcHeaderCarrier(md), trace.WithAttributes(attrs...)) span.SetAttributes( semconv.RPCMethodKey.String(info.FullMethod),