From 4e3958e5aa814b18a9d1524dadfc584b72d2095c Mon Sep 17 00:00:00 2001 From: Mikolaj Stefaniak Date: Fri, 18 Jun 2021 15:25:38 +0200 Subject: [PATCH] Add resource labels to Stackdriver metrics configuration properties Using resource labels is mandatory for most Stackdriver resources other than 'Global', i.e. k8s_pod. Configuring valid resource type along with related labels makes it possible to use given metric in a wider set of GCP solutions, i.e. custom metric based GKE pod horizontal autoscaler. See gh-26961 --- .../export/stackdriver/StackdriverProperties.java | 15 +++++++++++++++ .../StackdriverPropertiesConfigAdapter.java | 7 +++++++ .../StackdriverPropertiesConfigAdapterTests.java | 14 ++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java index 07c66682443..aacb9998bd3 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java @@ -16,6 +16,8 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver; +import java.util.Map; + import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryProperties; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -40,6 +42,11 @@ public class StackdriverProperties extends StepRegistryProperties { */ private String resourceType = "global"; + /** + * Monitored resource's labels. + */ + private Map resourceLabels; + public String getProjectId() { return this.projectId; } @@ -56,4 +63,12 @@ public class StackdriverProperties extends StepRegistryProperties { this.resourceType = resourceType; } + public Map getResourceLabels() { + return this.resourceLabels; + } + + public void setResourceLabels(Map resourceLabels) { + this.resourceLabels = resourceLabels; + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java index 98fa2077830..e1c95efd1f6 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java @@ -16,6 +16,8 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver; +import java.util.Map; + import io.micrometer.stackdriver.StackdriverConfig; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapter; @@ -48,4 +50,9 @@ public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesCo return get(StackdriverProperties::getResourceType, StackdriverConfig.super::resourceType); } + @Override + public Map resourceLabels() { + return get(StackdriverProperties::getResourceLabels, StackdriverConfig.super::resourceLabels); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java index 74b282f6452..138dc38e200 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java @@ -16,6 +16,9 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver; +import java.util.HashMap; +import java.util.Map; + import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -41,4 +44,15 @@ class StackdriverPropertiesConfigAdapterTests { assertThat(new StackdriverPropertiesConfigAdapter(properties).resourceType()).isEqualTo("my-resource-type"); } + @Test + void whenPropertiesResourceLabelsAreSetAdapterResourceTypeReturnsThem() { + final Map labels = new HashMap<>(); + labels.put("labelOne", "valueOne"); + labels.put("labelTwo", "valueTwo"); + StackdriverProperties properties = new StackdriverProperties(); + properties.setResourceLabels(labels); + assertThat(new StackdriverPropertiesConfigAdapter(properties).resourceLabels()) + .containsExactlyInAnyOrderEntriesOf(labels); + } + }