diff --git a/.chloggen/codeboten_beta-prom-normalize.yaml b/.chloggen/codeboten_beta-prom-normalize.yaml new file mode 100755 index 0000000000000..1ef81ea8dd0ef --- /dev/null +++ b/.chloggen/codeboten_beta-prom-normalize.yaml @@ -0,0 +1,19 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: breaking + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: prometheusreceiver, prometheusexporter, prometheusremotewrite + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Enable pkg.translator.prometheus.NormalizeName by default + +# One or more tracking issues related to the change +issues: [20518] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: | + Enabling normalization by default changes the emitted metrics for components that rely on + the prometheus translation package. This feature can still be disabled via the following + `--feature-gates=-pkg.translator.prometheus.NormalizeName` diff --git a/exporter/prometheusexporter/collector_test.go b/exporter/prometheusexporter/collector_test.go index ffba5479ddfa1..d83b0873cfe5b 100644 --- a/exporter/prometheusexporter/collector_test.go +++ b/exporter/prometheusexporter/collector_test.go @@ -458,7 +458,6 @@ func TestCollectMetrics(t *testing.T) { continue } - require.Contains(t, m.Desc().String(), "fqName: \"test_space_test_metric\"") require.Contains(t, m.Desc().String(), "variableLabels: [label_1 label_2 job instance]") pbMetric := io_prometheus_client.Metric{} @@ -477,11 +476,13 @@ func TestCollectMetrics(t *testing.T) { switch tt.metricType { case prometheus.CounterValue: + require.Contains(t, m.Desc().String(), "fqName: \"test_space_test_metric_total\"") require.Equal(t, tt.value, *pbMetric.Counter.Value) require.Nil(t, pbMetric.Gauge) require.Nil(t, pbMetric.Histogram) require.Nil(t, pbMetric.Summary) case prometheus.GaugeValue: + require.Contains(t, m.Desc().String(), "fqName: \"test_space_test_metric\"") require.Equal(t, tt.value, *pbMetric.Gauge.Value) require.Nil(t, pbMetric.Counter) require.Nil(t, pbMetric.Histogram) diff --git a/exporter/prometheusexporter/prometheus_test.go b/exporter/prometheusexporter/prometheus_test.go index 4ef8916ff1e33..55edc4eb1e98f 100644 --- a/exporter/prometheusexporter/prometheus_test.go +++ b/exporter/prometheusexporter/prometheus_test.go @@ -172,10 +172,10 @@ func TestPrometheusExporter_WithTLS(t *testing.T) { _ = rsp.Body.Close() want := []string{ - `# HELP test_counter_int`, - `# TYPE test_counter_int counter`, - `test_counter_int{code2="one2",foo2="bar2",label_1="label-value-1",resource_attr="resource-attr-val-1"} 123 1581452773000`, - `test_counter_int{code2="one2",foo2="bar2",label_2="label-value-2",resource_attr="resource-attr-val-1"} 456 1581452773000`, + `# HELP test_counter_int_total`, + `# TYPE test_counter_int_total counter`, + `test_counter_int_total{code2="one2",foo2="bar2",label_1="label-value-1",resource_attr="resource-attr-val-1"} 123 1581452773000`, + `test_counter_int_total{code2="one2",foo2="bar2",label_2="label-value-2",resource_attr="resource-attr-val-1"} 456 1581452773000`, } for _, w := range want { @@ -232,18 +232,18 @@ func TestPrometheusExporter_endToEndMultipleTargets(t *testing.T) { blob, _ := io.ReadAll(res.Body) _ = res.Body.Close() want := []string{ - `# HELP test_metric_1_this_one_there_where Extra ones`, - `# TYPE test_metric_1_this_one_there_where counter`, - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+128), - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+128), - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="windows"} %v`, 99+128), - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="linux"} %v`, 100+128), - `# HELP test_metric_2_this_one_there_where Extra ones`, - `# TYPE test_metric_2_this_one_there_where counter`, - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+delta), - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+delta), - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="windows"} %v`, 99+delta), - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="linux"} %v`, 100+delta), + `# HELP test_metric_1_this_one_there_where_total Extra ones`, + `# TYPE test_metric_1_this_one_there_where_total counter`, + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+128), + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+128), + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="windows"} %v`, 99+128), + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="linux"} %v`, 100+128), + `# HELP test_metric_2_this_one_there_where_total Extra ones`, + `# TYPE test_metric_2_this_one_there_where_total counter`, + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+delta), + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+delta), + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="windows"} %v`, 99+delta), + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8081",job="cpu-exporter",os="linux"} %v`, 100+delta), } for _, w := range want { @@ -312,14 +312,14 @@ func TestPrometheusExporter_endToEnd(t *testing.T) { blob, _ := io.ReadAll(res.Body) _ = res.Body.Close() want := []string{ - `# HELP test_metric_1_this_one_there_where Extra ones`, - `# TYPE test_metric_1_this_one_there_where counter`, - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+128), - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+128), - `# HELP test_metric_2_this_one_there_where Extra ones`, - `# TYPE test_metric_2_this_one_there_where counter`, - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+delta), - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+delta), + `# HELP test_metric_1_this_one_there_where_total Extra ones`, + `# TYPE test_metric_1_this_one_there_where_total counter`, + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+128), + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+128), + `# HELP test_metric_2_this_one_there_where_total Extra ones`, + `# TYPE test_metric_2_this_one_there_where_total counter`, + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="windows"} %v`, 99+delta), + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code1="one1",foo1="bar1",instance="localhost:8080",job="cpu-exporter",os="linux"} %v`, 100+delta), } for _, w := range want { @@ -389,14 +389,14 @@ func TestPrometheusExporter_endToEndWithTimestamps(t *testing.T) { blob, _ := io.ReadAll(res.Body) _ = res.Body.Close() want := []string{ - `# HELP test_metric_1_this_one_there_where Extra ones`, - `# TYPE test_metric_1_this_one_there_where counter`, - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="windows"} %v %v`, 99+128, 1543160298100+128000), - fmt.Sprintf(`test_metric_1_this_one_there_where{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="linux"} %v %v`, 100+128, 1543160298100), - `# HELP test_metric_2_this_one_there_where Extra ones`, - `# TYPE test_metric_2_this_one_there_where counter`, - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="windows"} %v %v`, 99+delta, 1543160298100+delta*1000), - fmt.Sprintf(`test_metric_2_this_one_there_where{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="linux"} %v %v`, 100+delta, 1543160298100), + `# HELP test_metric_1_this_one_there_where_total Extra ones`, + `# TYPE test_metric_1_this_one_there_where_total counter`, + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="windows"} %v %v`, 99+128, 1543160298100+128000), + fmt.Sprintf(`test_metric_1_this_one_there_where_total{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="linux"} %v %v`, 100+128, 1543160298100), + `# HELP test_metric_2_this_one_there_where_total Extra ones`, + `# TYPE test_metric_2_this_one_there_where_total counter`, + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="windows"} %v %v`, 99+delta, 1543160298100+delta*1000), + fmt.Sprintf(`test_metric_2_this_one_there_where_total{arch="x86",code2="one2",foo2="bar2",instance="localhost:8080",job="node-exporter",os="linux"} %v %v`, 100+delta, 1543160298100), } for _, w := range want { @@ -469,10 +469,10 @@ func TestPrometheusExporter_endToEndWithResource(t *testing.T) { _ = rsp.Body.Close() want := []string{ - `# HELP test_counter_int`, - `# TYPE test_counter_int counter`, - `test_counter_int{code2="one2",foo2="bar2",label_1="label-value-1",resource_attr="resource-attr-val-1"} 123 1581452773000`, - `test_counter_int{code2="one2",foo2="bar2",label_2="label-value-2",resource_attr="resource-attr-val-1"} 456 1581452773000`, + `# HELP test_counter_int_total`, + `# TYPE test_counter_int_total counter`, + `test_counter_int_total{code2="one2",foo2="bar2",label_1="label-value-1",resource_attr="resource-attr-val-1"} 123 1581452773000`, + `test_counter_int_total{code2="one2",foo2="bar2",label_2="label-value-2",resource_attr="resource-attr-val-1"} 456 1581452773000`, } for _, w := range want { diff --git a/pkg/translator/prometheus/README.md b/pkg/translator/prometheus/README.md index 07ffee9b1d28f..77b49d89809ce 100644 --- a/pkg/translator/prometheus/README.md +++ b/pkg/translator/prometheus/README.md @@ -11,10 +11,10 @@ > **Warning** > -> This feature must be enabled with [feature gate](https://github.com/open-telemetry/opentelemetry-collector/tree/main/featuregate) `pkg.translator.prometheus.NormalizeName`. It is disabled by default (alpha stage). +> This feature can be disabled with [feature gate](https://github.com/open-telemetry/opentelemetry-collector/tree/main/featuregate) `pkg.translator.prometheus.NormalizeName`. It is enabled by default (beta stage). > > ```shell-session -> $ otelcol --config=config.yaml --feature-gates=pkg.translator.prometheus.NormalizeName +> $ otelcol --config=config.yaml --feature-gates=-pkg.translator.prometheus.NormalizeName > ``` List of transformations performed on OpenTelemetry metrics names: diff --git a/pkg/translator/prometheus/normalize_name.go b/pkg/translator/prometheus/normalize_name.go index 523819ab53682..6d82b42817ceb 100644 --- a/pkg/translator/prometheus/normalize_name.go +++ b/pkg/translator/prometheus/normalize_name.go @@ -84,7 +84,7 @@ var perUnitMap = map[string]string{ var normalizeNameGate = featuregate.GlobalRegistry().MustRegister( "pkg.translator.prometheus.NormalizeName", - featuregate.StageAlpha, + featuregate.StageBeta, featuregate.WithRegisterDescription("Controls whether metrics names are automatically normalized to follow Prometheus naming convention"), featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/8950"), ) diff --git a/pkg/translator/prometheus/normalize_name_test.go b/pkg/translator/prometheus/normalize_name_test.go index d48b493cbcaba..4beaac5f00286 100644 --- a/pkg/translator/prometheus/normalize_name_test.go +++ b/pkg/translator/prometheus/normalize_name_test.go @@ -150,10 +150,7 @@ func TestOtelReceivers(t *testing.T) { } func TestTrimPromSuffixes(t *testing.T) { - registry := featuregate.NewRegistry() - _, err := registry.Register(normalizeNameGate.ID(), featuregate.StageBeta) - require.NoError(t, err) - normalizer := NewNormalizer(registry) + normalizer := NewNormalizer(featuregate.NewRegistry()) assert.Equal(t, "active_directory_ds_replication_network_io", normalizer.TrimPromSuffixes("active_directory_ds_replication_network_io_bytes_total", pmetric.MetricTypeSum, "bytes")) assert.Equal(t, "active_directory_ds_name_cache_hit_rate", normalizer.TrimPromSuffixes("active_directory_ds_name_cache_hit_rate_percent", pmetric.MetricTypeGauge, "percent")) @@ -186,7 +183,10 @@ func TestTrimPromSuffixes(t *testing.T) { } func TestTrimPromSuffixesWithFeatureGateDisabled(t *testing.T) { - normalizer := NewNormalizer(featuregate.NewRegistry()) + registry := featuregate.NewRegistry() + _, err := registry.Register(normalizeNameGate.ID(), featuregate.StageAlpha) + require.NoError(t, err) + normalizer := NewNormalizer(registry) assert.Equal(t, "apache_current_connections", normalizer.TrimPromSuffixes("apache_current_connections", pmetric.MetricTypeGauge, "connections")) assert.Equal(t, "apache_requests_total", normalizer.TrimPromSuffixes("apache_requests_total", pmetric.MetricTypeSum, "1")) diff --git a/pkg/translator/prometheusremotewrite/number_data_points_test.go b/pkg/translator/prometheusremotewrite/number_data_points_test.go index cb3ea43b6b240..c5e330cff1b54 100644 --- a/pkg/translator/prometheusremotewrite/number_data_points_test.go +++ b/pkg/translator/prometheusremotewrite/number_data_points_test.go @@ -158,10 +158,10 @@ func TestAddSingleSumNumberDataPoint(t *testing.T) { }, want: func() map[string]*prompb.TimeSeries { labels := []prompb.Label{ - {Name: model.MetricNameLabel, Value: "test_sum"}, + {Name: model.MetricNameLabel, Value: "test_sum_total"}, } createdLabels := []prompb.Label{ - {Name: model.MetricNameLabel, Value: "test_sum" + createdSuffix}, + {Name: model.MetricNameLabel, Value: "test_sum_total" + createdSuffix}, } return map[string]*prompb.TimeSeries{ timeSeriesSignature(pmetric.MetricTypeSum.String(), &labels): { @@ -194,7 +194,7 @@ func TestAddSingleSumNumberDataPoint(t *testing.T) { }, want: func() map[string]*prompb.TimeSeries { labels := []prompb.Label{ - {Name: model.MetricNameLabel, Value: "test_sum"}, + {Name: model.MetricNameLabel, Value: "test_sum_total"}, } return map[string]*prompb.TimeSeries{ timeSeriesSignature(pmetric.MetricTypeSum.String(), &labels): { diff --git a/receiver/prometheusreceiver/metrics_receiver_helper_test.go b/receiver/prometheusreceiver/metrics_receiver_helper_test.go index 86c90ba342206..8d81c8b86e578 100644 --- a/receiver/prometheusreceiver/metrics_receiver_helper_test.go +++ b/receiver/prometheusreceiver/metrics_receiver_helper_test.go @@ -119,7 +119,6 @@ type testData struct { pages []mockPrometheusResponse attributes pcommon.Map validateScrapes bool - normalizedName bool validateFunc func(t *testing.T, td *testData, result []pmetric.ResourceMetrics) } @@ -234,13 +233,13 @@ func metricsCount(resourceMetric pmetric.ResourceMetrics) int { return metricsCount } -func getValidScrapes(t *testing.T, rms []pmetric.ResourceMetrics, normalizedNames bool) []pmetric.ResourceMetrics { +func getValidScrapes(t *testing.T, rms []pmetric.ResourceMetrics) []pmetric.ResourceMetrics { var out []pmetric.ResourceMetrics // rms will include failed scrapes and scrapes that received no metrics but have internal scrape metrics, filter those out for i := 0; i < len(rms); i++ { allMetrics := getMetrics(rms[i]) - if expectedScrapeMetricCount < len(allMetrics) && countScrapeMetrics(allMetrics, normalizedNames) == expectedScrapeMetricCount { - if isFirstFailedScrape(allMetrics, normalizedNames) { + if expectedScrapeMetricCount < len(allMetrics) && countScrapeMetrics(allMetrics) == expectedScrapeMetricCount { + if isFirstFailedScrape(allMetrics) { continue } assertUp(t, 1, allMetrics) @@ -252,7 +251,7 @@ func getValidScrapes(t *testing.T, rms []pmetric.ResourceMetrics, normalizedName return out } -func isFirstFailedScrape(metrics []pmetric.Metric, normalizedNames bool) bool { +func isFirstFailedScrape(metrics []pmetric.Metric) bool { for _, m := range metrics { if m.Name() == "up" { if m.Gauge().DataPoints().At(0).DoubleValue() == 1 { // assumed up will not have multiple datapoints @@ -262,7 +261,7 @@ func isFirstFailedScrape(metrics []pmetric.Metric, normalizedNames bool) bool { } for _, m := range metrics { - if isDefaultMetrics(m, normalizedNames) { + if isDefaultMetrics(m) { continue } @@ -306,13 +305,13 @@ func assertUp(t *testing.T, expected float64, metrics []pmetric.Metric) { t.Error("No 'up' metric found") } -func countScrapeMetricsRM(got pmetric.ResourceMetrics, normalizedNames bool) int { +func countScrapeMetricsRM(got pmetric.ResourceMetrics) int { n := 0 ilms := got.ScopeMetrics() for j := 0; j < ilms.Len(); j++ { ilm := ilms.At(j) for i := 0; i < ilm.Metrics().Len(); i++ { - if isDefaultMetrics(ilm.Metrics().At(i), normalizedNames) { + if isDefaultMetrics(ilm.Metrics().At(i)) { n++ } } @@ -320,29 +319,23 @@ func countScrapeMetricsRM(got pmetric.ResourceMetrics, normalizedNames bool) int return n } -func countScrapeMetrics(metrics []pmetric.Metric, normalizedNames bool) int { +func countScrapeMetrics(metrics []pmetric.Metric) int { n := 0 for _, m := range metrics { - if isDefaultMetrics(m, normalizedNames) { + if isDefaultMetrics(m) { n++ } } return n } -func isDefaultMetrics(m pmetric.Metric, normalizedNames bool) bool { +func isDefaultMetrics(m pmetric.Metric) bool { switch m.Name() { - case "up", "scrape_samples_scraped", "scrape_samples_post_metric_relabeling", "scrape_series_added": + case "up", "scrape_samples_scraped", "scrape_samples_post_metric_relabeling", "scrape_series_added", "scrape_duration": return true - - // if normalizedNames is true, we expect unit `_seconds` to be trimmed. - case "scrape_duration_seconds": - return !normalizedNames - case "scrape_duration": - return normalizedNames default: + return false } - return false } type metricTypeComparator func(*testing.T, pmetric.Metric) @@ -359,12 +352,8 @@ type dataPointExpectation struct { type testExpectation func(*testing.T, pmetric.ResourceMetrics) func doCompare(t *testing.T, name string, want pcommon.Map, got pmetric.ResourceMetrics, expectations []testExpectation) { - doCompareNormalized(t, name, want, got, expectations, false) -} - -func doCompareNormalized(t *testing.T, name string, want pcommon.Map, got pmetric.ResourceMetrics, expectations []testExpectation, normalizedNames bool) { t.Run(name, func(t *testing.T) { - assert.Equal(t, expectedScrapeMetricCount, countScrapeMetricsRM(got, normalizedNames)) + assert.Equal(t, expectedScrapeMetricCount, countScrapeMetricsRM(got)) assert.Equal(t, want.Len(), got.Resource().Attributes().Len()) for k, v := range want.AsRaw() { val, ok := got.Resource().Attributes().Get(k) @@ -639,7 +628,7 @@ func testComponent(t *testing.T, targets []*testData, useStartTimeMetric bool, s } scrapes := pResults[name] if !target.validateScrapes { - scrapes = getValidScrapes(t, pResults[name], target.normalizedName) + scrapes = getValidScrapes(t, pResults[name]) } target.validateFunc(t, target, scrapes) }) diff --git a/receiver/prometheusreceiver/metrics_receiver_honor_timestamp_test.go b/receiver/prometheusreceiver/metrics_receiver_honor_timestamp_test.go index 691c6d2c40d11..c043a0382d761 100644 --- a/receiver/prometheusreceiver/metrics_receiver_honor_timestamp_test.go +++ b/receiver/prometheusreceiver/metrics_receiver_honor_timestamp_test.go @@ -55,8 +55,8 @@ var honorTimestampsPage1 = ` # TYPE go_thread gauge go_threads 19 %v -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 100 %v http_requests_total{method="post",code="400"} 5 %v @@ -83,8 +83,8 @@ var honorTimestampsPage2 = ` # TYPE go_thread gauge go_threads 18 %v -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 99 %v http_requests_total{method="post",code="400"} 3 %v @@ -113,8 +113,8 @@ var honorTimestampsPage3 = ` # TYPE go_thread gauge go_threads 19 %v -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 100 %v http_requests_total{method="post",code="400"} 5 %v @@ -228,7 +228,7 @@ func verifyHonorTimeStampsTrue(t *testing.T, td *testData, resourceMetrics []pme }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -288,7 +288,7 @@ func verifyHonorTimeStampsTrue(t *testing.T, td *testData, resourceMetrics []pme }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -348,7 +348,7 @@ func verifyHonorTimeStampsTrue(t *testing.T, td *testData, resourceMetrics []pme }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -416,7 +416,7 @@ func verifyHonorTimeStampsFalse(t *testing.T, td *testData, resourceMetrics []pm }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -478,7 +478,7 @@ func verifyHonorTimeStampsFalse(t *testing.T, td *testData, resourceMetrics []pm }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { diff --git a/receiver/prometheusreceiver/metrics_receiver_metric_name_normalize_test.go b/receiver/prometheusreceiver/metrics_receiver_metric_name_normalize_test.go index 255834cc2e521..bf4cedd3b3aa5 100644 --- a/receiver/prometheusreceiver/metrics_receiver_metric_name_normalize_test.go +++ b/receiver/prometheusreceiver/metrics_receiver_metric_name_normalize_test.go @@ -52,8 +52,7 @@ func TestMetricNormalize(t *testing.T) { pages: []mockPrometheusResponse{ {code: 200, data: normalizeMetric, useOpenMetrics: true}, }, - normalizedName: true, - validateFunc: verifyNormalizeMetric, + validateFunc: verifyNormalizeMetric, }, } @@ -149,5 +148,5 @@ func verifyNormalizeMetric(t *testing.T, td *testData, resourceMetrics []pmetric }, }), } - doCompareNormalized(t, "scrape-metricNormalize-1", wantAttributes, m1, e1, true) + doCompare(t, "scrape-metricNormalize-1", wantAttributes, m1, e1) } diff --git a/receiver/prometheusreceiver/metrics_receiver_non_numerical_test.go b/receiver/prometheusreceiver/metrics_receiver_non_numerical_test.go index 734f03ea4f0e1..6c1512791d298 100644 --- a/receiver/prometheusreceiver/metrics_receiver_non_numerical_test.go +++ b/receiver/prometheusreceiver/metrics_receiver_non_numerical_test.go @@ -31,8 +31,8 @@ var staleNaNsPage1 = ` # TYPE go_threads gauge go_threads 19 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 100 http_requests_total{method="post",code="400"} 5 @@ -115,7 +115,7 @@ func verifyStaleNaNsSuccessfulScrape(t *testing.T, td *testData, resourceMetric }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -181,7 +181,7 @@ func verifyStaleNaNsFailedScrape(t *testing.T, td *testData, resourceMetric pmet }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -316,8 +316,8 @@ go_threads +Inf # HELP redis_connected_clients Redis connected clients redis_connected_clients{name="rough-snowflake-web",port="6380"} -Inf -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} +Inf # HELP rpc_duration_seconds A summary of the RPC duration in seconds. @@ -376,7 +376,7 @@ func verifyInfValues(t *testing.T, td *testData, resourceMetrics []pmetric.Resou }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { diff --git a/receiver/prometheusreceiver/metrics_receiver_test.go b/receiver/prometheusreceiver/metrics_receiver_test.go index 95f43a6e8a952..7117a2020be5f 100644 --- a/receiver/prometheusreceiver/metrics_receiver_test.go +++ b/receiver/prometheusreceiver/metrics_receiver_test.go @@ -36,8 +36,8 @@ var target1Page1 = ` # TYPE go_threads gauge go_threads 19 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 100 http_requests_total{method="post",code="400"} 5 @@ -64,8 +64,8 @@ var target1Page2 = ` # TYPE go_threads gauge go_threads 18 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 199 http_requests_total{method="post",code="400"} 12 @@ -94,8 +94,8 @@ var target1Page3 = ` # TYPE go_threads gauge go_threads 16 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 99 http_requests_total{method="post",code="400"} 3 @@ -139,7 +139,7 @@ func verifyTarget1(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -201,7 +201,7 @@ func verifyTarget1(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -264,7 +264,7 @@ func verifyTarget1(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -333,8 +333,8 @@ http_request_duration_seconds_bucket{method="post",code="400",le="+Inf"} 50 http_request_duration_seconds_sum{method="post",code="400"} 25 http_request_duration_seconds_count{method="post",code="400"} 50 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 10 http_requests_total{method="post",code="400"} 50 @@ -368,8 +368,8 @@ http_request_duration_seconds_bucket{method="post",code="400",le="+Inf"} 60 http_request_duration_seconds_sum{method="post",code="400"} 30 http_request_duration_seconds_count{method="post",code="400"} 60 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 50 http_requests_total{method="post",code="300"} 3 http_requests_total{method="post",code="400"} 60 @@ -407,8 +407,8 @@ http_request_duration_seconds_bucket{method="post",code="400",le="+Inf"} 60 http_request_duration_seconds_sum{method="post",code="400"} 30 http_request_duration_seconds_count{method="post",code="400"} 60 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 50 http_requests_total{method="post",code="300"} 5 http_requests_total{method="post",code="400"} 60 @@ -446,8 +446,8 @@ http_request_duration_seconds_bucket{method="post",code="400",le="+Inf"} 59 http_request_duration_seconds_sum{method="post",code="400"} 29 http_request_duration_seconds_count{method="post",code="400"} 59 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 49 http_requests_total{method="post",code="300"} 3 http_requests_total{method="post",code="400"} 59 @@ -485,8 +485,8 @@ http_request_duration_seconds_bucket{method="post",code="400",le="+Inf"} 59 http_request_duration_seconds_sum{method="post",code="400"} 29 http_request_duration_seconds_count{method="post",code="400"} 59 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 50 http_requests_total{method="post",code="300"} 5 http_requests_total{method="post",code="400"} 59 @@ -545,7 +545,7 @@ func verifyTarget2(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -633,7 +633,7 @@ func verifyTarget2(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -737,7 +737,7 @@ func verifyTarget2(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -841,7 +841,7 @@ func verifyTarget2(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -945,7 +945,7 @@ func verifyTarget2(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc }, }, }), - assertMetricPresent("http_requests_total", + assertMetricPresent("http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -1080,9 +1080,6 @@ rpc_duration_seconds_count{foo="no_quantile"} 55 var target4Page1 = ` # A simple counter # TYPE foo counter -foo 0 -# Another counter with the same name but also _total suffix -# TYPE foo_total counter foo_total 1 ` @@ -1199,8 +1196,8 @@ func verifyTarget4(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc verifyNumValidScrapeResults(t, td, resourceMetrics) m1 := resourceMetrics[0] - // m1 has 2 metrics + 5 internal scraper metrics - assert.Equal(t, 7, metricsCount(m1)) + // m1 has 1 metric + 5 internal scraper metrics + assert.Equal(t, 6, metricsCount(m1)) wantAttributes := td.attributes @@ -1208,16 +1205,6 @@ func verifyTarget4(t *testing.T, td *testData, resourceMetrics []pmetric.Resourc ts1 := getTS(metrics1) e1 := []testExpectation{ assertMetricPresent("foo", - compareMetricIsMonotonic(true), - []dataPointExpectation{ - { - numberPointComparator: []numberPointComparator{ - compareTimestamp(ts1), - compareDoubleValue(0), - }, - }, - }), - assertMetricPresent("foo_total", compareMetricIsMonotonic(true), []dataPointExpectation{ { @@ -1283,8 +1270,8 @@ var startTimeMetricPage = ` # HELP go_threads Number of OS threads created # TYPE go_threads gauge go_threads 19 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 100 http_requests_total{method="post",code="400"} 5 # HELP http_request_duration_seconds A histogram of the request duration. @@ -1369,8 +1356,8 @@ var startTimeMetricRegexPage = ` # HELP go_threads Number of OS threads created # TYPE go_threads gauge go_threads 19 -# HELP http_requests_total The total number of HTTP requests. -# TYPE http_requests_total counter +# HELP http_requests The total number of HTTP requests. +# TYPE http_requests counter http_requests_total{method="post",code="200"} 100 http_requests_total{method="post",code="400"} 5 # HELP http_request_duration_seconds A histogram of the request duration. diff --git a/receiver/prometheusreceiver/metrics_reciever_metric_rename_test.go b/receiver/prometheusreceiver/metrics_reciever_metric_rename_test.go index 6d0dbe4c6011f..90fd581d19458 100644 --- a/receiver/prometheusreceiver/metrics_reciever_metric_rename_test.go +++ b/receiver/prometheusreceiver/metrics_reciever_metric_rename_test.go @@ -30,17 +30,17 @@ var renameMetric = ` # TYPE http_go_threads gauge http_go_threads 19 -# HELP http_connected_total connected clients -# TYPE http_connected_total counter +# HELP http_connected connected clients +# TYPE http_connected counter http_connected_total{method="post",port="6380"} 15.0 -# HELP redis_http_requests_total Redis connected clients -# TYPE redis_http_requests_total counter +# HELP redis_http_requests Redis connected clients +# TYPE redis_http_requests counter redis_http_requests_total{method="post",port="6380"} 10.0 redis_http_requests_total{method="post",port="6381"} 12.0 -# HELP rpc_duration_total RPC clients -# TYPE rpc_duration_total counter +# HELP rpc_duration RPC clients +# TYPE rpc_duration counter rpc_duration_total{method="post",port="6380"} 100.0 rpc_duration_total{method="post",port="6381"} 120.0 ` @@ -184,7 +184,7 @@ func verifyRenameMetricKeepAction(t *testing.T, td *testData, resourceMetrics [] metrics1 := m1.ScopeMetrics().At(0).Metrics() ts1 := getTS(metrics1) e1 := []testExpectation{ - assertMetricPresent("rpc_duration_total", + assertMetricPresent("rpc_duration", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -204,8 +204,8 @@ func verifyRenameMetricKeepAction(t *testing.T, td *testData, resourceMetrics [] }, }), assertMetricAbsent("http_go_threads"), - assertMetricAbsent("http_connected_total"), - assertMetricAbsent("redis_http_requests_total"), + assertMetricAbsent("http_connected"), + assertMetricAbsent("redis_http_requests"), } doCompare(t, "scrape-metricRenameKeepAction-1", wantAttributes, m1, e1) } @@ -215,17 +215,17 @@ var renamingLabel = ` # TYPE http_go_threads gauge http_go_threads 19 -# HELP http_connected_total connected clients -# TYPE http_connected_total counter +# HELP http_connected connected clients +# TYPE http_connected counter http_connected_total{url="localhost",status="ok"} 15.0 -# HELP redis_http_requests_total Redis connected clients -# TYPE redis_http_requests_total counter +# HELP redis_http_requests Redis connected clients +# TYPE redis_http_requests counter redis_http_requests_total{method="post",port="6380"} 10.0 redis_http_requests_total{job="sample-app",statusCode="200"} 12.0 -# HELP rpc_duration_total RPC clients -# TYPE rpc_duration_total counter +# HELP rpc_duration RPC clients +# TYPE rpc_duration counter rpc_duration_total{monitor="codeLab",host="local"} 100.0 rpc_duration_total{address="localhost:9090/metrics",contentType="application/json"} 120.0 ` @@ -302,7 +302,7 @@ func verifyRenameLabel(t *testing.T, td *testData, resourceMetrics []pmetric.Res }, }, }), - assertMetricPresent("http_connected_total", + assertMetricPresent("http_connected", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -313,7 +313,7 @@ func verifyRenameLabel(t *testing.T, td *testData, resourceMetrics []pmetric.Res }, }, }), - assertMetricPresent("redis_http_requests_total", + assertMetricPresent("redis_http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -333,7 +333,7 @@ func verifyRenameLabel(t *testing.T, td *testData, resourceMetrics []pmetric.Res }, }, }), - assertMetricPresent("rpc_duration_total", + assertMetricPresent("rpc_duration", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -405,7 +405,7 @@ func verifyRenameLabelKeepAction(t *testing.T, td *testData, resourceMetrics []p }, }, }), - assertMetricPresent("http_connected_total", + assertMetricPresent("http_connected", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -416,7 +416,7 @@ func verifyRenameLabelKeepAction(t *testing.T, td *testData, resourceMetrics []p }, }, }), - assertMetricPresent("redis_http_requests_total", + assertMetricPresent("redis_http_requests", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ { @@ -434,7 +434,7 @@ func verifyRenameLabelKeepAction(t *testing.T, td *testData, resourceMetrics []p }, }, }), - assertMetricPresent("rpc_duration_total", + assertMetricPresent("rpc_duration", compareMetricType(pmetric.MetricTypeSum), []dataPointExpectation{ {