diff --git a/google-cloud-spanner-cassandra/pom.xml b/google-cloud-spanner-cassandra/pom.xml index 827337c7..db9b4211 100644 --- a/google-cloud-spanner-cassandra/pom.xml +++ b/google-cloud-spanner-cassandra/pom.xml @@ -67,8 +67,12 @@ opentelemetry-sdk - com.google.cloud.opentelemetry - detector-resources-support + io.opentelemetry.contrib + opentelemetry-gcp-resources + + + io.opentelemetry + opentelemetry-sdk-extension-autoconfigure-spi com.google.cloud.opentelemetry diff --git a/google-cloud-spanner-cassandra/src/main/java/com/google/cloud/spanner/adapter/metrics/BuiltInMetricsProvider.java b/google-cloud-spanner-cassandra/src/main/java/com/google/cloud/spanner/adapter/metrics/BuiltInMetricsProvider.java index 6a5c62ee..0aebce28 100644 --- a/google-cloud-spanner-cassandra/src/main/java/com/google/cloud/spanner/adapter/metrics/BuiltInMetricsProvider.java +++ b/google-cloud-spanner-cassandra/src/main/java/com/google/cloud/spanner/adapter/metrics/BuiltInMetricsProvider.java @@ -15,7 +15,6 @@ */ package com.google.cloud.spanner.adapter.metrics; -import static com.google.cloud.opentelemetry.detection.GCPPlatformDetector.SupportedPlatform.GOOGLE_KUBERNETES_ENGINE; import static com.google.cloud.spanner.adapter.metrics.BuiltInMetricsConstant.CLIENT_HASH_KEY; import static com.google.cloud.spanner.adapter.metrics.BuiltInMetricsConstant.CLIENT_NAME_KEY; import static com.google.cloud.spanner.adapter.metrics.BuiltInMetricsConstant.CLIENT_UID_KEY; @@ -28,9 +27,6 @@ import static com.google.cloud.spanner.adapter.metrics.BuiltInMetricsConstant.STATUS_KEY; import com.google.api.gax.core.GaxProperties; -import com.google.cloud.opentelemetry.detection.AttributeKeys; -import com.google.cloud.opentelemetry.detection.DetectedPlatform; -import com.google.cloud.opentelemetry.detection.GCPPlatformDetector; import com.google.cloud.opentelemetry.metric.GoogleCloudMetricExporter; import com.google.cloud.opentelemetry.metric.MetricConfiguration; import com.google.cloud.opentelemetry.metric.MonitoredResourceDescription; @@ -38,8 +34,10 @@ import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; 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; @@ -92,12 +90,17 @@ public OpenTelemetry getOrCreateOpenTelemetry(String projectId, String instanceI .setResourceAttributesFilter(MetricConfiguration.NO_RESOURCE_ATTRIBUTES) .build()); + GCPResourceProvider gcpResourceProvider = new GCPResourceProvider(); + sdkMeterProviderBuilder .registerMetricReader( PeriodicMetricReader.builder(metricExporter) .setInterval(java.time.Duration.ofSeconds(60)) .build()) - .addResource(Resource.create(createResourceAttributes(projectId, instanceId))); + .addResource( + Resource.create( + createResourceAttributes( + projectId, instanceId, gcpResourceProvider.getAttributes()))); // Register built-in metrics. BuiltInMetricsConstant.getAllViews().forEach(sdkMeterProviderBuilder::registerView); @@ -108,14 +111,15 @@ public OpenTelemetry getOrCreateOpenTelemetry(String projectId, String instanceI return this.openTelemetry; } - Attributes createResourceAttributes(String projectId, String instanceId) { + Attributes createResourceAttributes( + String projectId, String instanceId, Attributes detectedAttributes) { AttributesBuilder attributesBuilder = Attributes.builder() .put(PROJECT_ID_KEY.getKey(), projectId) .put(INSTANCE_CONFIG_ID_KEY.getKey(), "unknown") .put(CLIENT_HASH_KEY.getKey(), generateClientHash(getDefaultTaskValue())) .put(INSTANCE_ID_KEY.getKey(), instanceId) - .put(LOCATION_ID_KEY.getKey(), detectClientLocation()) + .put(LOCATION_ID_KEY.getKey(), detectClientLocation(detectedAttributes)) .put("gcp.resource_type", BuiltInMetricsConstant.SPANNER_RESOURCE_TYPE); return attributesBuilder.build(); } @@ -161,13 +165,14 @@ static String generateClientHash(String clientUid) { return String.format("%06x", shiftedValue); } - private static String detectClientLocation() { - 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); + private static String detectClientLocation(Attributes detectedResourceAttributes) { + // 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; } return region == null ? "global" : region; } diff --git a/pom.xml b/pom.xml index 56a289be..b672d3cf 100644 --- a/pom.xml +++ b/pom.xml @@ -65,10 +65,29 @@ Apache-2.0 https://www.apache.org/licenses/LICENSE-2.0.txt - + + + + 2.18.3 + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + com.google.cloud google-cloud-shared-dependencies