From 5279caff549597a3dfc01ebdd06b3d981ce3d0e9 Mon Sep 17 00:00:00 2001 From: Bing Han Date: Thu, 20 Oct 2022 16:11:12 +0800 Subject: [PATCH] Fix prometheus name duplicate _total suffix Signed-off-by: Bing Han --- CHANGELOG.md | 4 ++++ exporters/prometheus/exporter.go | 8 ++++---- exporters/prometheus/exporter_test.go | 8 ++++++++ exporters/prometheus/testdata/counter.txt | 1 + 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index faae85f292b..f8f29e5c979 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [Unreleased] +### Fixed + +- The `go.opentelemetry.io/otel/exporters/prometheus` exporter fixes duplicated `_total` suffixes. (#3369) + ## [1.11.1/0.33.0] 2022-10-19 ### Added diff --git a/exporters/prometheus/exporter.go b/exporters/prometheus/exporter.go index 1af553d8d84..e51326aebc6 100644 --- a/exporters/prometheus/exporter.go +++ b/exporters/prometheus/exporter.go @@ -162,11 +162,11 @@ func addSumMetric[N int64 | float64](ch chan<- prometheus.Metric, sum metricdata if !sum.IsMonotonic { valueType = prometheus.GaugeValue } + if sum.IsMonotonic { + // Add _total suffix for counters + name += counterSuffix + } for _, dp := range sum.DataPoints { - if sum.IsMonotonic { - // Add _total suffix for counters - name += counterSuffix - } keys, values := getAttrs(dp.Attributes) desc := prometheus.NewDesc(name, m.Description, keys, nil) m, err := prometheus.NewConstMetric(desc, valueType, float64(dp.Value), values...) diff --git a/exporters/prometheus/exporter_test.go b/exporters/prometheus/exporter_test.go index 0aa0b3d34d6..27441e74ea1 100644 --- a/exporters/prometheus/exporter_test.go +++ b/exporters/prometheus/exporter_test.go @@ -62,6 +62,14 @@ func TestPrometheusExporter(t *testing.T) { counter.Add(ctx, 5, attrs...) counter.Add(ctx, 10.3, attrs...) counter.Add(ctx, 9, attrs...) + + attrs2 := []attribute.KeyValue{ + attribute.Key("A").String("D"), + attribute.Key("C").String("B"), + attribute.Key("E").Bool(true), + attribute.Key("F").Int(42), + } + counter.Add(ctx, 5, attrs2...) }, }, { diff --git a/exporters/prometheus/testdata/counter.txt b/exporters/prometheus/testdata/counter.txt index e8d7f654440..5da63dd144a 100755 --- a/exporters/prometheus/testdata/counter.txt +++ b/exporters/prometheus/testdata/counter.txt @@ -1,6 +1,7 @@ # HELP foo_milliseconds_total a simple counter # TYPE foo_milliseconds_total counter foo_milliseconds_total{A="B",C="D",E="true",F="42"} 24.3 +foo_milliseconds_total{A="D",C="B",E="true",F="42"} 5 # HELP target_info Target metadata # TYPE target_info gauge target_info{service_name="prometheus_test",telemetry_sdk_language="go",telemetry_sdk_name="opentelemetry",telemetry_sdk_version="latest"} 1