From 45542c9953550b20599c0774e7ccf55787869c90 Mon Sep 17 00:00:00 2001 From: Evan Nemerson Date: Mon, 27 Oct 2025 16:37:39 -0400 Subject: [PATCH] CP-34395: Add Kubernetes region label to cost metrics Adds collection of the `topology.kubernetes.io/region node` label. This label appears in metrics as `topology_kubernetes_io_region` due to Prometheus labelmap conversion. Deployed and verified `topology_kubernetes_io_region` now appears on all `container_*` metrics with expected value. --- .../agent-validator/config/internal/scrape_config.tmpl | 4 ++-- helm/templates/_defaults.tpl | 1 + helm/templates/_helpers.tpl | 2 +- tests/helm/template/cert-manager.yaml | 4 +++- tests/helm/template/federated.yaml | 4 +++- tests/helm/template/manifest.yaml | 4 +++- 6 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/functions/agent-validator/config/internal/scrape_config.tmpl b/app/functions/agent-validator/config/internal/scrape_config.tmpl index 3cf95365..929f2f8d 100644 --- a/app/functions/agent-validator/config/internal/scrape_config.tmpl +++ b/app/functions/agent-validator/config/internal/scrape_config.tmpl @@ -51,7 +51,7 @@ scrape_configs: action: replace metric_relabel_configs: - separator: ; - regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ + regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|topology_kubernetes_io_region|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ replacement: $1 action: labelkeep - source_labels: [__name__] @@ -108,7 +108,7 @@ scrape_configs: replacement: $1 action: keep - separator: ; - regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ + regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|topology_kubernetes_io_region|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ replacement: $1 action: labelkeep static_configs: diff --git a/helm/templates/_defaults.tpl b/helm/templates/_defaults.tpl index e4746532..e0777a09 100644 --- a/helm/templates/_defaults.tpl +++ b/helm/templates/_defaults.tpl @@ -261,6 +261,7 @@ metricFilters: - provider_id - resource - resource_type + - topology_kubernetes_io_region - unit - uid - workload diff --git a/helm/templates/_helpers.tpl b/helm/templates/_helpers.tpl index 4653fa7e..caf26813 100644 --- a/helm/templates/_helpers.tpl +++ b/helm/templates/_helpers.tpl @@ -386,7 +386,7 @@ Required metric labels */}} {{- define "cloudzero-agent.requiredMetricLabels" -}} {{- $requiredSpecialMetricLabels := tuple "_.*" "label_.*" "app.kubernetes.io/*" "k8s.*" -}} -{{- $requiredCZMetricLabels := tuple "board_asset_tag" "container" "created_by_kind" "created_by_name" "image" "instance" "name" "namespace" "node" "node_kubernetes_io_instance_type" "pod" "product_name" "provider_id" "resource" "unit" "uid" -}} +{{- $requiredCZMetricLabels := tuple "board_asset_tag" "container" "created_by_kind" "created_by_name" "image" "instance" "name" "namespace" "node" "node_kubernetes_io_instance_type" "pod" "product_name" "provider_id" "resource" "topology_kubernetes_io_region" "unit" "uid" -}} {{- $total := concat $requiredCZMetricLabels $requiredSpecialMetricLabels -}} {{- $result := join "|" $total -}} {{- $result -}} diff --git a/tests/helm/template/cert-manager.yaml b/tests/helm/template/cert-manager.yaml index ba63f0f4..e8200423 100644 --- a/tests/helm/template/cert-manager.yaml +++ b/tests/helm/template/cert-manager.yaml @@ -288,7 +288,7 @@ data: # Labels to keep. - action: labelkeep - regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ + regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|topology_kubernetes_io_region|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ # Metrics to keep. - source_labels: [__name__] @@ -438,6 +438,8 @@ data: match: exact - pattern: "resource_type" match: exact + - pattern: "topology_kubernetes_io_region" + match: exact - pattern: "unit" match: exact - pattern: "uid" diff --git a/tests/helm/template/federated.yaml b/tests/helm/template/federated.yaml index a491f6f1..d56f8616 100644 --- a/tests/helm/template/federated.yaml +++ b/tests/helm/template/federated.yaml @@ -396,7 +396,7 @@ data: # Labels to keep. - action: labelkeep - regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ + regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|topology_kubernetes_io_region|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ # Metrics to keep. - source_labels: [__name__] @@ -507,6 +507,8 @@ data: match: exact - pattern: "resource_type" match: exact + - pattern: "topology_kubernetes_io_region" + match: exact - pattern: "unit" match: exact - pattern: "uid" diff --git a/tests/helm/template/manifest.yaml b/tests/helm/template/manifest.yaml index d97dbd25..61fd6def 100644 --- a/tests/helm/template/manifest.yaml +++ b/tests/helm/template/manifest.yaml @@ -304,7 +304,7 @@ data: # Labels to keep. - action: labelkeep - regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ + regex: ^(board_asset_tag|container|created_by_kind|created_by_name|image|instance|name|namespace|node|node_kubernetes_io_instance_type|pod|product_name|provider_id|resource|topology_kubernetes_io_region|unit|uid|_.*|label_.*|app.kubernetes.io/*|k8s.*)$ # Metrics to keep. - source_labels: [__name__] @@ -454,6 +454,8 @@ data: match: exact - pattern: "resource_type" match: exact + - pattern: "topology_kubernetes_io_region" + match: exact - pattern: "unit" match: exact - pattern: "uid"