Browse Source

HDDS-1867. Invalid Prometheus metric name from JvmMetrics

Closes #1172

(cherry picked from commit 902ff4a2f60cba8e8489dde40e3c8b8ba30a75b4)
Doroszlai, Attila 5 năm trước cách đây
mục cha
commit
e4c16a30d9

+ 5 - 2
hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/PrometheusMetricsSink.java

@@ -49,6 +49,9 @@ public class PrometheusMetricsSink implements MetricsSink {
   private static final Pattern SPLIT_PATTERN =
       Pattern.compile("(?<!(^|[A-Z_]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])");
 
+  private static final Pattern REPLACE_PATTERN =
+      Pattern.compile("[^a-zA-Z0-9]+");
+
   public PrometheusMetricsSink() {
   }
 
@@ -101,9 +104,9 @@ public class PrometheusMetricsSink implements MetricsSink {
 
     String baseName = StringUtils.capitalize(recordName)
         + StringUtils.capitalize(metricName);
-    baseName = baseName.replace('-', '_');
     String[] parts = SPLIT_PATTERN.split(baseName);
-    return String.join("_", parts).toLowerCase();
+    String result = String.join("_", parts).toLowerCase();
+    return REPLACE_PATTERN.matcher(result).replaceAll("_");
   }
 
   @Override

+ 11 - 0
hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/TestPrometheusMetricsSink.java

@@ -107,6 +107,17 @@ public class TestPrometheusMetricsSink {
         sink.prometheusName(recordName, metricName));
   }
 
+  @Test
+  public void testNamingSpaces() {
+    PrometheusMetricsSink sink = new PrometheusMetricsSink();
+
+    String recordName = "JvmMetrics";
+    String metricName = "GcTimeMillisG1 Young Generation";
+    Assert.assertEquals(
+        "jvm_metrics_gc_time_millis_g1_young_generation",
+        sink.prometheusName(recordName, metricName));
+  }
+
   /**
    * Example metric pojo.
    */