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:
implementation 'io.sentry:sentry-opentelemetry-agentless:8.43.1'
implementation 'io.sentry:sentry-opentelemetry-agentless:8.43.1'
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-opentelemetry-agentless</artifactId>
<version>8.43.1</version>
</dependency>
Please note, if you're using Spring Boot, there's a separate sentry-opentelemetry-agentless-spring dependency. You can find out more here.
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:
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();
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();
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk
AutoConfiguredOpenTelemetrySdk.builder()
.setResultAsGlobal()
.addPropertiesSupplier{
return mapOf(
"otel.logs.exporter" to "none",
"otel.metrics.exporter" to "none",
"otel.traces.exporter" to "none"
)
}
.build()
You can initialize Sentry as usual, fore example, by calling Sentry.init:
import io.sentry.Sentry;
Sentry.init(options -> {
options.setDsn("___PUBLIC_DSN___");
options.setTracesSampleRate(1.0);
});
import io.sentry.Sentry;
Sentry.init(options -> {
options.setDsn("___PUBLIC_DSN___");
options.setTracesSampleRate(1.0);
});
import io.sentry.Sentry
Sentry.init { options ->
options.dsn = "___PUBLIC_DSN___"
options.tracesSampleRate = 1.0
}
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").