OpenTelemetry Agentless

Using OpenTelemetry with sentry-opentelemetry-agentless.

If you do not want to use our recommended Java Agent, we also offer a dependency that allows you to use OpenTelemetry with Sentry.

In addition to your typical Sentry dependencies, you will need to add sentry-opentelemetry-agentless as a dependency:

Copied
implementation 'io.sentry:sentry-opentelemetry-agentless:8.56.0'

Please note, if you're using Spring Boot, there's a separate sentry-opentelemetry-agentless-spring dependency. You can find out more here.

Sentry's Java OpenTelemetry integrations are tested with a specific OpenTelemetry dependency set. If your application also imports a BOM that manages OpenTelemetry versions, such as Spring Boot dependency management, it can override transitive OpenTelemetry dependencies and create a mixed OpenTelemetry classpath.

Import io.sentry:sentry-opentelemetry-bom manually when another BOM manages OpenTelemetry versions in your application.

When using Gradle with Spring dependency management, import Sentry's OpenTelemetry BOM:

build.gradle
Copied
dependencyManagement {
    imports {
        mavenBom 'io.sentry:sentry-opentelemetry-bom:8.56.0'
    }
}

When using Maven, import Sentry's OpenTelemetry BOM before spring-boot-dependencies:

pom.xml
Copied
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.sentry</groupId>
            <artifactId>sentry-opentelemetry-bom</artifactId>
            <version>8.56.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

If you use spring-boot-starter-parent, import Sentry's OpenTelemetry BOM in the child POM's dependencyManagement section.

You'll have to configure both OpenTelemetry and Sentry to see transactions in Sentry and have errors linked to transactions created by OpenTelemetry.

Our sentry-opentelemetry-agentless dependency also adds opentelemetry-sdk-extension-autoconfigure which takes care of configuring OpenTelemetry to work with Sentry. You can configure it using AutoConfiguredOpenTelemetrySdk:

Copied
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;

AutoConfiguredOpenTelemetrySdk.builder()
  .setResultAsGlobal()
  .addPropertiesSupplier(() -> {
    final Map<String, String> properties = new HashMap<>();
    properties.put("otel.logs.exporter", "none");
    properties.put("otel.metrics.exporter", "none");
    properties.put("otel.traces.exporter", "none");
    return properties;
  })
  .build();

You can initialize Sentry as usual, fore example, by calling Sentry.init:

Copied
import io.sentry.Sentry;

Sentry.init(options -> {
  options.setDsn("___PUBLIC_DSN___");
  options.setTracesSampleRate(1.0);
});
Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").