package globals import ( "context" "fmt" "platform/pkg/env" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.21.0" ) var tp *trace.TracerProvider func initOtel(ctx context.Context) error { if env.OtelHost == "" || env.OtelPort == "" { return nil } addr := env.OtelHost + ":" + env.OtelPort exporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithEndpoint(addr), otlptracegrpc.WithInsecure(), ) if err != nil { return fmt.Errorf("初始化 trace exporter 失败: %w", err) } tp = trace.NewTracerProvider( trace.WithBatcher(exporter), trace.WithSampler(trace.AlwaysSample()), trace.WithResource( resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceNameKey.String("lanhu-platform"), ), ), ) otel.SetTracerProvider(tp) otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{})) return nil } func closeOtel() error { err := tp.Shutdown(context.Background()) if err != nil { return fmt.Errorf("关闭 trace provider 失败: %v", err) } return nil }