jaeger修改

This commit is contained in:
2026-06-23 16:51:39 +08:00
parent 791c9905df
commit 7e51069595
2 changed files with 33 additions and 2 deletions

View File

@@ -11,9 +11,12 @@ import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/net/gtrace"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/embedded"
"go.opentelemetry.io/otel/trace/noop"
)
var (
@@ -41,6 +44,10 @@ func Init() {
return
}
ShutDown = shutdown
// 包装 TracerProvider只保留 HTTP Server 追踪,屏蔽 DB/Redis/Client 等内部 span
wrapTracerProvider()
g.Log().Infof(ctx, "✅ Jaeger 初始化成功: %s", jaegerAgent)
})
}
@@ -50,6 +57,32 @@ func init() {
Init()
}
// filterTracerProvider 只放行指定 instrument 的 span其余返回 noop tracer
type filterTracerProvider struct {
embedded.TracerProvider
real trace.TracerProvider
noop trace.TracerProvider
allowed map[string]bool
}
func (f *filterTracerProvider) Tracer(instrumentName string, opts ...trace.TracerOption) trace.Tracer {
if f.allowed[instrumentName] {
return f.real.Tracer(instrumentName, opts...)
}
return f.noop.Tracer(instrumentName, opts...)
}
// wrapTracerProvider 包装全局 TracerProvider只保留 HTTP Server 追踪
func wrapTracerProvider() {
otel.SetTracerProvider(&filterTracerProvider{
real: otel.GetTracerProvider(),
noop: noop.NewTracerProvider(),
allowed: map[string]bool{
"github.com/gogf/gf/v2/net/ghttp.Server": true,
},
})
}
// NewSpan 创建新的链路追踪 Span
// spanName: Span 名称,用于在 Jaeger UI 中标识
// 返回带有 Span 的 context 和 Span 对象,调用方需 defer span.End()