Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e3d9ed9

Browse files
authored
feat(bigquery): Add OpenTelemetry Samples (#3899)
* feat(bigquery): Add OpenTelemetry Samples * Add dependencies to pom files * fix style * Fix dependencies, clean up sample * Add sample without parent span * Fix copy/paste error * Remove reference to global otel object * Replace custom exporter with logging exporter * Add logging exporter dep to snapshot and without-bom * Generate random strings for ds names * feat(bigquery): Add custom console exporter to samples * fix style, remove comments
1 parent 36d3e82 commit e3d9ed9

File tree

7 files changed

+515
-0
lines changed

7 files changed

+515
-0
lines changed

samples/install-without-bom/pom.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,37 @@
5959
<artifactId>google-oauth-client-jetty</artifactId>
6060
<version>1.39.0</version>
6161
</dependency>
62+
<dependency>
63+
<groupId>io.opentelemetry</groupId>
64+
<artifactId>opentelemetry-api</artifactId>
65+
<version>1.48.0</version>
66+
</dependency>
67+
<dependency>
68+
<groupId>io.opentelemetry</groupId>
69+
<artifactId>opentelemetry-context</artifactId>
70+
<version>1.48.0</version>
71+
</dependency>
72+
<dependency>
73+
<groupId>io.opentelemetry</groupId>
74+
<artifactId>opentelemetry-sdk</artifactId>
75+
<version>1.48.0</version>
76+
</dependency>
77+
<dependency>
78+
<groupId>io.opentelemetry</groupId>
79+
<artifactId>opentelemetry-sdk-common</artifactId>
80+
<version>1.48.0</version>
81+
</dependency>
82+
<dependency>
83+
<groupId>io.opentelemetry</groupId>
84+
<artifactId>opentelemetry-sdk-trace</artifactId>
85+
<version>1.48.0</version>
86+
</dependency>
87+
<dependency>
88+
<groupId>io.opentelemetry</groupId>
89+
<artifactId>opentelemetry-exporter-logging</artifactId>
90+
<version>1.48.0</version>
91+
</dependency>
92+
6293
<!-- Test dependencies -->
6394
<dependency>
6495
<groupId>com.google.cloud</groupId>

samples/snapshot/pom.xml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@
3939
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
4040
</properties>
4141

42+
<dependencyManagement>
43+
<dependencies>
44+
<dependency>
45+
<groupId>io.opentelemetry</groupId>
46+
<artifactId>opentelemetry-bom</artifactId>
47+
<version>1.48.0</version>
48+
<type>pom</type>
49+
<scope>import</scope>
50+
</dependency>
51+
</dependencies>
52+
</dependencyManagement>
53+
4254
<dependencies>
4355
<!-- {x-version-update-start:google-cloud-bigquery:current} -->
4456
<dependency>
@@ -82,6 +94,36 @@
8294
<version>1.4.4</version>
8395
<scope>test</scope>
8496
</dependency>
97+
<dependency>
98+
<groupId>io.opentelemetry</groupId>
99+
<artifactId>opentelemetry-api</artifactId>
100+
<version>1.48.0</version>
101+
</dependency>
102+
<dependency>
103+
<groupId>io.opentelemetry</groupId>
104+
<artifactId>opentelemetry-context</artifactId>
105+
<version>1.48.0</version>
106+
</dependency>
107+
<dependency>
108+
<groupId>io.opentelemetry</groupId>
109+
<artifactId>opentelemetry-sdk</artifactId>
110+
<version>1.48.0</version>
111+
</dependency>
112+
<dependency>
113+
<groupId>io.opentelemetry</groupId>
114+
<artifactId>opentelemetry-sdk-common</artifactId>
115+
<version>1.48.0</version>
116+
</dependency>
117+
<dependency>
118+
<groupId>io.opentelemetry</groupId>
119+
<artifactId>opentelemetry-sdk-trace</artifactId>
120+
<version>1.48.0</version>
121+
</dependency>
122+
<dependency>
123+
<groupId>io.opentelemetry</groupId>
124+
<artifactId>opentelemetry-exporter-logging</artifactId>
125+
<version>1.48.0</version>
126+
</dependency>
85127
</dependencies>
86128

87129
<!-- compile and run all snippet tests -->

samples/snippets/pom.xml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@
5151
<type>pom</type>
5252
<scope>import</scope>
5353
</dependency>
54+
<dependency>
55+
<groupId>io.opentelemetry</groupId>
56+
<artifactId>opentelemetry-bom</artifactId>
57+
<version>1.48.0</version>
58+
<type>pom</type>
59+
<scope>import</scope>
60+
</dependency>
5461
</dependencies>
5562
</dependencyManagement>
5663

@@ -59,6 +66,36 @@
5966
<groupId>com.google.cloud</groupId>
6067
<artifactId>google-cloud-bigquery</artifactId>
6168
</dependency>
69+
<dependency>
70+
<groupId>io.opentelemetry</groupId>
71+
<artifactId>opentelemetry-api</artifactId>
72+
<version>1.48.0</version>
73+
</dependency>
74+
<dependency>
75+
<groupId>io.opentelemetry</groupId>
76+
<artifactId>opentelemetry-context</artifactId>
77+
<version>1.48.0</version>
78+
</dependency>
79+
<dependency>
80+
<groupId>io.opentelemetry</groupId>
81+
<artifactId>opentelemetry-sdk</artifactId>
82+
<version>1.48.0</version>
83+
</dependency>
84+
<dependency>
85+
<groupId>io.opentelemetry</groupId>
86+
<artifactId>opentelemetry-sdk-common</artifactId>
87+
<version>1.48.0</version>
88+
</dependency>
89+
<dependency>
90+
<groupId>io.opentelemetry</groupId>
91+
<artifactId>opentelemetry-sdk-trace</artifactId>
92+
<version>1.48.0</version>
93+
</dependency>
94+
<dependency>
95+
<groupId>io.opentelemetry</groupId>
96+
<artifactId>opentelemetry-exporter-logging</artifactId>
97+
<version>1.48.0</version>
98+
</dependency>
6299
<!-- [END bigquery_java_dependencies] -->
63100
<!-- [END bigquery_install_with_bom] -->
64101

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*
2+
* Copyright 2025 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.example.bigquery;
18+
19+
// [START bigquery_enable_otel_tracing]
20+
import com.google.cloud.bigquery.BigQuery;
21+
import com.google.cloud.bigquery.BigQueryOptions;
22+
import com.google.cloud.bigquery.Dataset;
23+
import com.google.cloud.bigquery.DatasetInfo;
24+
import io.opentelemetry.api.OpenTelemetry;
25+
import io.opentelemetry.api.trace.Tracer;
26+
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
27+
import io.opentelemetry.sdk.OpenTelemetrySdk;
28+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
29+
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
30+
import io.opentelemetry.sdk.trace.samplers.Sampler;
31+
import java.util.logging.ConsoleHandler;
32+
import java.util.logging.Logger;
33+
34+
public class EnableOpenTelemetryTracing {
35+
private static final Logger log = Logger.getLogger(EnableOpenTelemetryTracing.class.getName());
36+
37+
public static void main(String[] args) {
38+
// Set logging to System.err.
39+
ConsoleHandler ch = new ConsoleHandler();
40+
log.addHandler(ch);
41+
42+
// TODO(developer): Replace values before running the sample.
43+
final String tracerName = "Sample Tracer";
44+
final String datasetId = "sampleDatasetId";
45+
46+
// Create TracerProvider that exports to a logger.
47+
SdkTracerProvider tracerProvider =
48+
SdkTracerProvider.builder()
49+
.addSpanProcessor(SimpleSpanProcessor.builder(LoggingSpanExporter.create()).build())
50+
.setSampler(Sampler.alwaysOn())
51+
.build();
52+
53+
// Create global OpenTelemetry instance using the TracerProvider.
54+
OpenTelemetry otel = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
55+
56+
// Create Tracer instance from the OpenTelemetry object. Tracers are used to create
57+
// Spans. There can be multiple Tracers in an OpenTelemetry instance.
58+
Tracer tracer = otel.getTracer(tracerName);
59+
60+
enableOpenTelemetry(tracer, datasetId);
61+
}
62+
63+
public static void enableOpenTelemetry(Tracer tracer, String datasetId) {
64+
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
65+
// be set to enable tracing.
66+
BigQueryOptions otelOptions =
67+
BigQueryOptions.newBuilder()
68+
.setEnableOpenTelemetryTracing(true)
69+
.setOpenTelemetryTracer(tracer)
70+
.build();
71+
BigQuery bigquery = otelOptions.getService();
72+
73+
try {
74+
// Create dataset.
75+
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
76+
Dataset dataset = bigquery.create(info);
77+
} catch (Exception e) {
78+
System.out.println(
79+
String.format("Failed to create dataset: %s: %s", e.toString(), e.getMessage()));
80+
} finally {
81+
bigquery.delete(datasetId);
82+
}
83+
}
84+
}
85+
// [END bigquery_enable_otel_tracing]
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* Copyright 2025 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.example.bigquery;
18+
19+
// [START bigquery_enable_otel_tracing_with_parent_span]
20+
import com.google.cloud.bigquery.BigQuery;
21+
import com.google.cloud.bigquery.BigQueryOptions;
22+
import com.google.cloud.bigquery.Dataset;
23+
import com.google.cloud.bigquery.DatasetInfo;
24+
import io.opentelemetry.api.OpenTelemetry;
25+
import io.opentelemetry.api.trace.Span;
26+
import io.opentelemetry.api.trace.Tracer;
27+
import io.opentelemetry.context.Scope;
28+
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
29+
import io.opentelemetry.sdk.OpenTelemetrySdk;
30+
import io.opentelemetry.sdk.trace.SdkTracerProvider;
31+
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
32+
import io.opentelemetry.sdk.trace.samplers.Sampler;
33+
import java.time.LocalDate;
34+
import java.util.logging.ConsoleHandler;
35+
import java.util.logging.Logger;
36+
37+
public class EnableOpenTelemetryTracingWithParentSpan {
38+
private static final Logger log =
39+
Logger.getLogger(EnableOpenTelemetryTracingWithParentSpan.class.getName());
40+
41+
public static void main(String[] args) {
42+
// Set logging to System.err.
43+
ConsoleHandler ch = new ConsoleHandler();
44+
log.addHandler(ch);
45+
46+
// TODO(developer): Replace values before running the sample.
47+
final String tracerName = "Sample Tracer";
48+
final String parentSpanName = "Sample Parent Span";
49+
final String datasetId = "sampleDatasetId";
50+
51+
// Create TracerProvider that exports to a logger.
52+
SdkTracerProvider tracerProvider =
53+
SdkTracerProvider.builder()
54+
.addSpanProcessor(SimpleSpanProcessor.builder(LoggingSpanExporter.create()).build())
55+
.setSampler(Sampler.alwaysOn())
56+
.build();
57+
58+
// Create OpenTelemetry instance using the TracerProvider.
59+
OpenTelemetry otel = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();
60+
61+
// Create Tracer instance from the global OpenTelemetry object. Tracers are used to create
62+
// Spans. There can be multiple Tracers in a global OpenTelemetry instance.
63+
final Tracer tracer = otel.getTracer(tracerName);
64+
enableOpenTelemetryWithParentSpan(tracer, parentSpanName, datasetId);
65+
}
66+
67+
public static void enableOpenTelemetryWithParentSpan(
68+
Tracer tracer, String parentSpanName, String datasetId) {
69+
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
70+
// be set to enable tracing.
71+
BigQueryOptions otelOptions =
72+
BigQueryOptions.newBuilder()
73+
.setEnableOpenTelemetryTracing(true)
74+
.setOpenTelemetryTracer(tracer)
75+
.build();
76+
BigQuery bigquery = otelOptions.getService();
77+
78+
LocalDate currentDate = LocalDate.now();
79+
80+
// Create the root parent Span. setNoParent() ensures that it is a parent Span with a Span ID
81+
// of 0.
82+
Span parentSpan =
83+
tracer
84+
.spanBuilder(parentSpanName)
85+
.setNoParent()
86+
.setAttribute("current_date", currentDate.toString())
87+
.startSpan();
88+
89+
// The Span Context is automatically passed on to any functions called within the scope of the
90+
// try block. parentSpan.makeCurrent() sets parentSpan to be the parent of any Spans created in
91+
// this scope, or the scope of any functions called within this scope.
92+
try (Scope parentScope = parentSpan.makeCurrent()) {
93+
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
94+
Dataset dataset = bigquery.create(info);
95+
} catch (Exception e) {
96+
System.out.println(
97+
String.format("Failed to create dataset: %s: %s", e.toString(), e.getMessage()));
98+
} finally {
99+
// finally block ensures that Spans are cleaned up properly.
100+
parentSpan.end();
101+
bigquery.delete(datasetId);
102+
}
103+
}
104+
}
105+
// [END bigquery_enable_otel_tracing_with_parent_span]

0 commit comments

Comments
 (0)