From 15a5311288e2409a115989bf9c016d4f259d163a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Wed, 26 Nov 2025 10:38:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96jaeger=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8otlp=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http/http.go | 15 ++++++++------- jaeger/jaeger.go | 37 +++++++++---------------------------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/http/http.go b/http/http.go index 05e8dac..6b82dec 100644 --- a/http/http.go +++ b/http/http.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + _ "gitee.com/red-future---jilin-g/common/consul" "gitee.com/red-future---jilin-g/common/jaeger" "gitee.com/red-future---jilin-g/common/utils" "github.com/gogf/gf/contrib/registry/consul/v2" @@ -31,16 +32,16 @@ type Page struct { Total int //总页数 } -var HttpServer = g.Server() +var Httpserver = g.Server() func init() { //s.Use(common.Cors) //中间件验证 //s.EnablePProf() //启用性能分析 - HttpServer.SetOpenApiPath("/api.json") - HttpServer.SetSwaggerPath("/swagger") //api文档访问路径 - HttpServer.SetDumpRouterMap(true) //关闭打印路由注册信息 - HttpServer.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse, jaeger.NewTracer) //使用默认http返回结构 - go HttpServer.Run() + Httpserver.SetOpenApiPath("/api.json") + Httpserver.SetSwaggerPath("/swagger") //api文档访问路径 + Httpserver.SetDumpRouterMap(true) //关闭打印路由注册信息 + Httpserver.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse, jaeger.NewTracer) //使用默认http返回结构 + go Httpserver.Run() } func RouteRegister(controllers []interface{}) { re := regexp.MustCompile("[A-Z]") @@ -49,7 +50,7 @@ func RouteRegister(controllers []interface{}) { convertedStr := re.ReplaceAllStringFunc(sName, func(s string) string { return fmt.Sprintf("/%s", strings.ToLower(s)) }) - HttpServer.Group(convertedStr, func(group *ghttp.RouterGroup) { + Httpserver.Group(convertedStr, func(group *ghttp.RouterGroup) { group.Bind(t) }) } diff --git a/jaeger/jaeger.go b/jaeger/jaeger.go index 4126d01..ea8fa94 100644 --- a/jaeger/jaeger.go +++ b/jaeger/jaeger.go @@ -3,55 +3,36 @@ package jaeger import ( "context" "encoding/json" + "github.com/gogf/gf/contrib/trace/otlphttp/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" - "github.com/gogf/gf/v2/util/gconv" - "go.opentelemetry.io/otel" + "github.com/gogf/gf/v2/net/gtrace" "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/exporters/jaeger" - "go.opentelemetry.io/otel/sdk/resource" - "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "strconv" ) -var Tp = new(trace.TracerProvider) +var ShutDown func(ctx context.Context) func init() { jaegerAgent, err := g.Cfg().Get(context.Background(), "jaeger.addr") if err != nil { panic(err) } - exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(gconv.String(jaegerAgent)))) - if err != nil { - panic(err) - } serverName, err := g.Cfg().Get(context.Background(), "server.Name") if err != nil { panic(err) } - // 创建一个 TracerProvider,并将 Jaeger exporter 设置为其处理器 - Tp = trace.NewTracerProvider( - // 使用 BatchSpanProcessor 可以提高性能,它会批量发送 span - trace.WithBatcher(exp), - // 设置资源属性,这些属性会附加到所有导出的 span 上 - trace.WithResource(resource.NewWithAttributes( - semconv.SchemaURL, - semconv.ServiceName(gconv.String(serverName)), // 服务名称,在 Jaeger UI 中会显示 - )), - ) - // 将 TracerProvider 设置为全局,方便在应用的任何地方通过 otel.Tracer() 获取 - otel.SetTracerProvider(Tp) + ShutDown, err = otlphttp.Init(serverName.String(), jaegerAgent.String(), "/v1/traces") + if err != nil { + panic(err) + } } func NewTracer(r *ghttp.Request) { - // 从传入的上下文中获取 Tracer,或者直接使用全局的 - tracer := otel.Tracer(r.GetServeHandler().GetMetaTag("summary")) - _, span := tracer.Start(r.Context(), r.GetServeHandler().GetMetaTag("summary")) - defer span.End() // 非常重要:确保 span 在函数结束时被关闭 + _, span := gtrace.NewSpan(r.Context(), r.GetServeHandler().GetMetaTag("summary")) + defer span.End() span.SetAttributes(attribute.String("request", getParams(r))) r.Middleware.Next() span.SetAttributes(attribute.String("response", r.Response.BufferString())) - //span.AddEvent("Saying hello is done") } func getParams(r *ghttp.Request) string { params := map[string]interface{}{}