diff --git a/observability/opentelemetry/v2/client/otel_observability_service.go b/observability/opentelemetry/v2/client/otel_observability_service.go index 25ead8331..479f3a27e 100644 --- a/observability/opentelemetry/v2/client/otel_observability_service.go +++ b/observability/opentelemetry/v2/client/otel_observability_service.go @@ -24,6 +24,7 @@ import ( // OTelObservabilityService implements the ObservabilityService interface from cloudevents type OTelObservabilityService struct { + traceProvider trace.TracerProvider tracer trace.Tracer spanAttributesGetter func(cloudevents.Event) []attribute.KeyValue spanNameFormatter func(cloudevents.Event) string @@ -34,11 +35,8 @@ func NewOTelObservabilityService(opts ...OTelObservabilityServiceOption) *OTelOb tracerProvider := otel.GetTracerProvider() o := &OTelObservabilityService{ - tracer: tracerProvider.Tracer( - instrumentationName, - // TODO: Can we have the package version here? - // trace.WithInstrumentationVersion("1.0.0"), - ), + traceProvider: tracerProvider, + tracer: nil, spanNameFormatter: defaultSpanNameFormatter, } @@ -47,6 +45,12 @@ func NewOTelObservabilityService(opts ...OTelObservabilityServiceOption) *OTelOb opt(o) } + o.tracer = o.traceProvider.Tracer( + instrumentationName, + // TODO: Can we have the package version here? + // trace.WithInstrumentationVersion("1.0.0"), + ) + return o } diff --git a/observability/opentelemetry/v2/client/otel_options.go b/observability/opentelemetry/v2/client/otel_options.go index 053cd1558..953833808 100644 --- a/observability/opentelemetry/v2/client/otel_options.go +++ b/observability/opentelemetry/v2/client/otel_options.go @@ -7,6 +7,7 @@ package client import ( "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/trace" cloudevents "github.com/cloudevents/sdk-go/v2" "github.com/cloudevents/sdk-go/v2/observability" @@ -37,6 +38,15 @@ func WithSpanNameFormatter(nameFormatter func(cloudevents.Event) string) OTelObs } } +// WithTracerProvider sets the tracer provider to use for creating spans. +func WithTracerProvider(tracerProvider trace.TracerProvider) OTelObservabilityServiceOption { + return func(os *OTelObservabilityService) { + if tracerProvider != nil { + os.traceProvider = tracerProvider + } + } +} + var defaultSpanNameFormatter func(cloudevents.Event) string = func(e cloudevents.Event) string { return observability.ClientSpanName + "." + e.Context.GetType() }