Skip to content

Commit 051c352

Browse files
chore(bigquery-jdbc): link OpenTelemetry instrumentation with underlying SDK (#13293)
b/517588332 This PR completes the linkage between the JDBC driver's OpenTelemetry instrumentation and the underlying BigQuery SDK to ensure full end-to-end traces. ## Key Changes - **Dependency**: Added `io.grpc:grpc-opentelemetry` to intercept low-level gRPC network spans for the Storage API. - **REST API**: Enabled `setEnableOpenTelemetryTracing(true)` in `BigQueryOptions` to unlock SDK-level tracing for standard queries. - **HTAPI (Storage API)**: Enabled `setEnableOpenTelemetryTracing(true)` in `BigQueryReadSettings` and wired the `GrpcOpenTelemetry` interceptor to the channel builder. - **Global OTel**: Ensured the `useGlobalOpenTelemetry` flag is respected when configuring the Storage API client.
1 parent 568c616 commit 051c352

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

java-bigquery-jdbc/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,16 @@
320320
<groupId>io.grpc</groupId>
321321
<artifactId>grpc-netty-shaded</artifactId>
322322
</dependency>
323+
<dependency>
324+
<groupId>io.grpc</groupId>
325+
<artifactId>grpc-opentelemetry</artifactId>
326+
<exclusions>
327+
<exclusion>
328+
<groupId>io.opentelemetry</groupId>
329+
<artifactId>opentelemetry-api</artifactId>
330+
</exclusion>
331+
</exclusions>
332+
</dependency>
323333

324334
<dependency>
325335
<groupId>org.apache.arrow</groupId>

java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryConnection.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import com.google.cloud.logging.Logging;
4545
import com.google.common.annotations.VisibleForTesting;
4646
import com.google.common.collect.ImmutableSortedSet;
47+
import io.grpc.ManagedChannelBuilder;
48+
import io.grpc.opentelemetry.GrpcOpenTelemetry;
4749
import io.opentelemetry.api.OpenTelemetry;
4850
import io.opentelemetry.api.baggage.Baggage;
4951
import io.opentelemetry.api.trace.Tracer;
@@ -1139,6 +1141,7 @@ private BigQuery getBigQueryConnection() {
11391141
|| this.useGlobalOpenTelemetry) {
11401142
Tracer sdkTracer = this.openTelemetry.getTracer(BigQueryJdbcOpenTelemetry.BIGQUERY_NAMESPACE);
11411143
bigQueryOptions.setOpenTelemetryTracer(sdkTracer);
1144+
bigQueryOptions.setEnableOpenTelemetryTracing(true);
11421145
this.tracer =
11431146
this.openTelemetry.getTracer(BigQueryJdbcOpenTelemetry.INSTRUMENTATION_SCOPE_NAME);
11441147
}
@@ -1176,7 +1179,20 @@ private BigQueryReadClient getBigQueryReadClientConnection() throws IOException
11761179
}
11771180
TransportChannelProvider activeProvider = this.transportChannelProvider;
11781181
if (activeProvider == null) {
1179-
activeProvider = BigQueryReadSettings.defaultGrpcTransportProviderBuilder().build();
1182+
InstantiatingGrpcChannelProvider.Builder builder =
1183+
BigQueryReadSettings.defaultGrpcTransportProviderBuilder();
1184+
if (this.enableGcpTraceExporter
1185+
|| this.customOpenTelemetry != null
1186+
|| this.useGlobalOpenTelemetry) {
1187+
GrpcOpenTelemetry grpcOpenTelemetry =
1188+
GrpcOpenTelemetry.newBuilder().sdk(this.openTelemetry).build();
1189+
builder.setChannelConfigurator(
1190+
b -> {
1191+
grpcOpenTelemetry.configureChannelBuilder((ManagedChannelBuilder) b);
1192+
return b;
1193+
});
1194+
}
1195+
activeProvider = builder.build();
11801196
}
11811197

11821198
if (activeProvider instanceof InstantiatingGrpcChannelProvider) {
@@ -1191,8 +1207,11 @@ private BigQueryReadClient getBigQueryReadClientConnection() throws IOException
11911207

11921208
bigQueryReadSettings.setTransportChannelProvider(activeProvider);
11931209

1194-
if (this.enableGcpTraceExporter || this.customOpenTelemetry != null) {
1210+
if (this.enableGcpTraceExporter
1211+
|| this.customOpenTelemetry != null
1212+
|| this.useGlobalOpenTelemetry) {
11951213
bigQueryReadSettings.setOpenTelemetryTracerProvider(this.openTelemetry.getTracerProvider());
1214+
bigQueryReadSettings.setEnableOpenTelemetryTracing(true);
11961215
}
11971216

11981217
return BigQueryReadClient.create(bigQueryReadSettings.build());

0 commit comments

Comments
 (0)