diff --git a/java-spanner/google-cloud-spanner/pom.xml b/java-spanner/google-cloud-spanner/pom.xml
index 85e5b9ebc27c..1a1077fbef78 100644
--- a/java-spanner/google-cloud-spanner/pom.xml
+++ b/java-spanner/google-cloud-spanner/pom.xml
@@ -179,7 +179,7 @@
org.apache.maven.plugins
maven-dependency-plugin
- io.grpc:grpc-protobuf-lite,org.hamcrest:hamcrest,org.hamcrest:hamcrest-core,com.google.errorprone:error_prone_annotations,org.openjdk.jmh:jmh-generator-annprocess,com.google.api.grpc:grpc-google-cloud-spanner-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1,javax.annotation:javax.annotation-api,io.opencensus:opencensus-impl,org.graalvm.sdk:graal-sdk,io.grpc:grpc-googleapis,io.grpc:grpc-rls,com.google.api.grpc:proto-google-cloud-spanner-executor-v1,com.google.api.grpc:grpc-google-cloud-spanner-executor-v1
+ io.grpc:grpc-protobuf-lite,org.hamcrest:hamcrest,org.hamcrest:hamcrest-core,com.google.errorprone:error_prone_annotations,org.openjdk.jmh:jmh-generator-annprocess,com.google.api.grpc:grpc-google-cloud-spanner-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1,javax.annotation:javax.annotation-api,io.opencensus:opencensus-impl,org.graalvm.sdk:graal-sdk,io.grpc:grpc-googleapis,io.grpc:grpc-rls,com.google.api.grpc:proto-google-cloud-spanner-executor-v1,com.google.api.grpc:grpc-google-cloud-spanner-executor-v1,io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi
@@ -304,8 +304,12 @@
opentelemetry-sdk-metrics
- com.google.cloud.opentelemetry
- detector-resources-support
+ io.opentelemetry.contrib
+ opentelemetry-gcp-resources
+
+
+ io.opentelemetry
+ opentelemetry-sdk-extension-autoconfigure-spi
com.google.cloud
diff --git a/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java b/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java
index 5ba34207ea08..8c73b0c1a813 100644
--- a/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java
+++ b/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java
@@ -16,7 +16,6 @@
package com.google.cloud.spanner;
-import static com.google.cloud.opentelemetry.detection.GCPPlatformDetector.SupportedPlatform.GOOGLE_KUBERNETES_ENGINE;
import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_HASH_KEY;
import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_NAME_KEY;
import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_UID_KEY;
@@ -29,9 +28,6 @@
import com.google.api.gax.core.GaxProperties;
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
import com.google.auth.Credentials;
-import com.google.cloud.opentelemetry.detection.AttributeKeys;
-import com.google.cloud.opentelemetry.detection.DetectedPlatform;
-import com.google.cloud.opentelemetry.detection.GCPPlatformDetector;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.hash.HashFunction;
@@ -39,8 +35,10 @@
import io.grpc.ManagedChannelBuilder;
import io.grpc.opentelemetry.GrpcOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
+import io.opentelemetry.contrib.gcp.resource.GCPResourceProvider;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
@@ -264,12 +262,14 @@ static String detectClientLocation() {
if (location == null) {
location = default_location;
if (quickCheckIsRunningOnGcp()) {
- GCPPlatformDetector detector = GCPPlatformDetector.DEFAULT_INSTANCE;
- DetectedPlatform detectedPlatform = detector.detectPlatform();
- // All platform except GKE uses "cloud_region" for region attribute.
- String region = detectedPlatform.getAttributes().get("cloud_region");
- if (detectedPlatform.getSupportedPlatform() == GOOGLE_KUBERNETES_ENGINE) {
- region = detectedPlatform.getAttributes().get(AttributeKeys.GKE_CLUSTER_LOCATION);
+ Attributes detectedResourceAttributes = new GCPResourceProvider().getAttributes();
+ // All platform except GKE uses "cloud.region" for region attribute.
+ // GKE could either use "cloud.region" or "cloud.availability_zone" for region attribute.
+ String region = detectedResourceAttributes.get(AttributeKey.stringKey("cloud.region"));
+ String gkeZonalClusterLocation =
+ detectedResourceAttributes.get(AttributeKey.stringKey("cloud.availability_zone"));
+ if (region == null && gkeZonalClusterLocation != null) {
+ region = gkeZonalClusterLocation;
}
location = region == null ? location : region;
}