iliax 1 year ago
parent
commit
e5539f21b5

+ 15 - 1
kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/metrics/prometheus/PrometheusExpose.java

@@ -34,7 +34,6 @@ public final class PrometheusExpose {
   }
   }
 
 
   public static ResponseEntity<String> exposeAllMetrics(Map<String, Metrics> clustersMetrics) {
   public static ResponseEntity<String> exposeAllMetrics(Map<String, Metrics> clustersMetrics) {
-    System.out.println("Exposing metrics:" + clustersMetrics);
     return constructHttpsResponse(getMetricsForGlobalExpose(clustersMetrics));
     return constructHttpsResponse(getMetricsForGlobalExpose(clustersMetrics));
   }
   }
 
 
@@ -95,4 +94,19 @@ public final class PrometheusExpose {
         .body(writer.toString());
         .body(writer.toString());
   }
   }
 
 
+  // copied from io.prometheus.client.exporter.common.TextFormat:writeEscapedLabelValue
+  public static String escapedLabelValue(String s) {
+    StringWriter writer = new StringWriter(s.length());
+    for (int i = 0; i < s.length(); i++) {
+      char c = s.charAt(i);
+      switch (c) {
+        case '\\' -> writer.append("\\\\");
+        case '\"' -> writer.append("\\\"");
+        case '\n' -> writer.append("\\n");
+        default -> writer.append(c);
+      }
+    }
+    return writer.toString();
+  }
+
 }
 }

+ 3 - 2
kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/metrics/sink/KafkaSink.java

@@ -1,6 +1,7 @@
 package com.provectus.kafka.ui.service.metrics.sink;
 package com.provectus.kafka.ui.service.metrics.sink;
 
 
-import static com.provectus.kafka.ui.service.MessagesService.*;
+import static com.provectus.kafka.ui.service.MessagesService.createProducer;
+import static com.provectus.kafka.ui.service.metrics.prometheus.PrometheusExpose.escapedLabelValue;
 import static io.prometheus.client.Collector.*;
 import static io.prometheus.client.Collector.*;
 
 
 import com.fasterxml.jackson.databind.json.JsonMapper;
 import com.fasterxml.jackson.databind.json.JsonMapper;
@@ -54,7 +55,7 @@ class KafkaSink implements MetricsSink {
           var lbls = new LinkedHashMap<String, String>();
           var lbls = new LinkedHashMap<String, String>();
           lbls.put("__name__", sample.name);
           lbls.put("__name__", sample.name);
           for (int i = 0; i < sample.labelNames.size(); i++) {
           for (int i = 0; i < sample.labelNames.size(); i++) {
-            lbls.put(sample.labelNames.get(i), sample.labelValues.get(i));
+            lbls.put(sample.labelNames.get(i), escapedLabelValue(sample.labelValues.get(i)));
           }
           }
           var km = new KafkaMetric(ts, doubleToGoString(sample.value), sample.name, lbls);
           var km = new KafkaMetric(ts, doubleToGoString(sample.value), sample.name, lbls);
           return new ProducerRecord<>(topic, toJson(km));
           return new ProducerRecord<>(topic, toJson(km));

+ 3 - 17
kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/metrics/sink/PrometheusRemoteWriteSink.java

@@ -5,9 +5,8 @@ import static prometheus.Types.Label;
 import static prometheus.Types.Sample;
 import static prometheus.Types.Sample;
 import static prometheus.Types.TimeSeries;
 import static prometheus.Types.TimeSeries;
 
 
+import com.provectus.kafka.ui.service.metrics.prometheus.PrometheusExpose;
 import com.provectus.kafka.ui.util.WebClientConfigurator;
 import com.provectus.kafka.ui.util.WebClientConfigurator;
-import java.io.IOException;
-import java.io.StringWriter;
 import java.net.URI;
 import java.net.URI;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -58,7 +57,7 @@ class PrometheusRemoteWriteSink implements MetricsSink {
           timeSeriesBuilder.addLabels(
           timeSeriesBuilder.addLabels(
               Label.newBuilder()
               Label.newBuilder()
                   .setName(sample.labelNames.get(i))
                   .setName(sample.labelNames.get(i))
-                  .setValue(escapedLabelValue(sample.labelValues.get(i)))
+                  .setValue(PrometheusExpose.escapedLabelValue(sample.labelValues.get(i)))
           );
           );
         }
         }
         timeSeriesBuilder.addSamples(
         timeSeriesBuilder.addSamples(
@@ -69,22 +68,9 @@ class PrometheusRemoteWriteSink implements MetricsSink {
         request.addTimeseries(timeSeriesBuilder);
         request.addTimeseries(timeSeriesBuilder);
       }
       }
     });
     });
-    //TODO: how to pass Metadata ???
+    //TODO: pass Metadata
     return request.build();
     return request.build();
   }
   }
 
 
-  private static String escapedLabelValue(String s) {
-    StringWriter writer = new StringWriter(s.length());
-    for (int i = 0; i < s.length(); i++) {
-      char c = s.charAt(i);
-      switch (c) {
-        case '\\' -> writer.append("\\\\");
-        case '\"' -> writer.append("\\\"");
-        case '\n' -> writer.append("\\n");
-        default -> writer.append(c);
-      }
-    }
-    return writer.toString();
-  }
 
 
 }
 }