Files

40 lines
1.2 KiB
Go

package observability
import (
"context"
"skeleton/config"
"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.34.0"
)
func InitTracing(ctx context.Context, cfg config.ObservabilityConfig) (func(context.Context) error, error) {
if !cfg.TracingEnabled {
return func(context.Context) error { return nil }, nil
}
options := []otlptracehttp.Option{otlptracehttp.WithEndpoint(cfg.TracingEndpoint)}
if cfg.TracingInsecure {
options = append(options, otlptracehttp.WithInsecure())
}
exporter, err := otlptracehttp.New(ctx, options...)
if err != nil {
return nil, err
}
res, err := resource.New(ctx, resource.WithAttributes(semconv.ServiceName(cfg.TracingService)))
if err != nil {
return nil, err
}
provider := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter), sdktrace.WithResource(res))
otel.SetTracerProvider(provider)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(
propagation.TraceContext{}, propagation.Baggage{},
))
return provider.Shutdown, nil
}