Skip to content

Commit 95c3eb8

Browse files
feat(bigquery observability): add version attribute to span tracing (#12132)
This PR adds the gcp.client.version attribute to the span trace. It follows the general java guidance on retrieving version at runtime, by creating a Version.java file that stores the current version and is updated via release-please. See gapic version [here](googleapis/sdk-platform-java@67a2ecb#diff-65705b9eaa79c4e543f0325d909aa60704b3e1ae06deba47ab2690f69810a69d). [Example trace with attribute](https://screenshot.googleplex.com/3v8NTeXSUrNipuB.png). There is a [separate task](#12130) to update release-please to handle updating this file. --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 863d23b commit 95c3eb8

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public static void addCommonAttributeToSpan(Span span) {
7070
span.setAttribute(GCP_CLIENT_SERVICE, BQ_GCP_CLIENT_SERVICE)
7171
.setAttribute(GCP_CLIENT_REPO, BQ_GCP_CLIENT_REPO)
7272
.setAttribute(GCP_CLIENT_ARTIFACT, BQ_GCP_CLIENT_ARTIFACT)
73-
.setAttribute(GCP_CLIENT_LANGUAGE, BQ_GCP_CLIENT_LANGUAGE);
74-
// TODO: add version
73+
.setAttribute(GCP_CLIENT_LANGUAGE, BQ_GCP_CLIENT_LANGUAGE)
74+
.setAttribute(GCP_CLIENT_VERSION, Version.VERSION);
7575
}
7676

7777
/**
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright 2026 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.google.cloud.bigquery.telemetry;
18+
19+
import com.google.api.core.InternalApi;
20+
21+
/**
22+
* Version class defines current google-cloud-bigquery artifact version to be referenced at runtime
23+
* for telemetry purposes.
24+
*/
25+
@InternalApi("For internal use only")
26+
final class Version {
27+
// {x-version-update-start:google-cloud-bigquery:current}
28+
static final String VERSION = "2.63.0-SNAPSHOT";
29+
// {x-version-update-end}
30+
}

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/BigQueryTelemetryTracerTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,30 @@ public void testAddExceptionToSpan_NoMessage() {
164164
"CLIENT_UNKNOWN_ERROR", spanData.getAttributes().get(BigQueryTelemetryTracer.ERROR_TYPE));
165165
}
166166

167+
@Test
168+
public void testAddCommonAttributeToSpan() {
169+
BigQueryTelemetryTracer.addCommonAttributeToSpan(span);
170+
span.end();
171+
172+
List<SpanData> spans = spanExporter.getFinishedSpanItems();
173+
SpanData spanData = spans.get(0);
174+
175+
assertEquals(
176+
BigQueryTelemetryTracer.BQ_GCP_CLIENT_SERVICE,
177+
spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_SERVICE));
178+
assertEquals(
179+
BigQueryTelemetryTracer.BQ_GCP_CLIENT_REPO,
180+
spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_REPO));
181+
assertEquals(
182+
BigQueryTelemetryTracer.BQ_GCP_CLIENT_ARTIFACT,
183+
spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_ARTIFACT));
184+
assertEquals(
185+
BigQueryTelemetryTracer.BQ_GCP_CLIENT_LANGUAGE,
186+
spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_LANGUAGE));
187+
assertEquals(
188+
Version.VERSION, spanData.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_VERSION));
189+
}
190+
167191
private GoogleJsonResponseException createException(
168192
String highLevelStatusCode, String errorMessage, String detailedErrorMessage, String reason) {
169193
GoogleJsonError googleJsonError = null;

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,8 @@ private void closeAndVerifySpanData(
365365
assertEquals(
366366
responseCode,
367367
span.getAttributes().get(HttpTracingRequestInitializer.HTTP_RESPONSE_STATUS_CODE));
368+
assertEquals(
369+
Version.VERSION, span.getAttributes().get(BigQueryTelemetryTracer.GCP_CLIENT_VERSION));
368370
assertEquals(
369371
method, span.getAttributes().get(HttpTracingRequestInitializer.HTTP_REQUEST_METHOD));
370372
if (requestBodySize >= 0) {

0 commit comments

Comments
 (0)