Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`

### Fixes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public final class io/sentry/opentelemetry/InternalSemanticAttributes {

public final class io/sentry/opentelemetry/OpenTelemetryUtil {
public fun <init> ()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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,7 +30,7 @@ public static void main(String[] args) throws InterruptedException {
options.setDsn(
"https://[email protected]/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/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -21,7 +22,7 @@ public class SentryOpenTelemetryAgentWithoutAutoInitConfiguration {
return options -> {
SentryIntegrationPackageStorage.getInstance()
.addIntegration("SpringBoot3OpenTelemetryAgentWithoutAutoInit");
OpenTelemetryUtil.applyOpenTelemetryOptions(options, true);
OpenTelemetryUtil.applyOpenTelemetryOptions(options, SentryOpenTelemetryMode.AGENT);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -21,7 +22,7 @@ public class SentryOpenTelemetryAgentWithoutAutoInitConfiguration {
return options -> {
SentryIntegrationPackageStorage.getInstance()
.addIntegration("SpringBootOpenTelemetryAgentWithoutAutoInit");
OpenTelemetryUtil.applyOpenTelemetryOptions(options, true);
OpenTelemetryUtil.applyOpenTelemetryOptions(options, SentryOpenTelemetryMode.AGENT);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
};
}
}
10 changes: 9 additions & 1 deletion sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -6194,7 +6202,7 @@ public final class io/sentry/util/SentryRandom {

public final class io/sentry/util/SpanUtils {
public fun <init> ()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
}

Expand Down
7 changes: 7 additions & 0 deletions sentry/src/main/java/io/sentry/SentryOpenTelemetryMode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.sentry;

public enum SentryOpenTelemetryMode {
AGENT,
AGENTLESS,
AGENTLESS_SPRING
}
32 changes: 18 additions & 14 deletions sentry/src/main/java/io/sentry/util/SpanUtils.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -13,23 +14,26 @@ public final class SpanUtils {
*
* @return a list of span origins to be ignored
*/
public static @NotNull List<String> ignoredSpanOriginsForOpenTelemetry(final boolean isAgent) {
public static @NotNull List<String> ignoredSpanOriginsForOpenTelemetry(
final @NotNull SentryOpenTelemetryMode mode) {
final @NotNull List<String> 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");
}
Expand Down
Loading