Files
platform/web/globals/otel.go

57 lines
1.3 KiB
Go
Raw Normal View History

2025-12-01 19:31:45 +08:00
package globals
import (
"context"
"fmt"
"platform/pkg/env"
2025-12-01 19:31:45 +08:00
"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
2025-12-01 19:31:45 +08:00
exporter, err := otlptracegrpc.New(ctx,
otlptracegrpc.WithEndpoint(addr),
2025-12-01 19:31:45 +08:00
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
}