Skip to content

Commit aa3cdbd

Browse files
authored
Update OTLP Trace Example to use Auth Extension (#391)
* Add required dependencies * Use auth extension for OTLP example * Make empty classifier name more apparent
1 parent 404b12a commit aa3cdbd

File tree

4 files changed

+17
-71
lines changed

4 files changed

+17
-71
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ subprojects {
165165
openTelemetryInstrumentationBomVersion = '2.8.0'
166166
openTelemetryInstrumentationVersion = '2.8.0'
167167
openTelemetrySemconvVersion = '1.27.0'
168-
openTelemetryContribVersion = '1.39.0'
168+
openTelemetryContribVersion = '1.43.0'
169169
junitVersion = '4.13'
170170
junit5Version = '5.10.0'
171171
mockitoVersion = '5.2.0'
@@ -212,6 +212,7 @@ subprojects {
212212
opentelemetry_otlp_exporter : "io.opentelemetry:opentelemetry-exporter-otlp:${openTelemetryVersion}",
213213
opentelemetry_logging_exporter : "io.opentelemetry:opentelemetry-exporter-logging:${openTelemetryVersion}",
214214
opentelemetry_gcp_resources : "io.opentelemetry.contrib:opentelemetry-gcp-resources:${openTelemetryContribVersion}-alpha",
215+
opentelemetry_gcp_auth_extension : "io.opentelemetry.contrib:opentelemetry-gcp-auth-extension:${openTelemetryContribVersion}-alpha",
215216
spring_boot_starter : "org.springframework.boot:spring-boot-starter:${springVersion}",
216217
spring_boot_starter_web : "org.springframework.boot:spring-boot-starter-web:${springWebVersion}",
217218
spring_boot_starter_actuator : "org.springframework.boot:spring-boot-starter-actuator:${springVersion}",

examples/otlptrace/README.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,6 @@ Next, set your endpoint with the `OTEL_EXPORTER_OTLP_ENDPOINT` environment varia
1717
export OTEL_EXPORTER_OTLP_ENDPOINT="http://your-endpoint:port"
1818
```
1919

20-
Next, update [`build.gradle`](build.grade) to set the following:
21-
22-
```
23-
'-Dotel.resource.attributes=gcp.project_id=<YOUR_PROJECT_ID>,
24-
'-Dotel.exporter.otlp.headers=X-Goog-User-Project=<YOUR_QUOTA_PROJECT>',
25-
# Optional - if you want to export using gRPC protocol
26-
'-Dotel.exporter.otlp.protocol=grpc',
27-
```
28-
2920
Finally, to run the sample from the project root:
3021

3122
```

examples/otlptrace/build.gradle

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,33 @@ plugins {
2020
// examples are not published, so version can be hardcoded
2121
version = '0.1.0'
2222

23-
mainClassName = 'com.google.cloud.opentelemetry.example.otlptrace.OTLPTraceExample'
24-
2523
description = 'Example for OTLP exporter'
2624

25+
// the shaded variant name for gcp auth extension is an empty string
26+
def gcp_auth_extension_shaded_classifier = ''
27+
2728
dependencies {
2829
implementation(libraries.opentelemetry_api)
2930
implementation(libraries.opentelemetry_sdk)
3031
implementation(libraries.opentelemetry_otlp_exporter)
3132
implementation(libraries.opentelemetry_sdk_autoconf)
32-
implementation(libraries.google_auth)
33+
implementation("${libraries.opentelemetry_gcp_auth_extension}:${gcp_auth_extension_shaded_classifier}")
34+
implementation(libraries.opentelemetry_gcp_resources)
3335
}
3436

3537
// Provide headers from env variable
36-
// export OTEL_EXPORTER_OTLP_ENDPOINT="http://path/to/yourendpoint:port"
3738
def autoconf_config = [
38-
'-Dotel.resource.attributes=gcp.project_id=<YOUR_PROJECT>',
39-
'-Dotel.exporter.otlp.headers=X-Goog-User-Project=<YOUR_QUOTA_PROJECT>',
39+
'-Dgoogle.cloud.project=your-gcp-project-id',
40+
'-Dotel.exporter.otlp.endpoint=https://your-api-endpoint:port',
4041
'-Dotel.traces.exporter=otlp',
42+
'-Dotel.logs.exporter=none',
43+
'-Dotel.metrics.exporter=none',
44+
'-Dotel.service.name=otlptrace-example',
4145
'-Dotel.exporter.otlp.protocol=http/protobuf',
4246
'-Dotel.java.global-autoconfigure.enabled=true',
4347
]
4448

4549
application {
50+
mainClassName = 'com.google.cloud.opentelemetry.example.otlptrace.OTLPTraceExample'
4651
applicationDefaultJvmArgs = autoconf_config
4752
}

examples/otlptrace/src/main/java/com/google/cloud/opentelemetry/example/otlptrace/OTLPTraceExample.java

Lines changed: 4 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,11 @@
1515
*/
1616
package com.google.cloud.opentelemetry.example.otlptrace;
1717

18-
import com.google.auth.oauth2.GoogleCredentials;
1918
import io.opentelemetry.api.trace.Span;
2019
import io.opentelemetry.context.Scope;
21-
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
22-
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
23-
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
24-
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
2520
import io.opentelemetry.sdk.OpenTelemetrySdk;
2621
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
2722
import io.opentelemetry.sdk.common.CompletableResultCode;
28-
import io.opentelemetry.sdk.trace.export.SpanExporter;
2923
import java.io.IOException;
3024
import java.util.Random;
3125
import java.util.concurrent.TimeUnit;
@@ -36,52 +30,6 @@ public class OTLPTraceExample {
3630

3731
private static OpenTelemetrySdk openTelemetrySdk;
3832

39-
private static OpenTelemetrySdk setupTraceExporter() throws IOException {
40-
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
41-
42-
// Update the SDK configured using environment variables and system properties
43-
AutoConfiguredOpenTelemetrySdk autoConfOTelSdk =
44-
AutoConfiguredOpenTelemetrySdk.builder()
45-
.addSpanExporterCustomizer(
46-
(exporter, configProperties) -> addAuthorizationHeaders(exporter, credentials))
47-
.build();
48-
return autoConfOTelSdk.getOpenTelemetrySdk();
49-
}
50-
51-
// Modifies the span exporter initially auto-configured using environment variables
52-
// Note: This adds static authorization headers which are set only at initialization time.
53-
// This will stop working after the token expires, since the token is not refreshed.
54-
private static SpanExporter addAuthorizationHeaders(
55-
SpanExporter exporter, GoogleCredentials credentials) {
56-
if (exporter instanceof OtlpHttpSpanExporter) {
57-
try {
58-
credentials.refreshIfExpired();
59-
OtlpHttpSpanExporterBuilder builder =
60-
((OtlpHttpSpanExporter) exporter)
61-
.toBuilder()
62-
.addHeader(
63-
"Authorization", "Bearer " + credentials.getAccessToken().getTokenValue());
64-
65-
return builder.build();
66-
} catch (IOException e) {
67-
System.out.println("error:" + e.getMessage());
68-
}
69-
} else if (exporter instanceof OtlpGrpcSpanExporter) {
70-
try {
71-
credentials.refreshIfExpired();
72-
OtlpGrpcSpanExporterBuilder builder =
73-
((OtlpGrpcSpanExporter) exporter)
74-
.toBuilder()
75-
.addHeader(
76-
"Authorization", "Bearer " + credentials.getAccessToken().getTokenValue());
77-
return builder.build();
78-
} catch (IOException e) {
79-
throw new RuntimeException(e);
80-
}
81-
}
82-
return exporter;
83-
}
84-
8533
private static void myUseCase(String description) {
8634
// Generate a span
8735
Span span =
@@ -93,7 +41,6 @@ private static void myUseCase(String description) {
9341
String work = String.format("%s - Work #%d", description, (i + 1));
9442
doWork(work);
9543
}
96-
9744
span.addEvent("Event B");
9845
} finally {
9946
span.end();
@@ -106,7 +53,9 @@ private static void doWork(String description) {
10653
openTelemetrySdk.getTracer(INSTRUMENTATION_SCOPE_NAME).spanBuilder(description).startSpan();
10754
try (Scope scope = span.makeCurrent()) {
10855
// Simulate work: this could be simulating a network request or an expensive disk operation
109-
Thread.sleep(100 + random.nextInt(5) * 100);
56+
int randomSleep = random.nextInt(5) * 100;
57+
span.setAttribute("RandomSleep", randomSleep);
58+
Thread.sleep(100 + randomSleep);
11059
} catch (InterruptedException e) {
11160
throw new RuntimeException(e);
11261
} finally {
@@ -116,7 +65,7 @@ private static void doWork(String description) {
11665

11766
public static void main(String[] args) throws IOException {
11867
// Configure the OpenTelemetry pipeline with CloudTrace exporter
119-
openTelemetrySdk = setupTraceExporter();
68+
openTelemetrySdk = AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk();
12069

12170
// Application-specific logic
12271
myUseCase("One");

0 commit comments

Comments
 (0)