From eafaaf1617f5d7490d5fa1e34d4612259ef382d8 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 19 May 2025 18:59:53 +0200 Subject: [PATCH 1/7] add scope schema URL and attributes to prom attributes --- .../prometheus/Otel2PrometheusConverter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java index 664ad1bd4c2..afa04a81394 100644 --- a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java +++ b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java @@ -77,6 +77,8 @@ final class Otel2PrometheusConverter { private static final ThrottlingLogger THROTTLING_LOGGER = new ThrottlingLogger(LOGGER); private static final String OTEL_SCOPE_NAME = "otel_scope_name"; private static final String OTEL_SCOPE_VERSION = "otel_scope_version"; + private static final String OTEL_SCOPE_SCHEMA_URL = "otel_scope_schema_url"; + private static final String OTEL_SCOPE_ATTRIBUTE_PREFIX = "otel_scope_"; private static final long NANOS_PER_MILLISECOND = TimeUnit.MILLISECONDS.toNanos(1); static final int MAX_CACHE_SIZE = 10; @@ -488,6 +490,16 @@ private Labels convertAttributes( if (scope.getVersion() != null) { labelNameToValue.putIfAbsent(OTEL_SCOPE_VERSION, scope.getVersion()); } + String schemaUrl = scope.getSchemaUrl(); + if (schemaUrl != null) { + labelNameToValue.putIfAbsent(OTEL_SCOPE_SCHEMA_URL, schemaUrl); + } + scope + .getAttributes() + .forEach( + (key, value) -> + labelNameToValue.putIfAbsent( + OTEL_SCOPE_ATTRIBUTE_PREFIX + key.getKey(), value.toString())); } if (resource != null) { From 35d368c4aa7dc45e868983b2a2281d00ff4dfa36 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Mon, 19 May 2025 19:41:36 +0200 Subject: [PATCH 2/7] add test --- .../Otel2PrometheusConverterTest.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java index 6395d60c75e..414f9e15fc6 100644 --- a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java +++ b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java @@ -49,7 +49,6 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Predicate; -import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -63,7 +62,9 @@ class Otel2PrometheusConverterTest { private static final Pattern PATTERN = Pattern.compile( - "# HELP (?.*)\n# TYPE (?.*)\n(?.*)\\{otel_scope_name=\"scope\"}(.|\\n)*"); + "(.|\\n)*# HELP (?.*)\n# TYPE (?.*)\n(?.*)\\{" + + "otel_scope_foo=\"bar\",otel_scope_name=\"scope\"," + + "otel_scope_schema_url=\"schemaUrl\",otel_scope_version=\"version\"}(.|\\n)*"); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final Otel2PrometheusConverter converter = @@ -79,16 +80,17 @@ void metricMetadata( ExpositionFormats.init().getPrometheusTextFormatWriter().write(out, snapshots); String expositionFormat = new String(out.toByteArray(), StandardCharsets.UTF_8); - // Uncomment to debug exposition format output - // System.out.println(expositionFormat); - - Matcher matcher = PATTERN.matcher(expositionFormat); - assertThat(matcher.matches()).isTrue(); - assertThat(matcher.group("help")).isEqualTo(expectedHelp); - assertThat(matcher.group("type")).isEqualTo(expectedType); - // Note: Summaries and histograms produce output which matches METRIC_NAME_PATTERN multiple - // times. The pattern ends up matching against the first. - assertThat(matcher.group("metricName")).isEqualTo(expectedMetricName); + assertThat(expositionFormat) + .matchesSatisfying( + PATTERN, + matcher -> { + assertThat(matcher.group("help")).isEqualTo(expectedHelp); + assertThat(matcher.group("type")).isEqualTo(expectedType); + // Note: Summaries and histograms produce output which matches METRIC_NAME_PATTERN + // multiple + // times. The pattern ends up matching against the first. + assertThat(matcher.group("metricName")).isEqualTo(expectedMetricName); + }); } private static Stream metricMetadataArgs() { @@ -368,11 +370,17 @@ static MetricData createSampleMetricData( Attributes attributesToUse = attributes == null ? Attributes.empty() : attributes; Resource resourceToUse = resource == null ? Resource.getDefault() : resource; + InstrumentationScopeInfo scope = + InstrumentationScopeInfo.builder("scope") + .setVersion("version") + .setSchemaUrl("schemaUrl") + .setAttributes(Attributes.of(stringKey("foo"), "bar")) + .build(); switch (metricDataType) { case SUMMARY: return ImmutableMetricData.createDoubleSummary( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, @@ -383,7 +391,7 @@ static MetricData createSampleMetricData( case LONG_SUM: return ImmutableMetricData.createLongSum( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, @@ -395,7 +403,7 @@ static MetricData createSampleMetricData( case DOUBLE_SUM: return ImmutableMetricData.createDoubleSum( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, @@ -407,7 +415,7 @@ static MetricData createSampleMetricData( case LONG_GAUGE: return ImmutableMetricData.createLongGauge( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, @@ -417,7 +425,7 @@ static MetricData createSampleMetricData( case DOUBLE_GAUGE: return ImmutableMetricData.createDoubleGauge( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, @@ -427,7 +435,7 @@ static MetricData createSampleMetricData( case HISTOGRAM: return ImmutableMetricData.createDoubleHistogram( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, @@ -448,7 +456,7 @@ static MetricData createSampleMetricData( case EXPONENTIAL_HISTOGRAM: return ImmutableMetricData.createExponentialHistogram( resourceToUse, - InstrumentationScopeInfo.create("scope"), + scope, metricName, "description", metricUnit, From 6bea683350cc64be75c26795f432cf7845215de8 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 23 May 2025 12:07:49 +0200 Subject: [PATCH 3/7] alwayse set schema url --- .../exporter/prometheus/Otel2PrometheusConverter.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java index afa04a81394..d89afdab324 100644 --- a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java +++ b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java @@ -491,9 +491,7 @@ private Labels convertAttributes( labelNameToValue.putIfAbsent(OTEL_SCOPE_VERSION, scope.getVersion()); } String schemaUrl = scope.getSchemaUrl(); - if (schemaUrl != null) { - labelNameToValue.putIfAbsent(OTEL_SCOPE_SCHEMA_URL, schemaUrl); - } + labelNameToValue.putIfAbsent(OTEL_SCOPE_SCHEMA_URL, schemaUrl == null ? "" : schemaUrl); scope .getAttributes() .forEach( From abe0c34112e3603f4ad6df2581843a580f9ab48d Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 23 May 2025 15:01:48 +0200 Subject: [PATCH 4/7] always set schema url --- .../prometheus/PrometheusHttpServerTest.java | 30 +-- .../PrometheusMetricReaderTest.java | 198 ++++++++++-------- 2 files changed, 122 insertions(+), 106 deletions(-) diff --git a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java index 81b85fb9487..c0250ed4fd1 100644 --- a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java +++ b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java @@ -139,10 +139,10 @@ void fetchPrometheus() { .isEqualTo( "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -229,11 +229,11 @@ void fetchOpenMetrics() { "# TYPE grpc_name_unit counter\n" + "# UNIT grpc_name_unit unit\n" + "# HELP grpc_name_unit long_description\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + "# TYPE http_name_unit counter\n" + "# UNIT http_name_unit unit\n" + "# HELP http_name_unit double_description\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target info\n" + "target_info{kr=\"vr\"} 1\n" + "# EOF\n"); @@ -255,7 +255,7 @@ void fetchFiltered() { "" + "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -292,10 +292,10 @@ public Collection collectAllMetrics() { .isEqualTo( "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -320,10 +320,10 @@ void fetchPrometheusCompressed() throws IOException { .isEqualTo( "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -395,8 +395,8 @@ void fetch_DuplicateMetrics() { assertThat(response.contentUtf8()) .isEqualTo( "# TYPE foo_unit_total counter\n" - + "foo_unit_total{otel_scope_name=\"scope1\"} 1.0\n" - + "foo_unit_total{otel_scope_name=\"scope2\"} 2.0\n" + + "foo_unit_total{otel_scope_name=\"scope1\",otel_scope_schema_url=\"\"} 1.0\n" + + "foo_unit_total{otel_scope_name=\"scope2\",otel_scope_schema_url=\"\"} 2.0\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); @@ -476,12 +476,12 @@ public Collection collectAllMetrics() { + "# TYPE grpc_name_unit_total counter\n" // Note the added resource attributes as labels - + "grpc_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" // Note the added resource attributes as labels - + "http_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -606,6 +606,10 @@ void histogramDefaultBase2ExponentialHistogram() throws IOException { + " name: \"otel_scope_name\"\n" + " value: \"meter\"\n" + " }\n" + + " label {\n" + + " name: \"otel_scope_schema_url\"\n" + + " value: \"\"\n" + + " }\n" + " histogram {\n" + " sample_count: 1\n" + " sample_sum: 1.0\n" diff --git a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java index 20076cc9c9d..457b6be6e5f 100644 --- a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java +++ b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java @@ -134,20 +134,20 @@ private void assertCounterComplete(MetricSnapshots snapshots, Span span1, Span s + "# TYPE requests_size_bytes counter\n" + "# UNIT requests_size_bytes bytes\n" + "# HELP requests_size_bytes some help text\n" - + "requests_size_bytes_total{animal=\"bear\",otel_scope_name=\"test\"} 3.0 # {span_id=\"" + + "requests_size_bytes_total{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0 # {span_id=\"" + span1.getSpanContext().getSpanId() + "\",trace_id=\"" + span1.getSpanContext().getTraceId() + "\"} 3.0 \n" - + "requests_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\"} " + + "requests_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" - + "requests_size_bytes_total{animal=\"mouse\",otel_scope_name=\"test\"} 2.0 # {span_id=\"" + + "requests_size_bytes_total{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0 # {span_id=\"" + span2.getSpanContext().getSpanId() + "\",trace_id=\"" + span2.getSpanContext().getTraceId() + "\"} 2.0 \n" - + "requests_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\"} " + + "requests_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -174,8 +174,8 @@ private void assertCounterMinimal(MetricSnapshots snapshots) throws IOException String expected = "" + "# TYPE requests counter\n" - + "requests_total{otel_scope_name=\"test\"} 2.0\n" - + "requests_created{otel_scope_name=\"test\"} " + + "requests_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" + + "requests_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -238,12 +238,12 @@ private static void assertUpDownCounterComplete(MetricSnapshots snapshots, Span + "# TYPE queue_size_bytes gauge\n" + "# UNIT queue_size_bytes bytes\n" + "# HELP queue_size_bytes some help text\n" - + "queue_size_bytes{animal=\"bear\",otel_scope_name=\"test\"} 3.0 # {span_id=\"" + + "queue_size_bytes{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0 # {span_id=\"" + span1.getSpanContext().getSpanId() + "\",trace_id=\"" + span1.getSpanContext().getTraceId() + "\"} 3.0 \n" - + "queue_size_bytes{animal=\"mouse\",otel_scope_name=\"test\"} 2.0 # {span_id=\"" + + "queue_size_bytes{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0 # {span_id=\"" + span2.getSpanContext().getSpanId() + "\",trace_id=\"" + span2.getSpanContext().getTraceId() @@ -274,7 +274,7 @@ private static void assertUpDownCounterMinimal(MetricSnapshots snapshots) throws + "# TYPE target info\n" + "target_info{service_name=\"unknown_service:java\",telemetry_sdk_language=\"java\",telemetry_sdk_name=\"opentelemetry\",telemetry_sdk_version=\"1.x.x\"} 1\n" + "# TYPE users_active gauge\n" - + "users_active{otel_scope_name=\"test\"} 27.0\n" + + "users_active{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 27.0\n" + "# EOF\n"; assertThat(toOpenMetrics(snapshots)).isEqualTo(expected); } @@ -316,8 +316,8 @@ private static void assertGaugeComplete(MetricSnapshots snapshots) throws IOExce + "# TYPE temperature_celsius gauge\n" + "# UNIT temperature_celsius celsius\n" + "# HELP temperature_celsius help text\n" - + "temperature_celsius{location=\"inside\",otel_scope_name=\"test\"} 23.0\n" - + "temperature_celsius{location=\"outside\",otel_scope_name=\"test\"} 17.0\n" + + "temperature_celsius{location=\"inside\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 23.0\n" + + "temperature_celsius{location=\"outside\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 17.0\n" + "# EOF\n"; assertThat(toOpenMetrics(snapshots)).isEqualTo(expected); } @@ -338,7 +338,7 @@ private static void assertGaugeMinimal(MetricSnapshots snapshots) throws IOExcep String expected = "" + "# TYPE my_gauge gauge\n" - + "my_gauge{otel_scope_name=\"test\"} 2.0\n" + + "my_gauge{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" + "# TYPE target info\n" + "target_info{service_name=\"unknown_service:java\",telemetry_sdk_language=\"java\",telemetry_sdk_name=\"opentelemetry\",telemetry_sdk_version=\"1.x.x\"} 1\n" + "# EOF\n"; @@ -411,66 +411,66 @@ private void assertHistogramComplete( + "# TYPE request_size_bytes histogram\n" + "# UNIT request_size_bytes bytes\n" + "# HELP request_size_bytes some help text\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"0.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"5.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"10.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"25.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"50.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"75.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"100.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"250.0\"} 1 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"0.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"25.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"50.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"75.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"100.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"250.0\"} 1 # {span_id=\"" + span1.getSpanContext().getSpanId() + "\",trace_id=\"" + span1.getSpanContext().getTraceId() + "\"} 173.0 \n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"500.0\"} 2 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"500.0\"} 2 # {span_id=\"" + span2.getSpanContext().getSpanId() + "\",trace_id=\"" + span2.getSpanContext().getTraceId() + "\"} 400.0 \n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"750.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"1000.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"2500.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"5000.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"7500.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"10000.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"+Inf\"} 2\n" - + "request_size_bytes_count{animal=\"bear\",otel_scope_name=\"test\"} 2 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"750.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"1000.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"2500.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5000.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"7500.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10000.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"+Inf\"} 2\n" + + "request_size_bytes_count{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2 # {span_id=\"" + "" + "\",trace_id=\"" + "" + "\"} \n" - + "request_size_bytes_sum{animal=\"bear\",otel_scope_name=\"test\"} 573.0\n" - + "request_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\"} " + + "request_size_bytes_sum{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 573.0\n" + + "request_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"0.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"5.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"10.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"25.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"50.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"75.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"100.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"250.0\"} 1 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"0.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"25.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"50.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"75.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"100.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"250.0\"} 1 # {span_id=\"" + span3.getSpanContext().getSpanId() + "\",trace_id=\"" + span3.getSpanContext().getTraceId() + "\"} 204.0 \n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"500.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"750.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"1000.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"2500.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"5000.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"7500.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"10000.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"+Inf\"} 1\n" - + "request_size_bytes_count{animal=\"mouse\",otel_scope_name=\"test\"} 1 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"500.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"750.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"1000.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"2500.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5000.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"7500.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10000.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"+Inf\"} 1\n" + + "request_size_bytes_count{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 1 # {span_id=\"" + span3.getSpanContext().getSpanId() + "\",trace_id=\"" + span3.getSpanContext().getTraceId() + "\"} 204.0 \n" - + "request_size_bytes_sum{animal=\"mouse\",otel_scope_name=\"test\"} 204.0\n" - + "request_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\"} " + + "request_size_bytes_sum{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 204.0\n" + + "request_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -501,25 +501,25 @@ private void assertHistogramMinimal(MetricSnapshots snapshots) throws IOExceptio String expected = "" + "# TYPE request_size histogram\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"0.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"5.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"10.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"25.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"50.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"75.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"100.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"250.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"500.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"750.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"1000.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"2500.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"5000.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"7500.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"10000.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",le=\"+Inf\"} 3\n" - + "request_size_count{otel_scope_name=\"test\"} 3\n" - + "request_size_sum{otel_scope_name=\"test\"} 100346.0\n" - + "request_size_created{otel_scope_name=\"test\"} " + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"0.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"25.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"50.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"75.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"100.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"250.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"500.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"750.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"1000.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"2500.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5000.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"7500.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10000.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"+Inf\"} 3\n" + + "request_size_count{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3\n" + + "request_size_sum{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 100346.0\n" + + "request_size_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -594,6 +594,10 @@ private static void assertExponentialHistogramComplete( + " name: \"otel_scope_name\"\n" + " value: \"test\"\n" + " }\n" + + " label {\n" + + " name: \"otel_scope_schema_url\"\n" + + " value: \"\"\n" + + " }\n" + " histogram {\n" + " sample_count: 2\n" + " sample_sum: 7.0\n" @@ -639,6 +643,10 @@ private static void assertExponentialHistogramComplete( + " name: \"otel_scope_name\"\n" + " value: \"test\"\n" + " }\n" + + " label {\n" + + " name: \"otel_scope_schema_url\"\n" + + " value: \"\"\n" + + " }\n" + " histogram {\n" + " sample_count: 1\n" + " sample_sum: 3.0\n" @@ -730,6 +738,10 @@ private static void assertExponentialHistogramMinimal(MetricSnapshots snapshots) + " name: \"otel_scope_name\"\n" + " value: \"test\"\n" + " }\n" + + " label {\n" + + " name: \"otel_scope_schema_url\"\n" + + " value: \"\"\n" + + " }\n" + " histogram {\n" + " sample_count: 1\n" + " sample_sum: 1.0\n" @@ -870,12 +882,12 @@ void instrumentationScope() throws IOException { + "# TYPE processing_time_seconds counter\n" + "# UNIT processing_time_seconds seconds\n" + "# HELP processing_time_seconds processing time in seconds\n" - + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_version=\"1.1\"} 3.3\n" - + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_version=\"1.1\"} " + + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_schema_url=\"\",otel_scope_version=\"1.1\"} 3.3\n" + + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_schema_url=\"\",otel_scope_version=\"1.1\"} " + createdTimestamp + "\n" - + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_version=\"1.2\"} 3.3\n" - + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_version=\"1.2\"} " + + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_schema_url=\"\",otel_scope_version=\"1.2\"} 3.3\n" + + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_schema_url=\"\",otel_scope_version=\"1.2\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -899,26 +911,26 @@ void nameSuffix() throws IOException { "" + "# TYPE processing_duration_seconds counter\n" + "# UNIT processing_duration_seconds seconds\n" - + "processing_duration_seconds_total{otel_scope_name=\"test\"} 3.0\n" - + "processing_duration_seconds_created{otel_scope_name=\"test\"} " + + "processing_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0\n" + + "processing_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE queue_time_seconds counter\n" + "# UNIT queue_time_seconds seconds\n" - + "queue_time_seconds_total{otel_scope_name=\"test\"} 4.0\n" - + "queue_time_seconds_created{otel_scope_name=\"test\"} " + + "queue_time_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 4.0\n" + + "queue_time_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE request_duration_seconds counter\n" + "# UNIT request_duration_seconds seconds\n" - + "request_duration_seconds_total{otel_scope_name=\"test\"} 1.0\n" - + "request_duration_seconds_created{otel_scope_name=\"test\"} " + + "request_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 1.0\n" + + "request_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE response_duration_seconds counter\n" + "# UNIT response_duration_seconds seconds\n" - + "response_duration_seconds_total{otel_scope_name=\"test\"} 2.0\n" - + "response_duration_seconds_created{otel_scope_name=\"test\"} " + + "response_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" + + "response_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -935,8 +947,8 @@ void nameSuffixUnit() throws IOException { "" + "# TYPE request_duration_seconds counter\n" + "# UNIT request_duration_seconds seconds\n" - + "request_duration_seconds_total{otel_scope_name=\"test\"} 1.0\n" - + "request_duration_seconds_created{otel_scope_name=\"test\"} " + + "request_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 1.0\n" + + "request_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -952,8 +964,8 @@ void illegalCharacters() throws IOException { String expected = "" + "# TYPE prod_request_count counter\n" - + "prod_request_count_total{otel_scope_name=\"test\",user_count=\"30\"} 1.0\n" - + "prod_request_count_created{otel_scope_name=\"test\",user_count=\"30\"} " + + "prod_request_count_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\",user_count=\"30\"} 1.0\n" + + "prod_request_count_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\",user_count=\"30\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -983,12 +995,12 @@ void createdTimestamp() throws IOException { String expected = "" + "# TYPE requests counter\n" - + "requests_total{animal=\"bear\",otel_scope_name=\"test\"} 3.0\n" - + "requests_created{animal=\"bear\",otel_scope_name=\"test\"} " + + "requests_total{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0\n" + + "requests_created{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" - + "requests_total{animal=\"mouse\",otel_scope_name=\"test\"} 2.0\n" - + "requests_created{animal=\"mouse\",otel_scope_name=\"test\"} " + + "requests_total{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" + + "requests_created{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -1018,8 +1030,8 @@ void otelScopeComplete() throws IOException { + "# TYPE target info\n" + "target_info{service_name=\"unknown_service:java\",telemetry_sdk_language=\"java\",telemetry_sdk_name=\"opentelemetry\",telemetry_sdk_version=\"1.x.x\"} 1\n" + "# TYPE test_count counter\n" - + "test_count_total{otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} 1.0\n" - + "test_count_created{otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} " + + "test_count_total{otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} 1.0\n" + + "test_count_created{otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} " + createdTimestamp + "\n" + "# EOF\n"; @@ -1083,8 +1095,8 @@ void addResourceAttributesWorks() throws IOException { + "# TYPE test_count counter\n" // In both those metrics we expect the "cluster" label to exist - + "test_count_total{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} 1.0\n" - + "test_count_created{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} " + + "test_count_total{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} 1.0\n" + + "test_count_created{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} " + createdTimestamp + "\n" + "# EOF\n"; From 8cb841854f1eff4b1d54d12649a31e4a0c925ef9 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 5 Jun 2025 15:48:26 +0200 Subject: [PATCH 5/7] fix test --- .../prometheus/Otel2PrometheusConverterTest.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java index 414f9e15fc6..4e718c78629 100644 --- a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java +++ b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverterTest.java @@ -38,7 +38,9 @@ import io.opentelemetry.sdk.metrics.internal.data.ImmutableSummaryPointData; import io.opentelemetry.sdk.resources.Resource; import io.prometheus.metrics.expositionformats.ExpositionFormats; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; import io.prometheus.metrics.model.snapshots.Labels; +import io.prometheus.metrics.model.snapshots.MetricSnapshot; import io.prometheus.metrics.model.snapshots.MetricSnapshots; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -47,6 +49,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Predicate; import java.util.regex.Pattern; @@ -241,7 +244,7 @@ private static Stream resourceAttributesAdditionArgs() { : "my_metric_units", // "cluster" attribute is added (due to reg expr specified) and only it - "cluster=\"mycluster\",foo1=\"bar1\",foo2=\"bar2\",otel_scope_name=\"scope\"")); + "cluster=\"mycluster\",foo1=\"bar1\",foo2=\"bar2\",otel_scope_foo=\"bar\",otel_scope_name=\"scope\",otel_scope_schema_url=\"schemaUrl\",otel_scope_version=\"version\"")); } // Resource attributes which also exists in the metric labels are not added twice @@ -260,7 +263,7 @@ private static Stream resourceAttributesAdditionArgs() { // "cluster" attribute is present only once and the value is taken // from the metric attributes and not the resource attributes - "cluster=\"mycluster2\",foo2=\"bar2\",otel_scope_name=\"scope\"")); + "cluster=\"mycluster2\",foo2=\"bar2\",otel_scope_foo=\"bar\",otel_scope_name=\"scope\",otel_scope_schema_url=\"schemaUrl\",otel_scope_version=\"version\"")); // Empty attributes arguments.add( @@ -275,7 +278,7 @@ private static Stream resourceAttributesAdditionArgs() { stringKey("host"), "localhost", stringKey("cluster"), "mycluster"))), /* allowedResourceAttributesFilter= */ Predicates.startsWith("clu"), "my_metric_units", - "cluster=\"mycluster\",otel_scope_name=\"scope\"")); + "cluster=\"mycluster\",otel_scope_foo=\"bar\",otel_scope_name=\"scope\",otel_scope_schema_url=\"schemaUrl\",otel_scope_version=\"version\"")); return arguments.stream(); } @@ -316,7 +319,11 @@ void labelValueSerialization(Attributes attributes) { MetricSnapshots snapshots = converter.convert(Collections.singletonList(metricData)); - Labels labels = snapshots.get(0).getDataPoints().get(0).getLabels(); + Optional metricSnapshot = + snapshots.stream().filter(snapshot -> snapshot instanceof CounterSnapshot).findFirst(); + assertThat(metricSnapshot).isPresent(); + + Labels labels = metricSnapshot.get().getDataPoints().get(0).getLabels(); attributes.forEach( (key, value) -> { String labelValue = labels.get(key.getKey()); From 79b8ac5142bd339888b9ea85c462441d6b1e42fb Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Wed, 9 Jul 2025 17:10:21 +0200 Subject: [PATCH 6/7] Update exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java Co-authored-by: jack-berg <34418638+jack-berg@users.noreply.github.com> --- .../exporter/prometheus/Otel2PrometheusConverter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java index d89afdab324..afa04a81394 100644 --- a/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java +++ b/exporters/prometheus/src/main/java/io/opentelemetry/exporter/prometheus/Otel2PrometheusConverter.java @@ -491,7 +491,9 @@ private Labels convertAttributes( labelNameToValue.putIfAbsent(OTEL_SCOPE_VERSION, scope.getVersion()); } String schemaUrl = scope.getSchemaUrl(); - labelNameToValue.putIfAbsent(OTEL_SCOPE_SCHEMA_URL, schemaUrl == null ? "" : schemaUrl); + if (schemaUrl != null) { + labelNameToValue.putIfAbsent(OTEL_SCOPE_SCHEMA_URL, schemaUrl); + } scope .getAttributes() .forEach( From 2edc05f85b69e561e19ffc9fb2d0719345f7d54e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 10 Jul 2025 12:52:24 +0200 Subject: [PATCH 7/7] fix --- .../prometheus/PrometheusHttpServerTest.java | 30 ++- .../PrometheusMetricReaderTest.java | 198 ++++++++---------- 2 files changed, 106 insertions(+), 122 deletions(-) diff --git a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java index c0250ed4fd1..81b85fb9487 100644 --- a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java +++ b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusHttpServerTest.java @@ -139,10 +139,10 @@ void fetchPrometheus() { .isEqualTo( "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -229,11 +229,11 @@ void fetchOpenMetrics() { "# TYPE grpc_name_unit counter\n" + "# UNIT grpc_name_unit unit\n" + "# HELP grpc_name_unit long_description\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + "# TYPE http_name_unit counter\n" + "# UNIT http_name_unit unit\n" + "# HELP http_name_unit double_description\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target info\n" + "target_info{kr=\"vr\"} 1\n" + "# EOF\n"); @@ -255,7 +255,7 @@ void fetchFiltered() { "" + "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -292,10 +292,10 @@ public Collection collectAllMetrics() { .isEqualTo( "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -320,10 +320,10 @@ void fetchPrometheusCompressed() throws IOException { .isEqualTo( "# HELP grpc_name_unit_total long_description\n" + "# TYPE grpc_name_unit_total counter\n" - + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" - + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -395,8 +395,8 @@ void fetch_DuplicateMetrics() { assertThat(response.contentUtf8()) .isEqualTo( "# TYPE foo_unit_total counter\n" - + "foo_unit_total{otel_scope_name=\"scope1\",otel_scope_schema_url=\"\"} 1.0\n" - + "foo_unit_total{otel_scope_name=\"scope2\",otel_scope_schema_url=\"\"} 2.0\n" + + "foo_unit_total{otel_scope_name=\"scope1\"} 1.0\n" + + "foo_unit_total{otel_scope_name=\"scope2\"} 2.0\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); @@ -476,12 +476,12 @@ public Collection collectAllMetrics() { + "# TYPE grpc_name_unit_total counter\n" // Note the added resource attributes as labels - + "grpc_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"grpc\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 5.0\n" + + "grpc_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"grpc\",otel_scope_version=\"version\"} 5.0\n" + "# HELP http_name_unit_total double_description\n" + "# TYPE http_name_unit_total counter\n" // Note the added resource attributes as labels - + "http_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"http\",otel_scope_schema_url=\"\",otel_scope_version=\"version\"} 3.5\n" + + "http_name_unit_total{kp=\"vp\",kr=\"vr\",otel_scope_name=\"http\",otel_scope_version=\"version\"} 3.5\n" + "# TYPE target_info gauge\n" + "target_info{kr=\"vr\"} 1\n"); } @@ -606,10 +606,6 @@ void histogramDefaultBase2ExponentialHistogram() throws IOException { + " name: \"otel_scope_name\"\n" + " value: \"meter\"\n" + " }\n" - + " label {\n" - + " name: \"otel_scope_schema_url\"\n" - + " value: \"\"\n" - + " }\n" + " histogram {\n" + " sample_count: 1\n" + " sample_sum: 1.0\n" diff --git a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java index 457b6be6e5f..20076cc9c9d 100644 --- a/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java +++ b/exporters/prometheus/src/test/java/io/opentelemetry/exporter/prometheus/PrometheusMetricReaderTest.java @@ -134,20 +134,20 @@ private void assertCounterComplete(MetricSnapshots snapshots, Span span1, Span s + "# TYPE requests_size_bytes counter\n" + "# UNIT requests_size_bytes bytes\n" + "# HELP requests_size_bytes some help text\n" - + "requests_size_bytes_total{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0 # {span_id=\"" + + "requests_size_bytes_total{animal=\"bear\",otel_scope_name=\"test\"} 3.0 # {span_id=\"" + span1.getSpanContext().getSpanId() + "\",trace_id=\"" + span1.getSpanContext().getTraceId() + "\"} 3.0 \n" - + "requests_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "requests_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\"} " + createdTimestamp + "\n" - + "requests_size_bytes_total{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0 # {span_id=\"" + + "requests_size_bytes_total{animal=\"mouse\",otel_scope_name=\"test\"} 2.0 # {span_id=\"" + span2.getSpanContext().getSpanId() + "\",trace_id=\"" + span2.getSpanContext().getTraceId() + "\"} 2.0 \n" - + "requests_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "requests_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -174,8 +174,8 @@ private void assertCounterMinimal(MetricSnapshots snapshots) throws IOException String expected = "" + "# TYPE requests counter\n" - + "requests_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" - + "requests_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "requests_total{otel_scope_name=\"test\"} 2.0\n" + + "requests_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -238,12 +238,12 @@ private static void assertUpDownCounterComplete(MetricSnapshots snapshots, Span + "# TYPE queue_size_bytes gauge\n" + "# UNIT queue_size_bytes bytes\n" + "# HELP queue_size_bytes some help text\n" - + "queue_size_bytes{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0 # {span_id=\"" + + "queue_size_bytes{animal=\"bear\",otel_scope_name=\"test\"} 3.0 # {span_id=\"" + span1.getSpanContext().getSpanId() + "\",trace_id=\"" + span1.getSpanContext().getTraceId() + "\"} 3.0 \n" - + "queue_size_bytes{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0 # {span_id=\"" + + "queue_size_bytes{animal=\"mouse\",otel_scope_name=\"test\"} 2.0 # {span_id=\"" + span2.getSpanContext().getSpanId() + "\",trace_id=\"" + span2.getSpanContext().getTraceId() @@ -274,7 +274,7 @@ private static void assertUpDownCounterMinimal(MetricSnapshots snapshots) throws + "# TYPE target info\n" + "target_info{service_name=\"unknown_service:java\",telemetry_sdk_language=\"java\",telemetry_sdk_name=\"opentelemetry\",telemetry_sdk_version=\"1.x.x\"} 1\n" + "# TYPE users_active gauge\n" - + "users_active{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 27.0\n" + + "users_active{otel_scope_name=\"test\"} 27.0\n" + "# EOF\n"; assertThat(toOpenMetrics(snapshots)).isEqualTo(expected); } @@ -316,8 +316,8 @@ private static void assertGaugeComplete(MetricSnapshots snapshots) throws IOExce + "# TYPE temperature_celsius gauge\n" + "# UNIT temperature_celsius celsius\n" + "# HELP temperature_celsius help text\n" - + "temperature_celsius{location=\"inside\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 23.0\n" - + "temperature_celsius{location=\"outside\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 17.0\n" + + "temperature_celsius{location=\"inside\",otel_scope_name=\"test\"} 23.0\n" + + "temperature_celsius{location=\"outside\",otel_scope_name=\"test\"} 17.0\n" + "# EOF\n"; assertThat(toOpenMetrics(snapshots)).isEqualTo(expected); } @@ -338,7 +338,7 @@ private static void assertGaugeMinimal(MetricSnapshots snapshots) throws IOExcep String expected = "" + "# TYPE my_gauge gauge\n" - + "my_gauge{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" + + "my_gauge{otel_scope_name=\"test\"} 2.0\n" + "# TYPE target info\n" + "target_info{service_name=\"unknown_service:java\",telemetry_sdk_language=\"java\",telemetry_sdk_name=\"opentelemetry\",telemetry_sdk_version=\"1.x.x\"} 1\n" + "# EOF\n"; @@ -411,66 +411,66 @@ private void assertHistogramComplete( + "# TYPE request_size_bytes histogram\n" + "# UNIT request_size_bytes bytes\n" + "# HELP request_size_bytes some help text\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"0.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"25.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"50.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"75.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"100.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"250.0\"} 1 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"0.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"5.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"10.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"25.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"50.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"75.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"100.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"250.0\"} 1 # {span_id=\"" + span1.getSpanContext().getSpanId() + "\",trace_id=\"" + span1.getSpanContext().getTraceId() + "\"} 173.0 \n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"500.0\"} 2 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"500.0\"} 2 # {span_id=\"" + span2.getSpanContext().getSpanId() + "\",trace_id=\"" + span2.getSpanContext().getTraceId() + "\"} 400.0 \n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"750.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"1000.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"2500.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5000.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"7500.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10000.0\"} 2\n" - + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"+Inf\"} 2\n" - + "request_size_bytes_count{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"750.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"1000.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"2500.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"5000.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"7500.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"10000.0\"} 2\n" + + "request_size_bytes_bucket{animal=\"bear\",otel_scope_name=\"test\",le=\"+Inf\"} 2\n" + + "request_size_bytes_count{animal=\"bear\",otel_scope_name=\"test\"} 2 # {span_id=\"" + "" + "\",trace_id=\"" + "" + "\"} \n" - + "request_size_bytes_sum{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 573.0\n" - + "request_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "request_size_bytes_sum{animal=\"bear\",otel_scope_name=\"test\"} 573.0\n" + + "request_size_bytes_created{animal=\"bear\",otel_scope_name=\"test\"} " + createdTimestamp + "\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"0.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"25.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"50.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"75.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"100.0\"} 0\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"250.0\"} 1 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"0.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"5.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"10.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"25.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"50.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"75.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"100.0\"} 0\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"250.0\"} 1 # {span_id=\"" + span3.getSpanContext().getSpanId() + "\",trace_id=\"" + span3.getSpanContext().getTraceId() + "\"} 204.0 \n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"500.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"750.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"1000.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"2500.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5000.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"7500.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10000.0\"} 1\n" - + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"+Inf\"} 1\n" - + "request_size_bytes_count{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 1 # {span_id=\"" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"500.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"750.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"1000.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"2500.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"5000.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"7500.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"10000.0\"} 1\n" + + "request_size_bytes_bucket{animal=\"mouse\",otel_scope_name=\"test\",le=\"+Inf\"} 1\n" + + "request_size_bytes_count{animal=\"mouse\",otel_scope_name=\"test\"} 1 # {span_id=\"" + span3.getSpanContext().getSpanId() + "\",trace_id=\"" + span3.getSpanContext().getTraceId() + "\"} 204.0 \n" - + "request_size_bytes_sum{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 204.0\n" - + "request_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "request_size_bytes_sum{animal=\"mouse\",otel_scope_name=\"test\"} 204.0\n" + + "request_size_bytes_created{animal=\"mouse\",otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -501,25 +501,25 @@ private void assertHistogramMinimal(MetricSnapshots snapshots) throws IOExceptio String expected = "" + "# TYPE request_size histogram\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"0.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"25.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"50.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"75.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"100.0\"} 0\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"250.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"500.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"750.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"1000.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"2500.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"5000.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"7500.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"10000.0\"} 2\n" - + "request_size_bucket{otel_scope_name=\"test\",otel_scope_schema_url=\"\",le=\"+Inf\"} 3\n" - + "request_size_count{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3\n" - + "request_size_sum{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 100346.0\n" - + "request_size_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "request_size_bucket{otel_scope_name=\"test\",le=\"0.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"5.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"10.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"25.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"50.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"75.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"100.0\"} 0\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"250.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"500.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"750.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"1000.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"2500.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"5000.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"7500.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"10000.0\"} 2\n" + + "request_size_bucket{otel_scope_name=\"test\",le=\"+Inf\"} 3\n" + + "request_size_count{otel_scope_name=\"test\"} 3\n" + + "request_size_sum{otel_scope_name=\"test\"} 100346.0\n" + + "request_size_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -594,10 +594,6 @@ private static void assertExponentialHistogramComplete( + " name: \"otel_scope_name\"\n" + " value: \"test\"\n" + " }\n" - + " label {\n" - + " name: \"otel_scope_schema_url\"\n" - + " value: \"\"\n" - + " }\n" + " histogram {\n" + " sample_count: 2\n" + " sample_sum: 7.0\n" @@ -643,10 +639,6 @@ private static void assertExponentialHistogramComplete( + " name: \"otel_scope_name\"\n" + " value: \"test\"\n" + " }\n" - + " label {\n" - + " name: \"otel_scope_schema_url\"\n" - + " value: \"\"\n" - + " }\n" + " histogram {\n" + " sample_count: 1\n" + " sample_sum: 3.0\n" @@ -738,10 +730,6 @@ private static void assertExponentialHistogramMinimal(MetricSnapshots snapshots) + " name: \"otel_scope_name\"\n" + " value: \"test\"\n" + " }\n" - + " label {\n" - + " name: \"otel_scope_schema_url\"\n" - + " value: \"\"\n" - + " }\n" + " histogram {\n" + " sample_count: 1\n" + " sample_sum: 1.0\n" @@ -882,12 +870,12 @@ void instrumentationScope() throws IOException { + "# TYPE processing_time_seconds counter\n" + "# UNIT processing_time_seconds seconds\n" + "# HELP processing_time_seconds processing time in seconds\n" - + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_schema_url=\"\",otel_scope_version=\"1.1\"} 3.3\n" - + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_schema_url=\"\",otel_scope_version=\"1.1\"} " + + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_version=\"1.1\"} 3.3\n" + + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeA\",otel_scope_version=\"1.1\"} " + createdTimestamp + "\n" - + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_schema_url=\"\",otel_scope_version=\"1.2\"} 3.3\n" - + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_schema_url=\"\",otel_scope_version=\"1.2\"} " + + "processing_time_seconds_total{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_version=\"1.2\"} 3.3\n" + + "processing_time_seconds_created{a=\"b\",otel_scope_name=\"scopeB\",otel_scope_version=\"1.2\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -911,26 +899,26 @@ void nameSuffix() throws IOException { "" + "# TYPE processing_duration_seconds counter\n" + "# UNIT processing_duration_seconds seconds\n" - + "processing_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0\n" - + "processing_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "processing_duration_seconds_total{otel_scope_name=\"test\"} 3.0\n" + + "processing_duration_seconds_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE queue_time_seconds counter\n" + "# UNIT queue_time_seconds seconds\n" - + "queue_time_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 4.0\n" - + "queue_time_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "queue_time_seconds_total{otel_scope_name=\"test\"} 4.0\n" + + "queue_time_seconds_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE request_duration_seconds counter\n" + "# UNIT request_duration_seconds seconds\n" - + "request_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 1.0\n" - + "request_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "request_duration_seconds_total{otel_scope_name=\"test\"} 1.0\n" + + "request_duration_seconds_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE response_duration_seconds counter\n" + "# UNIT response_duration_seconds seconds\n" - + "response_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" - + "response_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "response_duration_seconds_total{otel_scope_name=\"test\"} 2.0\n" + + "response_duration_seconds_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -947,8 +935,8 @@ void nameSuffixUnit() throws IOException { "" + "# TYPE request_duration_seconds counter\n" + "# UNIT request_duration_seconds seconds\n" - + "request_duration_seconds_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 1.0\n" - + "request_duration_seconds_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "request_duration_seconds_total{otel_scope_name=\"test\"} 1.0\n" + + "request_duration_seconds_created{otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -964,8 +952,8 @@ void illegalCharacters() throws IOException { String expected = "" + "# TYPE prod_request_count counter\n" - + "prod_request_count_total{otel_scope_name=\"test\",otel_scope_schema_url=\"\",user_count=\"30\"} 1.0\n" - + "prod_request_count_created{otel_scope_name=\"test\",otel_scope_schema_url=\"\",user_count=\"30\"} " + + "prod_request_count_total{otel_scope_name=\"test\",user_count=\"30\"} 1.0\n" + + "prod_request_count_created{otel_scope_name=\"test\",user_count=\"30\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -995,12 +983,12 @@ void createdTimestamp() throws IOException { String expected = "" + "# TYPE requests counter\n" - + "requests_total{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 3.0\n" - + "requests_created{animal=\"bear\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "requests_total{animal=\"bear\",otel_scope_name=\"test\"} 3.0\n" + + "requests_created{animal=\"bear\",otel_scope_name=\"test\"} " + createdTimestamp + "\n" - + "requests_total{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} 2.0\n" - + "requests_created{animal=\"mouse\",otel_scope_name=\"test\",otel_scope_schema_url=\"\"} " + + "requests_total{animal=\"mouse\",otel_scope_name=\"test\"} 2.0\n" + + "requests_created{animal=\"mouse\",otel_scope_name=\"test\"} " + createdTimestamp + "\n" + "# TYPE target info\n" @@ -1030,8 +1018,8 @@ void otelScopeComplete() throws IOException { + "# TYPE target info\n" + "target_info{service_name=\"unknown_service:java\",telemetry_sdk_language=\"java\",telemetry_sdk_name=\"opentelemetry\",telemetry_sdk_version=\"1.x.x\"} 1\n" + "# TYPE test_count counter\n" - + "test_count_total{otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} 1.0\n" - + "test_count_created{otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} " + + "test_count_total{otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} 1.0\n" + + "test_count_created{otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} " + createdTimestamp + "\n" + "# EOF\n"; @@ -1095,8 +1083,8 @@ void addResourceAttributesWorks() throws IOException { + "# TYPE test_count counter\n" // In both those metrics we expect the "cluster" label to exist - + "test_count_total{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} 1.0\n" - + "test_count_created{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_schema_url=\"\",otel_scope_version=\"a.b.c\"} " + + "test_count_total{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} 1.0\n" + + "test_count_created{cluster=\"my.cluster\",otel_scope_name=\"test-scope\",otel_scope_version=\"a.b.c\"} " + createdTimestamp + "\n" + "# EOF\n";