diff --git a/api/src/main/java/io/kafbat/ui/service/metrics/RawMetric.java b/api/src/main/java/io/kafbat/ui/service/metrics/RawMetric.java index 3b306872c..89ebd5cdb 100644 --- a/api/src/main/java/io/kafbat/ui/service/metrics/RawMetric.java +++ b/api/src/main/java/io/kafbat/ui/service/metrics/RawMetric.java @@ -2,6 +2,7 @@ import io.prometheus.metrics.core.metrics.Gauge; import io.prometheus.metrics.model.snapshots.MetricSnapshot; +import io.prometheus.metrics.model.snapshots.PrometheusNaming; import java.math.BigDecimal; import java.util.Arrays; import java.util.Collection; @@ -26,13 +27,19 @@ static RawMetric create(String name, Map labels, BigDecimal valu static Stream groupIntoSnapshot(Collection rawMetrics) { Map map = new LinkedHashMap<>(); for (RawMetric m : rawMetrics) { - var lbls = m.labels().keySet().toArray(String[]::new); - var lblVals = Arrays.stream(lbls).map(l -> m.labels().get(l)).toArray(String[]::new); + var lbls = m.labels().keySet() + .stream() + .map(PrometheusNaming::sanitizeLabelName) + .toArray(String[]::new); + var lblVals = Arrays.stream(lbls) + .map(l -> m.labels().get(l)) + .toArray(String[]::new); + var sanitizedName = PrometheusNaming.sanitizeMetricName(m.name()); var gauge = map.computeIfAbsent( - m.name(), + sanitizedName, n -> Gauge.builder() - .name(m.name()) - .help(m.name()) + .name(sanitizedName) + .help(sanitizedName) .labelNames(lbls) .build() );