Skip to content

Commit 5023e70

Browse files
authored
Global opentelemetry guidance (#956)
1 parent e065595 commit 5023e70

File tree

7 files changed

+80
-22
lines changed

7 files changed

+80
-22
lines changed

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 no-op 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 no-op implementation.
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/api/src/main/java/otel/NoopUsage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ public class NoopUsage {
2020
private static final String SCOPE_NAME = "fully.qualified.name";
2121

2222
public static void noopUsage() {
23-
// Access the noop OpenTelemetry instance
23+
// Access the no-op OpenTelemetry instance
2424
OpenTelemetry noopOpenTelemetry = OpenTelemetry.noop();
2525

26-
// Noop tracing
26+
// No-op tracing
2727
Tracer noopTracer = OpenTelemetry.noop().getTracer(SCOPE_NAME);
2828
noopTracer
2929
.spanBuilder("span name")
@@ -33,7 +33,7 @@ public static void noopUsage() {
3333
.addEvent("event-name", Attributes.builder().put(WIDGET_COLOR, "red").build())
3434
.end();
3535

36-
// Noop metrics
36+
// No-op metrics
3737
Attributes attributes = WIDGET_RED_CIRCLE;
3838
Meter noopMeter = OpenTelemetry.noop().getMeter(SCOPE_NAME);
3939
DoubleHistogram histogram = noopMeter.histogramBuilder("fully.qualified.histogram").build();
@@ -61,7 +61,7 @@ public static void noopUsage() {
6161
.gaugeBuilder("fully.qualified.gauge")
6262
.buildWithCallback(observable -> observable.record(10, attributes));
6363

64-
// Noop logs
64+
// No-op logs
6565
Logger noopLogger = OpenTelemetry.noop().getLogsBridge().get(SCOPE_NAME);
6666
noopLogger
6767
.logRecordBuilder()

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: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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 =
13+
GlobalOpenTelemetry.isSet() ? GlobalOpenTelemetry.get() : initializeOpenTelemetry();
14+
15+
// Install into manual instrumentation. This may involve setting as a singleton in the
16+
// application's dependency injection framework.
17+
}
18+
19+
/** Initialize OpenTelemetry SDK using autoconfiguration. */
20+
public static OpenTelemetry initializeOpenTelemetry() {
21+
return AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk();
22+
}
23+
}

doc-snippets/configuration/src/main/java/otel/OtlpAuthenticationConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private synchronized String getToken() {
8282
}
8383

8484
private static String refreshToken(String username, String password) {
85-
// For a production scenario, this would be replaced with out-of-band request to exchange
85+
// For a production scenario, this would be replaced with an out-of-band request to exchange
8686
// username / password for bearer token.
8787
return "abc123";
8888
}

0 commit comments

Comments
 (0)