From 08507dff16688fb4e5ca44946d8f50be73f1282c Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Fri, 6 Dec 2024 10:10:02 +0100 Subject: [PATCH 1/3] add agentless module for OpenTelemetry setup without any agent --- .craft.yml | 1 + .github/ISSUE_TEMPLATE/bug_report_java.yml | 1 + .../sentry-opentelemetry-agentless/README.md | 54 +++++++++++++++++++ .../build.gradle.kts | 18 +++++++ .../opentelemetry/agent/AgentlessMarker.java | 3 ++ .../build.gradle.kts | 9 +--- .../java/io/sentry/samples/console/Main.java | 3 ++ .../build.gradle.kts | 5 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 3 +- settings.gradle.kts | 1 + 11 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 sentry-opentelemetry/sentry-opentelemetry-agentless/README.md create mode 100644 sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts create mode 100644 sentry-opentelemetry/sentry-opentelemetry-agentless/src/main/java/io/sentry/opentelemetry/agent/AgentlessMarker.java diff --git a/.craft.yml b/.craft.yml index 3d0a878a4c2..72373fa3435 100644 --- a/.craft.yml +++ b/.craft.yml @@ -44,6 +44,7 @@ targets: maven:io.sentry:sentry-opentelemetry-agent: maven:io.sentry:sentry-opentelemetry-agentcustomization: maven:io.sentry:sentry-opentelemetry-core: +# maven:io.sentry:sentry-opentelemetry-agentless: maven:io.sentry:sentry-apollo: maven:io.sentry:sentry-jdbc: maven:io.sentry:sentry-graphql: diff --git a/.github/ISSUE_TEMPLATE/bug_report_java.yml b/.github/ISSUE_TEMPLATE/bug_report_java.yml index f95244f5b1c..98521cdd7a1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report_java.yml +++ b/.github/ISSUE_TEMPLATE/bug_report_java.yml @@ -15,6 +15,7 @@ body: - sentry-apollo-3 - sentry-kotlin-extensions - sentry-opentelemetry-agent + - sentry-opentelemetry-agentless - sentry-opentelemetry-core - sentry-servlet - sentry-servlet-jakarta diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless/README.md b/sentry-opentelemetry/sentry-opentelemetry-agentless/README.md new file mode 100644 index 00000000000..9ce3319baef --- /dev/null +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless/README.md @@ -0,0 +1,54 @@ +# sentry-opentelemetry-agentless + +*NOTE: Our OpenTelemetry modules are still experimental. Any feedback is welcome.* + +## How to use it + +Add the latest `sentry-opentelemetry-agentless` module as a dependency and add a `sentry.properties` +configuration file to your project that could look like this: + +```properties +# NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry project/dashboard +dsn=https://502f25099c204a2fbf4cb16edc5975d1@o447951.ingest.sentry.io/5428563 +traces-sample-rate=1.0 +``` + +For more details on configuring Sentry via `sentry.properties` please see the +[docs page](https://docs.sentry.io/platforms/java/configuration/). + +As an alternative to the `SENTRY_PROPERTIES_FILE` environment variable you can provide individual +settings as environment variables (e.g. `SENTRY_DSN=...`) or you may initialize `Sentry` inside +your target application. If you do so, please make sure to apply OpenTelemetry specific options, e.g. +like this: + +``` +Sentry.init( + options -> { + options.setDsn("..."); + ... + OpenTelemetryUtil.applyOpenTelemetryOptions(options, false); + } +) +``` + +## Getting rid of exporter error messages + +In case you are using this module without needing to use any OpenTelemetry exporters you can add +the following environment variables to turn off exporters and stop seeing error messages about +servers not being reachable in the logs. + +Example log message: +``` +ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export spans. The request could not be executed. Full error message: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4317 +ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export metrics. The request could not be executed. Full error message: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4317 +``` + +### Traces + +To turn off exporting of traces you can set `OTEL_TRACES_EXPORTER=none` +see [OpenTelemetry GitHub](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#otlp-exporter-span-metric-and-log-exporters) + +### Metrics + +To turn off exporting of metrics you can set `OTEL_METRICS_EXPORTER=none` +see [OpenTelemetry GitHub](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#otlp-exporter-span-metric-and-log-exporters) diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts new file mode 100644 index 00000000000..eeeb8c7e955 --- /dev/null +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + `java-library` +} + +configure { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + api(projects.sentry) + api(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) + implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) + api(Config.Libs.OpenTelemetry.otelSdk) + api(Config.Libs.OpenTelemetry.otelSemconv) + api(Config.Libs.OpenTelemetry.otelSemconvIncubating) + implementation(Config.Libs.OpenTelemetry.otelExtensionAutoconfigure) +} diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless/src/main/java/io/sentry/opentelemetry/agent/AgentlessMarker.java b/sentry-opentelemetry/sentry-opentelemetry-agentless/src/main/java/io/sentry/opentelemetry/agent/AgentlessMarker.java new file mode 100644 index 00000000000..ddb5101c29b --- /dev/null +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless/src/main/java/io/sentry/opentelemetry/agent/AgentlessMarker.java @@ -0,0 +1,3 @@ +package io.sentry.opentelemetry.agent; + +public final class AgentlessMarker {} diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/build.gradle.kts b/sentry-samples/sentry-samples-console-opentelemetry-noagent/build.gradle.kts index 6d33de11cdf..100490935f6 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/build.gradle.kts +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/build.gradle.kts @@ -14,12 +14,5 @@ configure { } dependencies { - implementation(projects.sentry) - - implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) - implementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) - implementation(Config.Libs.OpenTelemetry.otelSdk) - implementation(Config.Libs.OpenTelemetry.otelExtensionAutoconfigure) - implementation(Config.Libs.OpenTelemetry.otelSemconv) - implementation(Config.Libs.OpenTelemetry.otelSemconvIncubating) + implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentless) } diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java index c27aad737b1..91e76978fbc 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java @@ -14,6 +14,7 @@ import io.sentry.SentryEvent; import io.sentry.SentryLevel; import io.sentry.SpanStatus; +import io.sentry.opentelemetry.OpenTelemetryUtil; import io.sentry.protocol.Message; import io.sentry.protocol.User; import java.util.Collections; @@ -28,6 +29,8 @@ public static void main(String[] args) throws InterruptedException { options.setDsn( "https://502f25099c204a2fbf4cb16edc5975d1@o447951.ingest.sentry.io/5428563"); + OpenTelemetryUtil.applyOpenTelemetryOptions(options, false); + // All events get assigned to the release. See more at // https://docs.sentry.io/workflow/releases/ options.setRelease("io.sentry.samples.console@3.0.0+1"); diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/build.gradle.kts index e0f82ad781c..4a5794cb34d 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry-noagent/build.gradle.kts @@ -53,8 +53,7 @@ dependencies { implementation(projects.sentryGraphql22) implementation(projects.sentryQuartz) implementation(Config.Libs.springBoot3StarterOpenTelemetry) - implementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) - implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) + implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentless) // database query tracing implementation(projects.sentryJdbc) @@ -71,7 +70,7 @@ dependencies { dependencyManagement { imports { - mavenBom("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.7.0") + mavenBom("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:${Config.Libs.OpenTelemetry.otelInstrumentationVersion}") } } diff --git a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/build.gradle.kts index 2dd6f2574ba..89aedb64043 100644 --- a/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-jakarta-opentelemetry/build.gradle.kts @@ -70,7 +70,7 @@ dependencies { dependencyManagement { imports { - mavenBom("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.7.0") + mavenBom("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:${Config.Libs.OpenTelemetry.otelInstrumentationVersion}") } } diff --git a/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/build.gradle.kts index 2eab2bb10ee..199eb274beb 100644 --- a/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/build.gradle.kts @@ -53,8 +53,7 @@ dependencies { implementation(projects.sentryGraphql) implementation(projects.sentryQuartz) implementation(Config.Libs.springBoot3StarterOpenTelemetry) - implementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) - implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) + implementation(projects.sentryOpentelemetry.sentryOpentelemetryAgentless) // database query tracing implementation(projects.sentryJdbc) diff --git a/settings.gradle.kts b/settings.gradle.kts index 90ae3048f94..75cff858744 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -48,6 +48,7 @@ include( "sentry-opentelemetry:sentry-opentelemetry-core", "sentry-opentelemetry:sentry-opentelemetry-agentcustomization", "sentry-opentelemetry:sentry-opentelemetry-agent", + "sentry-opentelemetry:sentry-opentelemetry-agentless", "sentry-quartz", "sentry-okhttp", "sentry-samples:sentry-samples-android", From b36339c93ca01147d4a37e39f5764e58c27257ca Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 16 Dec 2024 09:56:03 +0100 Subject: [PATCH 2/3] Replace bool with enum for OpenTelemetryUtil mode --- ...ryAutoConfigurationCustomizerProvider.java | 3 +- .../api/sentry-opentelemetry-bootstrap.api | 2 +- .../opentelemetry/OpenTelemetryUtil.java | 6 ++-- .../java/io/sentry/samples/console/Main.java | 3 +- ...etryAgentWithoutAutoInitConfiguration.java | 3 +- ...ntryOpenTelemetryNoAgentConfiguration.java | 4 ++- ...etryAgentWithoutAutoInitConfiguration.java | 3 +- ...ntryOpenTelemetryNoAgentConfiguration.java | 4 ++- sentry/api/sentry.api | 10 +++++- .../io/sentry/SentryOpenTelemetryMode.java | 7 ++++ .../main/java/io/sentry/util/SpanUtils.java | 32 +++++++++++-------- 11 files changed, 53 insertions(+), 24 deletions(-) create mode 100644 sentry/src/main/java/io/sentry/SentryOpenTelemetryMode.java diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/src/main/java/io/sentry/opentelemetry/SentryAutoConfigurationCustomizerProvider.java b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/src/main/java/io/sentry/opentelemetry/SentryAutoConfigurationCustomizerProvider.java index 7d50fe3702a..8285f8a19e1 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/src/main/java/io/sentry/opentelemetry/SentryAutoConfigurationCustomizerProvider.java +++ b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/src/main/java/io/sentry/opentelemetry/SentryAutoConfigurationCustomizerProvider.java @@ -8,6 +8,7 @@ import io.sentry.InitPriority; import io.sentry.Sentry; import io.sentry.SentryIntegrationPackageStorage; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SentryOptions; import io.sentry.protocol.SdkVersion; import io.sentry.protocol.SentryPackage; @@ -38,7 +39,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { options -> { options.setEnableExternalConfiguration(true); options.setInitPriority(InitPriority.HIGH); - OpenTelemetryUtil.applyOpenTelemetryOptions(options, true); + OpenTelemetryUtil.applyOpenTelemetryOptions(options, SentryOpenTelemetryMode.AGENT); final @Nullable SdkVersion sdkVersion = createSdkVersion(options, versionInfoHolder); if (sdkVersion != null) { options.setSdkVersion(sdkVersion); diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api index 0e061c84c09..55053604f4b 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api @@ -26,7 +26,7 @@ public final class io/sentry/opentelemetry/InternalSemanticAttributes { public final class io/sentry/opentelemetry/OpenTelemetryUtil { public fun ()V - public static fun applyOpenTelemetryOptions (Lio/sentry/SentryOptions;Z)V + public static fun applyOpenTelemetryOptions (Lio/sentry/SentryOptions;Lio/sentry/SentryOpenTelemetryMode;)V } public final class io/sentry/opentelemetry/OtelContextScopesStorage : io/sentry/IScopesStorage { diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java index c9dbd7d595d..b83a951a8d5 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OpenTelemetryUtil.java @@ -1,17 +1,19 @@ package io.sentry.opentelemetry; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SentryOptions; import io.sentry.util.SpanUtils; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @ApiStatus.Experimental public final class OpenTelemetryUtil { public static void applyOpenTelemetryOptions( - final @Nullable SentryOptions options, final boolean isAgent) { + final @Nullable SentryOptions options, final @NotNull SentryOpenTelemetryMode mode) { if (options != null) { - options.setIgnoredSpanOrigins(SpanUtils.ignoredSpanOriginsForOpenTelemetry(isAgent)); + options.setIgnoredSpanOrigins(SpanUtils.ignoredSpanOriginsForOpenTelemetry(mode)); } } } diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java index 91e76978fbc..842485cf261 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java @@ -13,6 +13,7 @@ import io.sentry.Sentry; import io.sentry.SentryEvent; import io.sentry.SentryLevel; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SpanStatus; import io.sentry.opentelemetry.OpenTelemetryUtil; import io.sentry.protocol.Message; @@ -29,7 +30,7 @@ public static void main(String[] args) throws InterruptedException { options.setDsn( "https://502f25099c204a2fbf4cb16edc5975d1@o447951.ingest.sentry.io/5428563"); - OpenTelemetryUtil.applyOpenTelemetryOptions(options, false); + OpenTelemetryUtil.applyOpenTelemetryOptions(options, SentryOpenTelemetryMode.AGENTLESS); // All events get assigned to the release. See more at // https://docs.sentry.io/workflow/releases/ diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java index 96ba5ae770e..74ef7c303bd 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java @@ -3,6 +3,7 @@ import com.jakewharton.nopen.annotation.Open; import io.sentry.Sentry; import io.sentry.SentryIntegrationPackageStorage; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SentryOptions; import io.sentry.opentelemetry.OpenTelemetryUtil; import org.jetbrains.annotations.NotNull; @@ -21,7 +22,7 @@ public class SentryOpenTelemetryAgentWithoutAutoInitConfiguration { return options -> { SentryIntegrationPackageStorage.getInstance() .addIntegration("SpringBoot3OpenTelemetryAgentWithoutAutoInit"); - OpenTelemetryUtil.applyOpenTelemetryOptions(options, true); + OpenTelemetryUtil.applyOpenTelemetryOptions(options, SentryOpenTelemetryMode.AGENT); }; } } diff --git a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java index d53acca52fe..cf579ab6c44 100644 --- a/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java +++ b/sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java @@ -5,6 +5,7 @@ import io.sentry.ISpanFactory; import io.sentry.Sentry; import io.sentry.SentryIntegrationPackageStorage; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SentryOptions; import io.sentry.opentelemetry.OpenTelemetryUtil; import io.sentry.opentelemetry.OtelSpanFactory; @@ -32,7 +33,8 @@ public static ISpanFactory openTelemetrySpanFactory(OpenTelemetry openTelemetry) SentryIntegrationPackageStorage.getInstance() .addIntegration("SpringBoot3OpenTelemetryNoAgent"); SentryAutoConfigurationCustomizerProvider.skipInit = true; - OpenTelemetryUtil.applyOpenTelemetryOptions(options, false); + OpenTelemetryUtil.applyOpenTelemetryOptions( + options, SentryOpenTelemetryMode.AGENTLESS_SPRING); }; } } diff --git a/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java b/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java index bfc613512e8..cd342a0f79e 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java +++ b/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryAgentWithoutAutoInitConfiguration.java @@ -3,6 +3,7 @@ import com.jakewharton.nopen.annotation.Open; import io.sentry.Sentry; import io.sentry.SentryIntegrationPackageStorage; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SentryOptions; import io.sentry.opentelemetry.OpenTelemetryUtil; import org.jetbrains.annotations.NotNull; @@ -21,7 +22,7 @@ public class SentryOpenTelemetryAgentWithoutAutoInitConfiguration { return options -> { SentryIntegrationPackageStorage.getInstance() .addIntegration("SpringBootOpenTelemetryAgentWithoutAutoInit"); - OpenTelemetryUtil.applyOpenTelemetryOptions(options, true); + OpenTelemetryUtil.applyOpenTelemetryOptions(options, SentryOpenTelemetryMode.AGENT); }; } } diff --git a/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java b/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java index 61ee3aa1e73..f74f5d94f3d 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java +++ b/sentry-spring/src/main/java/io/sentry/spring/opentelemetry/SentryOpenTelemetryNoAgentConfiguration.java @@ -5,6 +5,7 @@ import io.sentry.ISpanFactory; import io.sentry.Sentry; import io.sentry.SentryIntegrationPackageStorage; +import io.sentry.SentryOpenTelemetryMode; import io.sentry.SentryOptions; import io.sentry.opentelemetry.OpenTelemetryUtil; import io.sentry.opentelemetry.OtelSpanFactory; @@ -32,7 +33,8 @@ public static ISpanFactory openTelemetrySpanFactory(OpenTelemetry openTelemetry) SentryIntegrationPackageStorage.getInstance() .addIntegration("SpringBootOpenTelemetryNoAgent"); SentryAutoConfigurationCustomizerProvider.skipInit = true; - OpenTelemetryUtil.applyOpenTelemetryOptions(options, false); + OpenTelemetryUtil.applyOpenTelemetryOptions( + options, SentryOpenTelemetryMode.AGENTLESS_SPRING); }; } } diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 7cf213a03cf..3329397a721 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -2781,6 +2781,14 @@ public final class io/sentry/SentryNanotimeDateProvider : io/sentry/SentryDatePr public fun now ()Lio/sentry/SentryDate; } +public final class io/sentry/SentryOpenTelemetryMode : java/lang/Enum { + public static final field AGENT Lio/sentry/SentryOpenTelemetryMode; + public static final field AGENTLESS Lio/sentry/SentryOpenTelemetryMode; + public static final field AGENTLESS_SPRING Lio/sentry/SentryOpenTelemetryMode; + public static fun valueOf (Ljava/lang/String;)Lio/sentry/SentryOpenTelemetryMode; + public static fun values ()[Lio/sentry/SentryOpenTelemetryMode; +} + public class io/sentry/SentryOptions { public static final field DEFAULT_PROPAGATION_TARGETS Ljava/lang/String; protected final field lock Lio/sentry/util/AutoClosableReentrantLock; @@ -6194,7 +6202,7 @@ public final class io/sentry/util/SentryRandom { public final class io/sentry/util/SpanUtils { public fun ()V - public static fun ignoredSpanOriginsForOpenTelemetry (Z)Ljava/util/List; + public static fun ignoredSpanOriginsForOpenTelemetry (Lio/sentry/SentryOpenTelemetryMode;)Ljava/util/List; public static fun isIgnored (Ljava/util/List;Ljava/lang/String;)Z } diff --git a/sentry/src/main/java/io/sentry/SentryOpenTelemetryMode.java b/sentry/src/main/java/io/sentry/SentryOpenTelemetryMode.java new file mode 100644 index 00000000000..5121c013e5b --- /dev/null +++ b/sentry/src/main/java/io/sentry/SentryOpenTelemetryMode.java @@ -0,0 +1,7 @@ +package io.sentry; + +public enum SentryOpenTelemetryMode { + AGENT, + AGENTLESS, + AGENTLESS_SPRING +} diff --git a/sentry/src/main/java/io/sentry/util/SpanUtils.java b/sentry/src/main/java/io/sentry/util/SpanUtils.java index a657186744b..323bdbee987 100644 --- a/sentry/src/main/java/io/sentry/util/SpanUtils.java +++ b/sentry/src/main/java/io/sentry/util/SpanUtils.java @@ -1,5 +1,6 @@ package io.sentry.util; +import io.sentry.SentryOpenTelemetryMode; import java.util.ArrayList; import java.util.List; import org.jetbrains.annotations.ApiStatus; @@ -13,23 +14,26 @@ public final class SpanUtils { * * @return a list of span origins to be ignored */ - public static @NotNull List ignoredSpanOriginsForOpenTelemetry(final boolean isAgent) { + public static @NotNull List ignoredSpanOriginsForOpenTelemetry( + final @NotNull SentryOpenTelemetryMode mode) { final @NotNull List origins = new ArrayList<>(); - origins.add("auto.http.spring_jakarta.webmvc"); - origins.add("auto.http.spring.webmvc"); - origins.add("auto.spring_jakarta.webflux"); - origins.add("auto.spring.webflux"); - origins.add("auto.db.jdbc"); - origins.add("auto.http.spring_jakarta.webclient"); - origins.add("auto.http.spring.webclient"); - origins.add("auto.http.spring_jakarta.restclient"); - origins.add("auto.http.spring.restclient"); - origins.add("auto.http.spring_jakarta.resttemplate"); - origins.add("auto.http.spring.resttemplate"); - origins.add("auto.http.openfeign"); + if (SentryOpenTelemetryMode.AGENT == mode || SentryOpenTelemetryMode.AGENTLESS_SPRING == mode) { + origins.add("auto.http.spring_jakarta.webmvc"); + origins.add("auto.http.spring.webmvc"); + origins.add("auto.spring_jakarta.webflux"); + origins.add("auto.spring.webflux"); + origins.add("auto.db.jdbc"); + origins.add("auto.http.spring_jakarta.webclient"); + origins.add("auto.http.spring.webclient"); + origins.add("auto.http.spring_jakarta.restclient"); + origins.add("auto.http.spring.restclient"); + origins.add("auto.http.spring_jakarta.resttemplate"); + origins.add("auto.http.spring.resttemplate"); + origins.add("auto.http.openfeign"); + } - if (isAgent) { + if (SentryOpenTelemetryMode.AGENT == mode) { origins.add("auto.graphql.graphql"); origins.add("auto.graphql.graphql22"); } From d371a6c0a108520f9a1b211252e5f00979587e78 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 17 Dec 2024 11:12:43 +0100 Subject: [PATCH 3/3] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 993d02a397c..5734de29def 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ - This module can be added as a dependency when using Sentry with OpenTelemetry but don't want to use our Agent. It takes care of configuring OpenTelemetry for use with Sentry. - To enable the auto configuration of it, please set `-Dotel.java.global-autoconfigure.enabled=true` on the `java` command, when starting your application. - You may also want to set `OTEL_LOGS_EXPORTER=none;OTEL_METRICS_EXPORTER=none;OTEL_TRACES_EXPORTER=none` env vars to not have the log flooded with error messages regarding OpenTelemetry features we don't use. +- `OpenTelemetryUtil.applyOpenTelemetryOptions` now takes an enum instead of a boolean for its mode + - Use `AGENT` when using `sentry-opentelemetry-agent` + - Use `AGENTLESS` when using `sentry-opentelemetry-agentless` + - Use `AGENTLESS_SPRING` when using `sentry-opentelemetry-agentless-spring` ## 8.0.0-rc.2