diff --git a/pkg/infra/tracing/opentelemetry_tracing.go b/pkg/infra/tracing/opentelemetry_tracing.go index 15200cbf529..2fdd5724ce0 100644 --- a/pkg/infra/tracing/opentelemetry_tracing.go +++ b/pkg/infra/tracing/opentelemetry_tracing.go @@ -24,8 +24,10 @@ import ( ) const ( - jaegerExporter string = "jaeger" - otlpExporter string = "otlp" + jaegerExporter string = "jaeger" + otlpExporter string = "otlp" + noopExporter string = "noop" + jaegerPropagator string = "jaeger" w3cPropagator string = "w3c" ) @@ -51,12 +53,18 @@ type Opentelemetry struct { propagation string log log.Logger - tracerProvider *tracesdk.TracerProvider + tracerProvider tracerProvider tracer trace.Tracer Cfg *setting.Cfg } +type tracerProvider interface { + trace.TracerProvider + + Shutdown(ctx context.Context) error +} + type OpentelemetrySpan struct { span trace.Span } @@ -72,11 +80,20 @@ func (o otelErrHandler) Handle(err error) { o(err) } +type noopTracerProvider struct { + trace.TracerProvider +} + +func (noopTracerProvider) Shutdown(ctx context.Context) error { + return nil +} + func (ots *Opentelemetry) parseSettingsOpentelemetry() error { section, err := ots.Cfg.Raw.GetSection("tracing.opentelemetry.jaeger") if err != nil { return err } + ots.enabled = noopExporter ots.address = section.Key("address").MustString("") if ots.address != "" { @@ -95,7 +112,6 @@ func (ots *Opentelemetry) parseSettingsOpentelemetry() error { ots.enabled = otlpExporter } ots.propagation = section.Key("propagation").MustString("") - return nil } @@ -148,8 +164,12 @@ func (ots *Opentelemetry) initOTLPTracerProvider() (*tracesdk.TracerProvider, er return tp, nil } +func (ots *Opentelemetry) initNoopTracerProvider() (tracerProvider, error) { + return &noopTracerProvider{TracerProvider: trace.NewNoopTracerProvider()}, nil +} + func (ots *Opentelemetry) initOpentelemetryTracer() error { - var tp *tracesdk.TracerProvider + var tp tracerProvider var err error switch ots.enabled { case jaegerExporter: @@ -163,7 +183,10 @@ func (ots *Opentelemetry) initOpentelemetryTracer() error { return err } default: - ots.log.Error("invalid trace exporter") + tp, err = ots.initNoopTracerProvider() + if err != nil { + return err + } } // Register our TracerProvider as the global so any imported