1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
package otelutil
import (
"context"
"github.com/containerd/log"
"github.com/moby/buildkit/util/tracing/detect"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/noop"
)
func NewTracerProvider(ctx context.Context, allowNoop bool) (trace.TracerProvider, func(context.Context) error) {
noopShutdown := func(ctx context.Context) error { return nil }
exp, err := detect.NewSpanExporter(ctx)
if err != nil {
log.G(ctx).WithError(err).Warn("Failed to initialize tracing, skipping")
if allowNoop {
return noop.NewTracerProvider(), noopShutdown
}
}
if allowNoop && detect.IsNoneSpanExporter(exp) {
log.G(ctx).Info("OTEL tracing is not configured, using no-op tracer provider")
return noop.NewTracerProvider(), noopShutdown
}
tp := sdktrace.NewTracerProvider(
sdktrace.WithResource(resource.Default()),
sdktrace.WithSyncer(detect.Recorder),
sdktrace.WithBatcher(exp),
)
return tp, tp.Shutdown
}
|