Skip to content

Commit 1469ff1

Browse files
committed
Native and manual instrumentation guidance for GlobalOpenTelemetry
1 parent bb9bf63 commit 1469ff1

5 files changed

Lines changed: 77 additions & 17 deletions

File tree

doc-snippets/api/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ java {
1111
}
1212

1313
dependencies {
14-
implementation("io.opentelemetry:opentelemetry-api")
14+
// TODO: revert version after 2.23.0 instrumentation release
15+
implementation("io.opentelemetry:opentelemetry-api:1.57.0")
1516

1617
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
1718
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.37.0-alpha")
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package otel;
2+
3+
import io.opentelemetry.api.GlobalOpenTelemetry;
4+
import io.opentelemetry.api.OpenTelemetry;
5+
6+
public class GlobalOpenTelemetryNativeInstrumentationUsage {
7+
8+
public static void globalOpenTelemetryUsage(OpenTelemetry openTelemetry) {
9+
// Initialized with OpenTelemetry from java agent if present, otherwise noop implementation.
10+
MyClient client1 = new MyClientBuilder().build();
11+
12+
// Initialized with an explicit OpenTelemetry instance, overriding the java agent instance.
13+
MyClient client2 = new MyClientBuilder().setOpenTelemetry(openTelemetry).build();
14+
}
15+
16+
/**
17+
* An example library with native OpenTelemetry instrumentation, initialized via {@link
18+
* MyClientBuilder}.
19+
*/
20+
public static class MyClient {
21+
private final OpenTelemetry openTelemetry;
22+
23+
private MyClient(OpenTelemetry openTelemetry) {
24+
this.openTelemetry = openTelemetry;
25+
}
26+
27+
// ... library methods omitted
28+
}
29+
30+
/** Builder for {@link MyClient}. */
31+
public static class MyClientBuilder {
32+
// OpenTelemetry defaults to the GlobalOpenTelemetry instance if set, e.g. by the java agent or
33+
// by the application, else to a noop.
34+
private OpenTelemetry openTelemetry = GlobalOpenTelemetry.getOrNoop();
35+
36+
/** Explicitly set the OpenTelemetry instance to use. */
37+
public MyClientBuilder setOpenTelemetry(OpenTelemetry openTelemetry) {
38+
this.openTelemetry = openTelemetry;
39+
return this;
40+
}
41+
42+
/** Build the client. */
43+
public MyClient build() {
44+
return new MyClient(openTelemetry);
45+
}
46+
}
47+
}

doc-snippets/api/src/main/java/otel/GlobalOpenTelemetryUsage.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

doc-snippets/configuration/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ java {
1111
}
1212

1313
dependencies {
14+
// TODO: delete after 2.23.0 instrumentation release
15+
implementation("io.opentelemetry:opentelemetry-api:1.57.0")
16+
1417
implementation("io.opentelemetry:opentelemetry-sdk")
1518
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
1619

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package otel;
2+
3+
import io.opentelemetry.api.GlobalOpenTelemetry;
4+
import io.opentelemetry.api.OpenTelemetry;
5+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
6+
7+
public class GlobalOpenTelemetryManualInstrumentationUsage {
8+
9+
public static void globalOpenTelemetryUsage() {
10+
// If GlobalOpenTelemetry is already set, e.g. by the java agent, use it.
11+
// Else, initialize an OpenTelemetry SDK instance and use it.
12+
OpenTelemetry openTelemetry = GlobalOpenTelemetry.isSet()
13+
? GlobalOpenTelemetry.get()
14+
: initializeOpenTelemetry();
15+
16+
// Install into manual instrumentation. This may involve setting as a singleton in the application's dependency injection framework.
17+
}
18+
19+
/**
20+
* Initialize OpenTelemetry SDK using autoconfiguration.
21+
*/
22+
public static OpenTelemetry initializeOpenTelemetry() {
23+
return AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk();
24+
}
25+
}

0 commit comments

Comments
 (0)