package module import ( "context" "git.hlsq.asia/mmorpg/service-common/config" "git.hlsq.asia/mmorpg/service-common/log" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.24.0" ) // Tracer 链路追踪模块 type Tracer struct { DefaultModule MetricCfg *config.MetricConfig ServiceName string tp *sdktrace.TracerProvider } func (m *Tracer) Init() error { exporter, err := otlptracegrpc.New( context.Background(), otlptracegrpc.WithInsecure(), otlptracegrpc.WithEndpoint(m.MetricCfg.Jaeger.Endpoint), ) if err != nil { return err } m.tp = sdktrace.NewTracerProvider( sdktrace.WithBatcher(exporter), sdktrace.WithResource(resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceNameKey.String(m.ServiceName), )), ) otel.SetTracerProvider(m.tp) otel.SetTextMapPropagator(propagation.TraceContext{}) return nil } func (m *Tracer) Stop() error { if m.tp != nil { if err := m.tp.Shutdown(context.Background()); err != nil { log.Errorf("stop tracer provider failed: %v", err) } } return nil }