Skip to content

Commit 4d612f4

Browse files
Update OpenTelemetry docs for Java v8 (#12209)
* Update OTel docs for Java v8 * Apply suggestions from code review Co-authored-by: Alex Krawiec <[email protected]> --------- Co-authored-by: Alex Krawiec <[email protected]>
1 parent c145fdf commit 4d612f4

File tree

11 files changed

+99
-163
lines changed

11 files changed

+99
-163
lines changed

docs/platforms/java/common/tracing/instrumentation/opentelemetry.mdx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ sidebar_order: 20
77

88
There are multiple ways to configure your [OpenTelemetry SDK](https://opentelemetry.io/) and send traces and spans to Sentry. They're described below.
99

10+
<PlatformSection supported={["java.spring", "java.spring-boot"]} notSupported={["java"]}>
11+
If you're unsure whether to use the Java Agent, please have a look at [what the OpenTelemetry SDK has to say about this](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/).
12+
</PlatformSection>
13+
1014
## Using `sentry-opentelemetry-agent` With Auto Initialization
1115

1216
If you use `sentry-opentelemetry-agent`, it will look for `SENTRY_DSN` and `SENTRY_PROPERTIES_FILE` environment variables to be defined, and then initialize Sentry automatically. You'll just need to configure your `DSN` and `tracesSampleRate`.
@@ -49,7 +53,7 @@ You may also disable automatic initialization of Sentry in `sentry-opentelemetry
4953

5054
## Using OpenTelemetry Without Any Java Agent
5155

52-
If the Java Agent approach isn't for you, you can manually initialize OpenTelemetry. We have a separate dependency for this use case that allows you to reuse classes used by `sentry-opentelemetry-agent`.
56+
If the Java Agent approach isn't for you, you can manually initialize OpenTelemetry. We have a separate dependency for this use case.
5357

5458
### Install
5559

docs/platforms/java/migration/7.x-to-8.0.mdx

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,6 @@ If you've not been using the Sentry OpenTelemetry agent before, you can add `sen
109109
- Please use `sentry.properties` or environment variables to configure the SDK as the agent is now in charge of initializing the SDK and options coming from things like logging integrations or our Spring Boot integration will not take effect.
110110
- You may find the [docs page](https://docs.sentry.io/platforms/java/tracing/instrumentation/opentelemetry/#using-sentry-opentelemetry-agent-with-auto-initialization) useful.
111111

112-
If you want to skip auto initialization of the SDK performed by the agent, please follow the steps above and set the environment variable `SENTRY_AUTO_INIT` to `false` then add the following to your `Sentry.init`:
113-
114-
```
115-
Sentry.init(options -> {
116-
options.setDsn(...);
117-
OpenTelemetryUtil.applyOpenTelemetryOptions(options);
118-
...
119-
});
120-
```
121-
122-
If you're using our Spring Boot integration, it will automatically detect our OpenTelemetry agent and take care of configuring the SDK for you.
112+
If you want to skip auto initialization of the SDK performed by the agent, please follow the steps above and set the environment variable `SENTRY_AUTO_INIT` to `false`, then use `Sentry.init` as usual.
123113

124114
We've added more sample applications that showcase how to combine Sentry and OpenTelemetry (https://github.com/getsentry/sentry-java/tree/8.x.x/sentry-samples).
Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1 @@
11
You can download the latest version of the `sentry-opentelemetry-agent-{{@inject packages.version('sentry.java.opentelemetry-agent') }}.jar` from [MavenCentral](https://search.maven.org/artifact/io.sentry/sentry-opentelemetry-agent). It's also available as a `ZIP` containing the `JAR` used on this page on [GitHub](https://github.com/getsentry/sentry-java/releases/).
2-
3-
To ensure errors are properly linked to transactions that were created by the OpenTelemetry integration, you need an additional dependency:
4-
5-
```groovy {tabTitle:Gradle}
6-
implementation 'io.sentry:sentry-opentelemetry-core:{{@inject packages.version('sentry.java.opentelemetry-core', '6.9.2') }}'
7-
```
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1-
In addition to OpenTelemetry dependencies and your typical Sentry dependencies, you will need to add `sentry-opentelemetry-core` as a dependency:
1+
In addition to your typical Sentry dependencies, you will need to add `sentry-opentelemetry-agentless` as a dependency:
22

33
```groovy {tabTitle:Gradle}
4-
implementation 'io.sentry:sentry-opentelemetry-core:{{@inject packages.version('sentry.java.opentelemetry-core', '6.9.2') }}'
4+
implementation 'io.sentry:sentry-opentelemetry-agentless:{{@inject packages.version('sentry.java.opentelemetry-agentless', '8.0.0') }}'
55
```
6+
```xml {tabTitle:Maven}
7+
<dependency>
8+
<groupId>io.sentry</groupId>
9+
<artifactId>sentry-opentelemetry-agentless</artifactId>
10+
<version>{{@inject packages.version('sentry.java.opentelemetry-agentless', '8.0.0') }}</version>
11+
</dependency>
12+
```
13+
14+
Please note, if you're using Spring Boot, there's a separate `sentry-opentelemetry-agentless-spring` dependency. You can <PlatformLink to="/guides/spring-boot/tracing/instrumentation/opentelemetry/">find out more here</PlatformLink>.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
In addition to the Sentry Spring Boot SDK, you will need to add `sentry-opentelemetry-agentless-spring` as a dependency:
2+
3+
```groovy {tabTitle:Gradle}
4+
implementation 'io.sentry:sentry-opentelemetry-agentless-spring:{{@inject packages.version('sentry.java.opentelemetry-agentless-spring', '8.0.0') }}'
5+
```
6+
```xml {tabTitle:Maven}
7+
<dependency>
8+
<groupId>io.sentry</groupId>
9+
<artifactId>sentry-opentelemetry-agentless-spring</artifactId>
10+
<version>{{@inject packages.version('sentry.java.opentelemetry-agentless-spring', '8.0.0') }}</version>
11+
</dependency>
12+
```

platform-includes/performance/opentelemetry-setup/with-java-agent/exporter-messages/java.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
If you're using `sentry-opentelemetry-agent` but don't need to use OpenTelemetry exporters, add
1+
If you're not using any OpenTelemetry exporters besides Sentry, add
22
the following environment variables to turn off exporters and stop receiving error messages about
33
servers not being reachable in the logs.
44

@@ -7,6 +7,7 @@ Example log message:
77
```
88
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
99
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
10+
ERROR io.opentelemetry.exporter.internal.http.HttpExporter - Failed to export logs. The request could not be executed. Full error message: Failed to connect to localhost/[0:0:0:0:0:0:0:1]:4318
1011
```
1112

1213
#### Traces
@@ -16,3 +17,7 @@ To turn off traces exporting, set `OTEL_TRACES_EXPORTER=none` as an environment
1617
#### Metrics
1718

1819
To turn off metrics exporting, set `OTEL_METRICS_EXPORTER=none` as an environment variable per [OpenTelemetry GitHub](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#otlp-exporter-span-metric-and-log-exporters).
20+
21+
#### Logs
22+
23+
To turn off log exporting, set `OTEL_LOGS_EXPORTER=none` as an environment variable per [OpenTelemetry GitHub](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#otlp-exporter-span-metric-and-log-exporters).
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
To enable debug logging for Sentry, set `SENTRY_DEBUG=true` as an environment variable or
22
add `sentry.debug=true` to your `application.properties`.
33

4-
To show debug output for OpenTelemetry, add `-Dotel.javaagent.debug=true` to the command.
4+
To show debug output for OpenTelemetry, add `-Dotel.javaagent.debug=true` to the `java` command.
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,26 @@
1-
If you're not using the auto initialization provided by `sentry-opentelemetry-agent` (`SENTRY_AUTO_INIT=false`), you have to set the `instrumenter` option to `otel`. This disables all Sentry instrumentation and uses the chosen OpenTelemetry tracers for creating spans instead. To ensure errors are properly linked to transactions that were created by the OpenTelemetry integration, add the `OpenTelemetryLinkErrorEventProcessor`:
1+
This `java` command shows how to run your application using `sentry-opentelemetry-agent`:
22

33

4+
```bash
5+
SENTRY_AUTO_INIT=false java -javaagent:sentry-opentelemetry-agent-{{@inject packages.version('sentry.java.opentelemetry-agent') }}.jar -jar your-application.jar
6+
```
7+
8+
You can combine this with a Sentry integration, that performs the initialization for you or call `Sentry.init` manually:
9+
410
```java {tabTitle: Java}
5-
import io.sentry.Instrumenter;
611
import io.sentry.Sentry;
7-
import io.sentry.opentelemetry.OpenTelemetryLinkErrorEventProcessor;
812

913
Sentry.init(options -> {
1014
options.setDsn("___PUBLIC_DSN___");
1115
options.setTracesSampleRate(1.0);
12-
options.setInstrumenter(Instrumenter.OTEL);
13-
options.addEventProcessor(new OpenTelemetryLinkErrorEventProcessor());
1416
});
1517
```
1618

1719
```kotlin {tabTitle: Kotlin}
18-
import io.sentry.Instrumenter
1920
import io.sentry.Sentry
20-
import io.sentry.opentelemetry.OpenTelemetryLinkErrorEventProcessor
2121

2222
Sentry.init { options ->
2323
options.dsn = "___PUBLIC_DSN___"
2424
options.tracesSampleRate = 1.0
25-
options.instrumenter = Instrumenter.OTEL
26-
options.addEventProcessor(OpenTelemetryLinkErrorEventProcessor())
2725
}
2826
```
Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1-
If you're not using the auto initialization provided by `sentry-opentelemetry-agent` (`SENTRY_AUTO_INIT=false`), you have to
2-
set the `instrumenter` option to `otel`. This disables all Sentry instrumentation and uses the chosen OpenTelemetry tracers for creating spans instead:
1+
This `java` command shows how to run your application using `sentry-opentelemetry-agent`:
32

43

5-
```properties {filename:application.properties}
4+
```bash
5+
SENTRY_AUTO_INIT=false java -javaagent:sentry-opentelemetry-agent-{{@inject packages.version('sentry.java.opentelemetry-agent') }}.jar -jar your-application.jar
6+
```
7+
8+
The Spring Boot Sentry SDK will take care of initializing Sentry, just make sure a `tracesSampleRate` has been set:
9+
10+
```properties {tabTitle: application.properties}
611
sentry.dsn=___PUBLIC_DSN___
712
sentry.traces-sample-rate=1.0
8-
# enable this to see more logs
9-
sentry.debug=false
10-
# set the instrumenter to use OpenTelemetry instead of Sentry
11-
sentry.instrumenter=otel
13+
```
14+
15+
```yaml {tabTitle: application.yml}
16+
sentry:
17+
dsn: ___PUBLIC_DSN___
18+
traces-sample-rate: 1.0
1219
```
Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,61 @@
11
#### Initializing OpenTelemetry
22

3-
When manually initializing OpenTelemetry you have to add `SentrySpanProcessor` and `SentryPropagator` to your configuration.
3+
Our `sentry-opentelemetry-agentless` dependency also adds `opentelemetry-sdk-extension-autoconfigure` which takes care of configuring OpenTelemetry to work with Sentry. There's two ways to trigger it.
44

5-
```java {tabTitle: Java}
6-
import io.opentelemetry.api.OpenTelemetry;
7-
import io.opentelemetry.context.propagation.ContextPropagators;
8-
import io.opentelemetry.sdk.OpenTelemetrySdk;
9-
import io.opentelemetry.sdk.trace.SdkTracerProvider;
10-
11-
import io.sentry.opentelemetry.SentryPropagator;
12-
import io.sentry.opentelemetry.SentrySpanProcessor;
5+
1. Using a property on startup
136

7+
Add `-Dotel.java.global-autoconfigure.enabled=true` to the `java` command when starting your application.
148

15-
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
16-
.addSpanProcessor(new SentrySpanProcessor())
17-
.build();
9+
2. Using `AutoConfiguredOpenTelemetrySdk`
1810

19-
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
20-
.setTracerProvider(sdkTracerProvider)
21-
.setPropagators(ContextPropagators.create(new SentryPropagator()))
22-
.buildAndRegisterGlobal();
11+
```java {tabTitle: Java}
12+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
13+
14+
AutoConfiguredOpenTelemetrySdk.builder()
15+
.setResultAsGlobal()
16+
.addPropertiesSupplier(() -> {
17+
final Map<String, String> properties = new HashMap<>();
18+
properties.put("otel.logs.exporter", "none");
19+
properties.put("otel.metrics.exporter", "none");
20+
properties.put("otel.traces.exporter", "none");
21+
return properties;
22+
})
23+
.build();
2324
```
2425

2526
```kotlin {tabTitle: Kotlin}
26-
import io.opentelemetry.api.OpenTelemetry
27-
import io.opentelemetry.context.propagation.ContextPropagators
28-
import io.opentelemetry.sdk.OpenTelemetrySdk
29-
import io.opentelemetry.sdk.trace.SdkTracerProvider
30-
31-
import io.sentry.opentelemetry.SentryPropagator
32-
import io.sentry.opentelemetry.SentrySpanProcessor
33-
34-
val sdkTracerProvider = SdkTracerProvider.builder()
35-
.addSpanProcessor(SentrySpanProcessor())
36-
.build()
37-
38-
val openTelemetry = OpenTelemetrySdk.builder()
39-
.setTracerProvider(sdkTracerProvider)
40-
.setPropagators(ContextPropagators.create(SentryPropagator()))
41-
.buildAndRegisterGlobal()
27+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk
28+
29+
AutoConfiguredOpenTelemetrySdk.builder()
30+
.setResultAsGlobal()
31+
.addPropertiesSupplier{
32+
return mapOf(
33+
"otel.logs.exporter" to "none",
34+
"otel.metrics.exporter" to "none",
35+
"otel.traces.exporter" to "none"
36+
)
37+
}
38+
.build()
4239
```
4340

4441
#### Initializing Sentry
4542

46-
You have to set the `instrumenter` option to `otel`. This disables all Sentry instrumentation and uses the chosen OpenTelemetry tracers for creating spans.
47-
48-
To ensure errors are properly linked to transactions that were created by the OpenTelemetry integration, add the `OpenTelemetryLinkErrorEventProcessor`:
49-
43+
You can initialize Sentry as usual, fore example, by calling `Sentry.init`:
5044

5145
```java {tabTitle: Java}
52-
import io.sentry.Instrumenter;
5346
import io.sentry.Sentry;
54-
import io.sentry.opentelemetry.OpenTelemetryLinkErrorEventProcessor;
5547

5648
Sentry.init(options -> {
5749
options.setDsn("___PUBLIC_DSN___");
5850
options.setTracesSampleRate(1.0);
59-
options.setInstrumenter(Instrumenter.OTEL);
60-
options.addEventProcessor(new OpenTelemetryLinkErrorEventProcessor());
6151
});
6252
```
6353

6454
```kotlin {tabTitle: Kotlin}
65-
import io.sentry.Instrumenter
6655
import io.sentry.Sentry
67-
import io.sentry.opentelemetry.OpenTelemetryLinkErrorEventProcessor
6856

6957
Sentry.init { options ->
7058
options.dsn = "___PUBLIC_DSN___"
7159
options.tracesSampleRate = 1.0
72-
options.instrumenter = Instrumenter.OTEL
73-
options.addEventProcessor(OpenTelemetryLinkErrorEventProcessor())
7460
}
7561
```

0 commit comments

Comments
 (0)