package trace import ( "context" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" "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.26.0" ) func InitTrace() (*sdktrace.TracerProvider, error) { // Initialize OpenTelemetry tracing ctx := context.Background() // Configure OpenTelemetry with your desired settings exporter, err := otlptracehttp.New(ctx, otlptracehttp.WithEndpoint("localhost:4318"), otlptracehttp.WithInsecure()) if err != nil { return nil, err } // Create a new TracerProvider with the exporter // and a sampler (e.g., AlwaysSample) tracerProvider := sdktrace.NewTracerProvider( sdktrace.WithSampler(sdktrace.AlwaysSample()), sdktrace.WithBatcher(exporter), // You may want to set resource attributes here, e.g. service name/version sdktrace.WithResource(resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceNameKey.String("go-telecom"), )), ) // Set the global trace provider otel.SetTracerProvider(tracerProvider) // set the global propagator otel.SetTextMapPropagator(propagation.TraceContext{}) return tracerProvider, nil }