优化jaeger代码,使用otlp规范
This commit is contained in:
15
http/http.go
15
http/http.go
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
_ "gitee.com/red-future---jilin-g/common/consul"
|
||||||
"gitee.com/red-future---jilin-g/common/jaeger"
|
"gitee.com/red-future---jilin-g/common/jaeger"
|
||||||
"gitee.com/red-future---jilin-g/common/utils"
|
"gitee.com/red-future---jilin-g/common/utils"
|
||||||
"github.com/gogf/gf/contrib/registry/consul/v2"
|
"github.com/gogf/gf/contrib/registry/consul/v2"
|
||||||
@@ -31,16 +32,16 @@ type Page struct {
|
|||||||
Total int //总页数
|
Total int //总页数
|
||||||
}
|
}
|
||||||
|
|
||||||
var HttpServer = g.Server()
|
var Httpserver = g.Server()
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
//s.Use(common.Cors) //中间件验证
|
//s.Use(common.Cors) //中间件验证
|
||||||
//s.EnablePProf() //启用性能分析
|
//s.EnablePProf() //启用性能分析
|
||||||
HttpServer.SetOpenApiPath("/api.json")
|
Httpserver.SetOpenApiPath("/api.json")
|
||||||
HttpServer.SetSwaggerPath("/swagger") //api文档访问路径
|
Httpserver.SetSwaggerPath("/swagger") //api文档访问路径
|
||||||
HttpServer.SetDumpRouterMap(true) //关闭打印路由注册信息
|
Httpserver.SetDumpRouterMap(true) //关闭打印路由注册信息
|
||||||
HttpServer.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse, jaeger.NewTracer) //使用默认http返回结构
|
Httpserver.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse, jaeger.NewTracer) //使用默认http返回结构
|
||||||
go HttpServer.Run()
|
go Httpserver.Run()
|
||||||
}
|
}
|
||||||
func RouteRegister(controllers []interface{}) {
|
func RouteRegister(controllers []interface{}) {
|
||||||
re := regexp.MustCompile("[A-Z]")
|
re := regexp.MustCompile("[A-Z]")
|
||||||
@@ -49,7 +50,7 @@ func RouteRegister(controllers []interface{}) {
|
|||||||
convertedStr := re.ReplaceAllStringFunc(sName, func(s string) string {
|
convertedStr := re.ReplaceAllStringFunc(sName, func(s string) string {
|
||||||
return fmt.Sprintf("/%s", strings.ToLower(s))
|
return fmt.Sprintf("/%s", strings.ToLower(s))
|
||||||
})
|
})
|
||||||
HttpServer.Group(convertedStr, func(group *ghttp.RouterGroup) {
|
Httpserver.Group(convertedStr, func(group *ghttp.RouterGroup) {
|
||||||
group.Bind(t)
|
group.Bind(t)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,55 +3,36 @@ package jaeger
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"github.com/gogf/gf/contrib/trace/otlphttp/v2"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/net/ghttp"
|
"github.com/gogf/gf/v2/net/ghttp"
|
||||||
"github.com/gogf/gf/v2/util/gconv"
|
"github.com/gogf/gf/v2/net/gtrace"
|
||||||
"go.opentelemetry.io/otel"
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"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"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Tp = new(trace.TracerProvider)
|
var ShutDown func(ctx context.Context)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
jaegerAgent, err := g.Cfg().Get(context.Background(), "jaeger.addr")
|
jaegerAgent, err := g.Cfg().Get(context.Background(), "jaeger.addr")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
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")
|
serverName, err := g.Cfg().Get(context.Background(), "server.Name")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
// 创建一个 TracerProvider,并将 Jaeger exporter 设置为其处理器
|
ShutDown, err = otlphttp.Init(serverName.String(), jaegerAgent.String(), "/v1/traces")
|
||||||
Tp = trace.NewTracerProvider(
|
if err != nil {
|
||||||
// 使用 BatchSpanProcessor 可以提高性能,它会批量发送 span
|
panic(err)
|
||||||
trace.WithBatcher(exp),
|
}
|
||||||
// 设置资源属性,这些属性会附加到所有导出的 span 上
|
|
||||||
trace.WithResource(resource.NewWithAttributes(
|
|
||||||
semconv.SchemaURL,
|
|
||||||
semconv.ServiceName(gconv.String(serverName)), // 服务名称,在 Jaeger UI 中会显示
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
// 将 TracerProvider 设置为全局,方便在应用的任何地方通过 otel.Tracer() 获取
|
|
||||||
otel.SetTracerProvider(Tp)
|
|
||||||
}
|
}
|
||||||
func NewTracer(r *ghttp.Request) {
|
func NewTracer(r *ghttp.Request) {
|
||||||
// 从传入的上下文中获取 Tracer,或者直接使用全局的
|
_, span := gtrace.NewSpan(r.Context(), r.GetServeHandler().GetMetaTag("summary"))
|
||||||
tracer := otel.Tracer(r.GetServeHandler().GetMetaTag("summary"))
|
defer span.End()
|
||||||
_, span := tracer.Start(r.Context(), r.GetServeHandler().GetMetaTag("summary"))
|
|
||||||
defer span.End() // 非常重要:确保 span 在函数结束时被关闭
|
|
||||||
span.SetAttributes(attribute.String("request", getParams(r)))
|
span.SetAttributes(attribute.String("request", getParams(r)))
|
||||||
r.Middleware.Next()
|
r.Middleware.Next()
|
||||||
span.SetAttributes(attribute.String("response", r.Response.BufferString()))
|
span.SetAttributes(attribute.String("response", r.Response.BufferString()))
|
||||||
//span.AddEvent("Saying hello is done")
|
|
||||||
}
|
}
|
||||||
func getParams(r *ghttp.Request) string {
|
func getParams(r *ghttp.Request) string {
|
||||||
params := map[string]interface{}{}
|
params := map[string]interface{}{}
|
||||||
|
|||||||
Reference in New Issue
Block a user