Skip to content

Commit 99dfcde

Browse files
authored
Include Java example code excerpts (open-telemetry#4642)
1 parent d76b9bd commit 99dfcde

File tree

12 files changed

+313
-84
lines changed

12 files changed

+313
-84
lines changed

.gitmodules

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,7 @@
2727
[submodule "content-modules/opentelemetry-go"]
2828
path = content-modules/opentelemetry-go
2929
url = https://github.com/open-telemetry/opentelemetry-go
30-
go-pin = v1.27.0
30+
go-pin = v1.27.0
31+
[submodule "content-modules/opentelemetry-java-examples"]
32+
path = content-modules/opentelemetry-java-examples
33+
url = https://github.com/open-telemetry/opentelemetry-java-examples.git

content/en/docs/languages/java/exporters.md

+147-57
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ weight: 50
44
cSpell:ignore: okhttp
55
---
66

7+
<!-- markdownlint-disable blanks-around-fences -->
8+
<?code-excerpt path-base="examples/java/exporters"?>
9+
710
{{% docs/languages/exporters/intro java %}}
811

912
### Dependencies {#otlp-dependencies}
@@ -18,7 +21,9 @@ suffice and be the most simple:
1821

1922
```kotlin
2023
dependencies {
21-
implementation 'io.opentelemetry:opentelemetry-exporter-otlp:{{% param vers.otel %}}'
24+
implementation("io.opentelemetry:opentelemetry-exporter-otlp:{{% param vers.otel %}}")
25+
implementation("io.opentelemetry:opentelemetry-sdk:{{% param vers.otel %}}")
26+
implementation("io.opentelemetry.semconv:opentelemetry-semconv:{{% param vers.semconv %}}-alpha")
2227
}
2328
```
2429

@@ -31,6 +36,15 @@ dependencies {
3136
<groupId>io.opentelemetry</groupId>
3237
<artifactId>opentelemetry-exporter-otlp</artifactId>
3338
</dependency>
39+
<dependency>
40+
<groupId>io.opentelemetry</groupId>
41+
<artifactId>opentelemetry-sdk</artifactId>
42+
</dependency>
43+
<dependency>
44+
<groupId>io.opentelemetry.semconv</groupId>
45+
<artifactId>opentelemetry-semconv</artifactId>
46+
<version>{{% param vers.semconv %}}-alpha</version>
47+
</dependency>
3448
</dependencies>
3549
</project>
3650
```
@@ -94,31 +108,30 @@ Note, that in the case of exporting via OTLP you do not need to set
94108
In the case of [manual configuration] you can update the [example app](/docs/languages/java/instrumentation#example-app)
95109
like the following:
96110

97-
```java { hl_lines=["12-14",21,"39-53"] }
111+
<!-- prettier-ignore-start -->
112+
<?code-excerpt "src/main/java/otel/DiceApplication.java"?>
113+
```java
98114
package otel;
99115

100-
import org.springframework.boot.SpringApplication;
101-
import org.springframework.boot.Banner;
102-
import org.springframework.boot.autoconfigure.SpringBootApplication;
103-
import org.springframework.context.annotation.Bean;
104-
105116
import io.opentelemetry.api.OpenTelemetry;
106-
import io.opentelemetry.api.common.Attributes;
107117
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
108118
import io.opentelemetry.context.propagation.ContextPropagators;
119+
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
109120
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
110121
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
111-
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
112122
import io.opentelemetry.sdk.OpenTelemetrySdk;
123+
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
124+
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
113125
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
114126
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
115127
import io.opentelemetry.sdk.resources.Resource;
116128
import io.opentelemetry.sdk.trace.SdkTracerProvider;
117129
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
118-
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
119-
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
120-
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
121-
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
130+
import io.opentelemetry.semconv.ServiceAttributes;
131+
import org.springframework.boot.Banner;
132+
import org.springframework.boot.SpringApplication;
133+
import org.springframework.boot.autoconfigure.SpringBootApplication;
134+
import org.springframework.context.annotation.Bean;
122135

123136
@SpringBootApplication
124137
public class DiceApplication {
@@ -130,35 +143,47 @@ public class DiceApplication {
130143

131144
@Bean
132145
public OpenTelemetry openTelemetry() {
133-
Resource resource = Resource.getDefault().toBuilder().put(SERVICE_NAME, "dice-server").put(SERVICE_VERSION, "0.1.0").build();
146+
Resource resource =
147+
Resource.getDefault().toBuilder()
148+
.put(ServiceAttributes.SERVICE_NAME, "dice-server")
149+
.put(ServiceAttributes.SERVICE_VERSION, "0.1.0")
150+
.build();
134151

135-
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
136-
.addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().build()).build())
152+
SdkTracerProvider sdkTracerProvider =
153+
SdkTracerProvider.builder()
154+
.addSpanProcessor(
155+
BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().build()).build())
137156
.setResource(resource)
138157
.build();
139158

140-
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
141-
.registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build())
159+
SdkMeterProvider sdkMeterProvider =
160+
SdkMeterProvider.builder()
161+
.registerMetricReader(
162+
PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build())
142163
.setResource(resource)
143164
.build();
144165

145-
SdkLoggerProvider sdkLoggerProvider = SdkLoggerProvider.builder()
166+
SdkLoggerProvider sdkLoggerProvider =
167+
SdkLoggerProvider.builder()
146168
.addLogRecordProcessor(
147-
BatchLogRecordProcessor.builder(OtlpGrpcLogRecordExporter.builder().build()).build())
169+
BatchLogRecordProcessor.builder(OtlpGrpcLogRecordExporter.builder().build())
170+
.build())
148171
.setResource(resource)
149172
.build();
150173

151-
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
152-
.setTracerProvider(sdkTracerProvider)
153-
.setMeterProvider(sdkMeterProvider)
154-
.setLoggerProvider(sdkLoggerProvider)
155-
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
156-
.buildAndRegisterGlobal();
174+
OpenTelemetry openTelemetry =
175+
OpenTelemetrySdk.builder()
176+
.setTracerProvider(sdkTracerProvider)
177+
.setMeterProvider(sdkMeterProvider)
178+
.setLoggerProvider(sdkLoggerProvider)
179+
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
180+
.buildAndRegisterGlobal();
157181

158182
return openTelemetry;
159183
}
160184
}
161185
```
186+
<!-- prettier-ignore-end -->
162187

163188
## Console
164189

@@ -217,15 +242,29 @@ dependencies {
217242
Update your OpenTelemetry configuration to use the exporter and to send data to
218243
your Prometheus backend:
219244

245+
<!-- prettier-ignore-start -->
246+
<?code-excerpt "src/main/java/otel/PrometheusExporter.java"?>
220247
```java
248+
package otel;
249+
221250
import io.opentelemetry.exporter.prometheus.PrometheusHttpServer;
251+
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
252+
import io.opentelemetry.sdk.resources.Resource;
222253

223-
int prometheusPort = 9464;
224-
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
225-
.registerMetricReader(PrometheusHttpServer.builder().setPort(prometheusPort).build())
226-
.setResource(resource)
227-
.build();
254+
public class PrometheusExporter {
255+
public static SdkMeterProvider create(Resource resource) {
256+
int prometheusPort = 9464;
257+
SdkMeterProvider sdkMeterProvider =
258+
SdkMeterProvider.builder()
259+
.registerMetricReader(PrometheusHttpServer.builder().setPort(prometheusPort).build())
260+
.setResource(resource)
261+
.build();
262+
263+
return sdkMeterProvider;
264+
}
265+
}
228266
```
267+
<!-- prettier-ignore-end -->
229268

230269
With the above you can access your metrics at <http://localhost:9464/metrics>.
231270
Prometheus or an OpenTelemetry Collector with the Prometheus receiver can scrape
@@ -268,53 +307,104 @@ dependencies {
268307
Update your OpenTelemetry configuration to use the exporter and to send data to
269308
your Zipkin backend:
270309

310+
<!-- prettier-ignore-start -->
311+
<?code-excerpt "src/main/java/otel/ZipkinExporter.java"?>
271312
```java
313+
package otel;
314+
272315
import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter;
316+
import io.opentelemetry.sdk.resources.Resource;
317+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
318+
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
273319

274-
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
275-
.addSpanProcessor(BatchSpanProcessor.builder(ZipkinSpanExporter.builder().setEndpoint("http://localhost:9411/api/v2/spans").build()).build())
276-
.setResource(resource)
277-
.build();
320+
public class ZipkinExporter {
321+
public static SdkTracerProvider create(Resource resource) {
322+
SdkTracerProvider sdkTracerProvider =
323+
SdkTracerProvider.builder()
324+
.addSpanProcessor(
325+
BatchSpanProcessor.builder(
326+
ZipkinSpanExporter.builder()
327+
.setEndpoint("http://localhost:9411/api/v2/spans")
328+
.build())
329+
.build())
330+
.setResource(resource)
331+
.build();
332+
333+
return sdkTracerProvider;
334+
}
335+
}
278336
```
337+
<!-- prettier-ignore-end -->
279338

280339
{{% docs/languages/exporters/outro java "https://javadoc.io/doc/io.opentelemetry/opentelemetry-sdk-trace/latest/io/opentelemetry/sdk/trace/export/SpanExporter.html" %}}
281340

282341
{{< tabpane text=true >}} {{% tab Batch %}}
283342

343+
<!-- prettier-ignore-start -->
344+
<?code-excerpt "src/main/java/otel/BatchExporter.java"?>
284345
```java
285-
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
286-
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
346+
package otel;
287347

288-
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
289-
.addSpanProcessor(BatchSpanProcessor.builder(...).build())
290-
.setResource(resource)
291-
.build();
348+
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
349+
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
350+
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
351+
import io.opentelemetry.sdk.resources.Resource;
352+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
353+
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
354+
import io.opentelemetry.sdk.trace.export.SpanExporter;
355+
356+
public class BatchExporter {
357+
public static void create(
358+
Resource resource, SpanExporter spanExporter, LogRecordExporter logExporter) {
359+
SdkTracerProvider sdkTracerProvider =
360+
SdkTracerProvider.builder()
361+
.addSpanProcessor(BatchSpanProcessor.builder(spanExporter).build())
362+
.setResource(resource)
363+
.build();
292364

293-
SdkLoggerProvider sdkLoggerProvider = SdkLoggerProvider.builder()
294-
.addLogRecordProcessor(
295-
BatchLogRecordProcessor.builder(...).build())
296-
.setResource(resource)
297-
.build();
365+
SdkLoggerProvider sdkLoggerProvider =
366+
SdkLoggerProvider.builder()
367+
.addLogRecordProcessor(BatchLogRecordProcessor.builder(logExporter).build())
368+
.setResource(resource)
369+
.build();
370+
}
371+
}
298372
```
299373

300374
{{% /tab %}} {{% tab Simple %}}
301375

376+
<?code-excerpt "src/main/java/otel/SimpleExporter.java"?>
302377
```java
303-
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
304-
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
378+
package otel;
305379

306-
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
307-
.addSpanProcessor(SimpleSpanProcessor.builder(...).build())
308-
.setResource(resource)
309-
.build();
380+
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
381+
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
382+
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
383+
import io.opentelemetry.sdk.resources.Resource;
384+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
385+
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
386+
import io.opentelemetry.sdk.trace.export.SpanExporter;
387+
388+
public class SimpleExporter {
389+
public static void create(
390+
Resource resource, SpanExporter spanExporter, LogRecordExporter logExporter) {
391+
SdkTracerProvider sdkTracerProvider =
392+
SdkTracerProvider.builder()
393+
.addSpanProcessor(SimpleSpanProcessor.builder(spanExporter).build())
394+
.setResource(resource)
395+
.build();
310396

311-
SdkLoggerProvider sdkLoggerProvider = SdkLoggerProvider.builder()
312-
.addLogRecordProcessor(
313-
SimpleLogRecordProcessor.builder(...).build())
314-
.setResource(resource)
315-
.build();
397+
SdkLoggerProvider sdkLoggerProvider =
398+
SdkLoggerProvider.builder()
399+
.addLogRecordProcessor(SimpleLogRecordProcessor.create(logExporter))
400+
.setResource(resource)
401+
.build();
402+
}
403+
}
316404
```
317405

318406
{{< /tab >}} {{< /tabpane>}}
319407

408+
<!-- prettier-ignore-end -->
409+
320410
{{% /docs/languages/exporters/outro %}}

content/en/docs/languages/java/getting-started.md

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ description: Get telemetry for your app in less than 5 minutes!
44
weight: 10
55
---
66

7+
<!-- markdownlint-disable blanks-around-fences -->
8+
<?code-excerpt path-base="examples/java/getting-started"?>
9+
710
This page will show you how to get started with OpenTelemetry in Java.
811

912
You will learn how you can instrument a simple Java application automatically,
@@ -58,11 +61,13 @@ dependencies {
5861
In that same folder, create a file called `DiceApplication.java` and add the
5962
following code to the file:
6063

64+
<!-- prettier-ignore-start -->
65+
<?code-excerpt "src/main/java/otel/DiceApplication.java"?>
6166
```java
6267
package otel;
6368

64-
import org.springframework.boot.SpringApplication;
6569
import org.springframework.boot.Banner;
70+
import org.springframework.boot.SpringApplication;
6671
import org.springframework.boot.autoconfigure.SpringBootApplication;
6772

6873
@SpringBootApplication
@@ -74,10 +79,13 @@ public class DiceApplication {
7479
}
7580
}
7681
```
82+
<!-- prettier-ignore-end -->
7783

7884
Create another file called `RollController.java` and add the following code to
7985
the file:
8086

87+
<!-- prettier-ignore-start -->
88+
<?code-excerpt "src/main/java/otel/RollController.java"?>
8189
```java
8290
package otel;
8391

@@ -109,6 +117,7 @@ public class RollController {
109117
}
110118
}
111119
```
120+
<!-- prettier-ignore-end -->
112121

113122
Build and run the application with the following command, then open
114123
<http://localhost:8080/rolldice> in your web browser to ensure it is working.

0 commit comments

Comments
 (0)