diff --git a/src/Sentry.OpenTelemetry.Exporter/SentryOptionsExtensions.cs b/src/Sentry.OpenTelemetry.Exporter/SentryOptionsExtensions.cs
index 83a4703498..31e5ba9aa5 100644
--- a/src/Sentry.OpenTelemetry.Exporter/SentryOptionsExtensions.cs
+++ b/src/Sentry.OpenTelemetry.Exporter/SentryOptionsExtensions.cs
@@ -1,4 +1,3 @@
-using OpenTelemetry.Context.Propagation;
using OpenTelemetry.Trace;
using Sentry.OpenTelemetry.Exporter;
@@ -21,24 +20,18 @@ public static class SentryOptionsExtensions
///
/// A custom endpoint to export OLTP trace information to. If no url is provided, the
/// endpoint will be inferred automatically from the DSN.
- ///
- /// The default TextMapPropagator to be used by OpenTelemetry.
- ///
- /// If this parameter is not supplied, the will be used, which propagates the
- /// baggage header as well as Sentry trace headers.
- ///
- ///
- /// The is required for Sentry's OpenTelemetry integration to work, but you
- /// could wrap this in a if you needed other propagators as well.
- ///
- ///
- public static void UseOtlp(this SentryOptions options, TracerProviderBuilder tracerProviderBuilder, Uri? collectorUrl = null, TextMapPropagator? defaultTextMapPropagator = null)
+ ///
+ /// This method does not configure an OpenTelemetry propagator.
+ /// Cross-service trace propagation should be enabled via the OpenTelemetry SDK (e.g. by calling
+ /// Sdk.SetDefaultTextMapPropagator).
+ ///
+ public static void UseOtlp(this SentryOptions options, TracerProviderBuilder tracerProviderBuilder, Uri? collectorUrl = null)
{
if (string.IsNullOrWhiteSpace(options.Dsn))
{
throw new ArgumentException("Sentry DSN must be set before calling `SentryOptions.UseOtlp`", nameof(options.Dsn));
}
- tracerProviderBuilder.AddSentryOtlpExporter(options.Dsn, collectorUrl, defaultTextMapPropagator);
+ tracerProviderBuilder.AddSentryOtlpExporter(options.Dsn, collectorUrl);
options.UseOtlp();
}
diff --git a/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs b/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs
index 7dcf8e07fc..3144488073 100644
--- a/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs
+++ b/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs
@@ -1,7 +1,5 @@
-using OpenTelemetry.Context.Propagation;
using OpenTelemetry.Exporter;
using Sentry;
-using Sentry.OpenTelemetry;
// ReSharper disable once CheckNamespace -- Discoverability
namespace OpenTelemetry.Trace;
@@ -27,20 +25,14 @@ public static class SentryTracerProviderBuilderExtensions
/// The DSN for your Sentry project
/// A custom endpoint to export OLTP trace information to. If no url is provided, the
/// endpoint will be inferred automatically from the DSN.
- ///
- /// The default TextMapPropagator to be used by OpenTelemetry.
- ///
- /// If this parameter is not supplied, the will be used, which propagates the
- /// baggage header as well as Sentry trace headers.
- ///
- ///
- /// The is required for Sentry's OpenTelemetry integration to work, but you
- /// could wrap this in a if you needed other propagators as well.
- ///
- ///
/// The supplied for chaining.
+ ///
+ /// This method does not configure an OpenTelemetry propagator.
+ /// Cross-service trace propagation should be enabled via the OpenTelemetry SDK (e.g. by calling
+ /// Sdk.SetDefaultTextMapPropagator).
+ ///
public static TracerProviderBuilder AddSentryOtlpExporter(this TracerProviderBuilder tracerProviderBuilder,
- string dsnString, Uri? collectorUrl = null, TextMapPropagator? defaultTextMapPropagator = null)
+ string dsnString, Uri? collectorUrl = null)
{
if (Dsn.IsDisabled(dsnString))
{
@@ -52,9 +44,6 @@ public static TracerProviderBuilder AddSentryOtlpExporter(this TracerProviderBui
throw new ArgumentException(MissingDsnWarning, nameof(dsnString));
}
- defaultTextMapPropagator ??= new SentryPropagator();
- Sdk.SetDefaultTextMapPropagator(defaultTextMapPropagator);
-
collectorUrl ??= dsn.GetOtlpTracesEndpointUri();
tracerProviderBuilder.AddOtlpExporter(options => OtlpConfigurationCallback(options, collectorUrl, dsn.PublicKey));
return tracerProviderBuilder;
diff --git a/test/Sentry.OpenTelemetry.Exporter.Tests/SentryOptionsExtensionsTests.cs b/test/Sentry.OpenTelemetry.Exporter.Tests/SentryOptionsExtensionsTests.cs
index 01f5fa7c35..42be97c6ab 100644
--- a/test/Sentry.OpenTelemetry.Exporter.Tests/SentryOptionsExtensionsTests.cs
+++ b/test/Sentry.OpenTelemetry.Exporter.Tests/SentryOptionsExtensionsTests.cs
@@ -1,4 +1,3 @@
-using OpenTelemetry.Context.Propagation;
using OpenTelemetry.Trace;
namespace Sentry.OpenTelemetry.Exporter.Tests;
@@ -119,19 +118,4 @@ public void UseOtlp_WithTracerProviderBuilder_WithCustomCollectorUrl_DoesNotThro
// Assert
act.Should().NotThrow();
}
-
- [Fact]
- public void UseOtlp_WithCustomPropagator_DoesNotThrow()
- {
- // Arrange
- var options = new SentryOptions { Dsn = DsnSamples.ValidDsn };
- var tracerProviderBuilder = Substitute.For();
- var customPropagator = Substitute.For();
-
- // Act
- var act = () => options.UseOtlp(tracerProviderBuilder, defaultTextMapPropagator: customPropagator);
-
- // Assert
- act.Should().NotThrow();
- }
}
diff --git a/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs b/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs
index d061cbac7c..a48e506664 100644
--- a/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs
+++ b/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs
@@ -1,3 +1,5 @@
+using OpenTelemetry;
+using OpenTelemetry.Context.Propagation;
using OpenTelemetry.Exporter;
using OpenTelemetry.Trace;
@@ -35,6 +37,24 @@ public void AddSentryOtlpExporter_DisabledSdkDsn_ReturnsWithoutConfiguringExport
tracerProviderBuilder.DidNotReceive().AddInstrumentation(Arg.Any>());
}
+ [Fact]
+ public void AddSentryOtlpExporter_DoesNotConfigureDefaultPropagator()
+ {
+ // Arrange
+ // The OTLP integration spec requires that we MUST NOT set up an automatic propagator. Cross-service trace
+ // propagation is left to the propagateTraceparent option or to user-configured OTel propagators.
+ // See https://develop.sentry.dev/sdk/telemetry/traces/otlp/#integration-spec
+ var sentinel = new TraceContextPropagator();
+ Sdk.SetDefaultTextMapPropagator(sentinel);
+ var tracerProviderBuilder = Substitute.For();
+
+ // Act
+ tracerProviderBuilder.AddSentryOtlpExporter("https://examplePublicKey@o0.ingest.sentry.io/123456");
+
+ // Assert
+ Propagators.DefaultTextMapPropagator.Should().BeSameAs(sentinel);
+ }
+
[Fact]
public void OtlpConfigurationCallback_WithCustomCollectorUrl_SetsEndpointToCustomUrl()
{