Skip to content

Commit

Permalink
Merge pull request #406 from askuy/feature/otel20241231
Browse files Browse the repository at this point in the history
optimize otel
  • Loading branch information
askuy authored Dec 31, 2024
2 parents c4e3af6 + b4abb1a commit 6e6304f
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 59 deletions.
45 changes: 19 additions & 26 deletions core/etrace/compatible.go
Original file line number Diff line number Diff line change
@@ -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 ""
//}
50 changes: 21 additions & 29 deletions core/etrace/compatible_test.go
Original file line number Diff line number Diff line change
@@ -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])
//}
13 changes: 12 additions & 1 deletion core/etrace/otel/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion server/egin/interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()),
Expand Down
4 changes: 2 additions & 2 deletions server/egrpc/interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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),
Expand Down

0 comments on commit 6e6304f

Please sign in to comment.