From a6cb613a668ede3a8e595a4dd7845b7d0553bbde Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 15 Dec 2023 12:54:30 +1100 Subject: [PATCH 1/5] Scope info should only be exported if OpenMetrics is requested --- .../Internal/PrometheusCollectionManager.cs | 41 ++++++++++--------- .../PrometheusExporterMiddlewareTests.cs | 5 +-- .../PrometheusHttpListenerTests.cs | 5 +-- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/Internal/PrometheusCollectionManager.cs b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/Internal/PrometheusCollectionManager.cs index 597ac5befbc..b8b4f4888ae 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/Internal/PrometheusCollectionManager.cs +++ b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/Internal/PrometheusCollectionManager.cs @@ -172,31 +172,34 @@ private ExportResult OnCollect(Batch metrics) try { - this.scopes.Clear(); - - foreach (var metric in metrics) + if (this.exporter.OpenMetricsRequested) { - if (PrometheusSerializer.CanWriteMetric(metric)) + this.scopes.Clear(); + + foreach (var metric in metrics) { - if (this.scopes.Add(metric.MeterName)) + if (PrometheusSerializer.CanWriteMetric(metric)) { - try + if (this.scopes.Add(metric.MeterName)) { - cursor = PrometheusSerializer.WriteScopeInfo(this.buffer, cursor, metric.MeterName); + try + { + cursor = PrometheusSerializer.WriteScopeInfo(this.buffer, cursor, metric.MeterName); - break; - } - catch (IndexOutOfRangeException) - { - if (!this.IncreaseBufferSize()) + break; + } + catch (IndexOutOfRangeException) { - // there are two cases we might run into the following condition: - // 1. we have many metrics to be exported - in this case we probably want - // to put some upper limit and allow the user to configure it. - // 2. we got an IndexOutOfRangeException which was triggered by some other - // code instead of the buffer[cursor++] - in this case we should give up - // at certain point rather than allocating like crazy. - throw; + if (!this.IncreaseBufferSize()) + { + // there are two cases we might run into the following condition: + // 1. we have many metrics to be exported - in this case we probably want + // to put some upper limit and allow the user to configure it. + // 2. we got an IndexOutOfRangeException which was triggered by some other + // code instead of the buffer[cursor++] - in this case we should give up + // at certain point rather than allocating like crazy. + throw; + } } } } diff --git a/test/OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests/PrometheusExporterMiddlewareTests.cs b/test/OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests/PrometheusExporterMiddlewareTests.cs index 3b972939f32..7e1a6c80bae 100644 --- a/test/OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests/PrometheusExporterMiddlewareTests.cs +++ b/test/OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests/PrometheusExporterMiddlewareTests.cs @@ -328,10 +328,7 @@ private static async Task RunPrometheusExporterMiddlewareIntegrationTest( + "# TYPE counter_double_total counter\n" + $"counter_double_total{{otel_scope_name='{MeterName}',otel_scope_version='{MeterVersion}',key1='value1',key2='value2'}} 101.17 (\\d+\\.\\d{{3}})\n" + "# EOF\n" - : "# TYPE otel_scope_info info\n" - + "# HELP otel_scope_info Scope metadata\n" - + $"otel_scope_info{{otel_scope_name='{MeterName}'}} 1\n" - + "# TYPE counter_double_total counter\n" + : "# TYPE counter_double_total counter\n" + $"counter_double_total{{otel_scope_name='{MeterName}',otel_scope_version='{MeterVersion}',key1='value1',key2='value2'}} 101.17 (\\d+)\n" + "# EOF\n"; diff --git a/test/OpenTelemetry.Exporter.Prometheus.HttpListener.Tests/PrometheusHttpListenerTests.cs b/test/OpenTelemetry.Exporter.Prometheus.HttpListener.Tests/PrometheusHttpListenerTests.cs index 5c19c2ec129..2d0271d84e1 100644 --- a/test/OpenTelemetry.Exporter.Prometheus.HttpListener.Tests/PrometheusHttpListenerTests.cs +++ b/test/OpenTelemetry.Exporter.Prometheus.HttpListener.Tests/PrometheusHttpListenerTests.cs @@ -176,10 +176,7 @@ private async Task RunPrometheusExporterHttpServerIntegrationTest(bool skipMetri + "# TYPE counter_double_total counter\n" + $"counter_double_total{{otel_scope_name='{MeterName}',otel_scope_version='{MeterVersion}',key1='value1',key2='value2'}} 101.17 (\\d+\\.\\d{{3}})\n" + "# EOF\n" - : "# TYPE otel_scope_info info\n" - + "# HELP otel_scope_info Scope metadata\n" - + $"otel_scope_info{{otel_scope_name='{MeterName}'}} 1\n" - + "# TYPE counter_double_total counter\n" + : "# TYPE counter_double_total counter\n" + $"counter_double_total{{otel_scope_name='{MeterName}',otel_scope_version='{MeterVersion}',key1='value1',key2='value2'}} 101.17 (\\d+)\n" + "# EOF\n"; From e7b787811714afc9261636b06011d7eb74043503 Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 15 Dec 2023 14:20:25 +1100 Subject: [PATCH 2/5] Updated changelog --- src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md | 2 +- src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md index ca56db190d8..30e9c9c9452 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086)) +* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) ## 1.7.0-rc.1 diff --git a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md index ae8effc7280..b31251607f4 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086)) +* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) ## 1.7.0-rc.1 From 4a34f72785af450c17962bac85a521f34be4c930 Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 15 Dec 2023 14:24:49 +1100 Subject: [PATCH 3/5] Shorten text --- src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md | 2 +- src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md index 30e9c9c9452..c965c30a69f 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) +* Requests with OpenMetrics format automatically add scope info ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) ## 1.7.0-rc.1 diff --git a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md index b31251607f4..1d2563374de 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) +* Requests with OpenMetrics format automatically add scope info ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) ## 1.7.0-rc.1 From 982d41475ed0d27b6dfeab2bd7bc1dad6f88beca Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 15 Dec 2023 14:51:26 +1100 Subject: [PATCH 4/5] Fix linter issues --- src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md | 4 +++- .../CHANGELOG.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md index c965c30a69f..6aaa44aadf1 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md @@ -3,7 +3,9 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* Requests with OpenMetrics format automatically add scope info ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) +* For requests with OpenMetrics format, scope info is automatically added + ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) + [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) ## 1.7.0-rc.1 diff --git a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md index 1d2563374de..22d39a6a99d 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md @@ -3,7 +3,9 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* Requests with OpenMetrics format automatically add scope info ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) +* For requests with OpenMetrics format, scope info is automatically added + ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) + [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) ## 1.7.0-rc.1 From 5ff87f078ccf6ae941a8b6f6c05efa65911b7649 Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 15 Dec 2023 14:56:48 +1100 Subject: [PATCH 5/5] Linter woes --- src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md | 2 +- src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md index 6aaa44aadf1..ba6c9ba7024 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* For requests with OpenMetrics format, scope info is automatically added +* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182)) diff --git a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md index 22d39a6a99d..aa2981a5e16 100644 --- a/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased * Export OpenMetrics format from Prometheus exporters ([#5107](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5107)) -* For requests with OpenMetrics format, scope info is automatically added +* For requests with OpenMetrics format, scope info is automatically added ([#5086](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5086) [#5182](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5182))