From 83b32c3535afb566dbd9cc3036d05d84106df42b Mon Sep 17 00:00:00 2001 From: Asaf Mesika Date: Mon, 27 Nov 2023 17:46:44 +0200 Subject: [PATCH] Allow Prometheus exporter to add resource attributes to metric attributes (#3761) Fixes #3705 ## Changes Allowing exporters (e.g. Prometheus exporter) to add the resource attributes to each exported metric attributes --- CHANGELOG.md | 3 +++ .../compatibility/prometheus_and_openmetrics.md | 10 +++++----- specification/metrics/sdk_exporters/prometheus.md | 6 ++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b21d69656a8..93e19aba28f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ release. ### Metrics +- Add optional configuration for Prometheus exporters to promote resource attributes to metric attributes + ([#3761](https://github.com/open-telemetry/opentelemetry-specification/pull/3761)) + ### Logs - Add definition for standard output log record exporter. diff --git a/specification/compatibility/prometheus_and_openmetrics.md b/specification/compatibility/prometheus_and_openmetrics.md index ecb74fc73dd..7f36beddf3c 100644 --- a/specification/compatibility/prometheus_and_openmetrics.md +++ b/specification/compatibility/prometheus_and_openmetrics.md @@ -385,11 +385,11 @@ OpenMetrics exemplar unless they would exceed the OpenMetrics In SDK Prometheus (pull) exporters, resource attributes SHOULD be converted to a single [`target_info` metric](https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#supporting-target-metadata-in-both-push-based-and-pull-based-systems) -if the resource is not [empty](../resource/sdk.md#the-empty-resource); -otherwise, they MUST be dropped, and MUST NOT be attached as labels to other -metric families. The target_info metric MUST be an info-typed metric whose -labels MUST include the resource attributes, and MUST NOT include any other -labels. There MUST be at most one target_info metric exposed on an SDK +if the resource is not [empty](../resource/sdk.md#the-empty-resource). +The resource attributes MAY be copied to labels of exported metric families +if required by the exporter configuration, or MUST be dropped. The target_info metric MUST be an info-typed +metric whose labels MUST include the resource attributes, and MUST NOT include +any other labels. There MUST be at most one target_info metric exposed on an SDK Prometheus endpoint. In the Collector's Prometheus pull and push (remote-write) exporters, it is diff --git a/specification/metrics/sdk_exporters/prometheus.md b/specification/metrics/sdk_exporters/prometheus.md index 8470a55694d..f72062e7c7a 100644 --- a/specification/metrics/sdk_exporters/prometheus.md +++ b/specification/metrics/sdk_exporters/prometheus.md @@ -25,3 +25,9 @@ A Prometheus Exporter MAY support [OpenMetrics Text Format](https://github.com/prometheus/docs/blob/main/content/docs/instrumenting/exposition_formats.md#openmetrics-text-format), including the [Exemplars](https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#exemplars). + +A Prometheus Exporter MAY offer configuration to add resource attributes as metric attributes. +By default, it MUST NOT add any resource attributes as metric attributes. +The configuration SHOULD allow the user to select which resource attributes to copy (e.g. +include / exclude or regular expression based). Copied Resource attributes MUST NOT be +excluded from target_info.