This is an automated email from the ASF dual-hosted git repository. elek pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push: new 918b470 HDDS-2166. Some RPC metrics are missing from SCM prometheus endpoint 918b470 is described below commit 918b470deb35c892efcfa8ceba211a38cbe7bf4c Author: Márton Elek <e...@apache.org> AuthorDate: Tue Oct 1 17:41:45 2019 +0200 HDDS-2166. Some RPC metrics are missing from SCM prometheus endpoint Closes #1505 --- .../hadoop/hdds/server/PrometheusMetricsSink.java | 16 +++-- .../hdds/server/TestPrometheusMetricsSink.java | 77 ++++++++++++++++++++-- 2 files changed, 84 insertions(+), 9 deletions(-) diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/PrometheusMetricsSink.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/PrometheusMetricsSink.java index 39c8c8b..f37d323 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/PrometheusMetricsSink.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/PrometheusMetricsSink.java @@ -69,8 +69,10 @@ public class PrometheusMetricsSink implements MetricsSink { .append(key) .append(" ") .append(metrics.type().toString().toLowerCase()) - .append("\n") - .append(key) + .append("\n"); + + StringBuilder prometheusMetricKey = new StringBuilder(); + prometheusMetricKey.append(key) .append("{"); String sep = ""; @@ -80,7 +82,7 @@ public class PrometheusMetricsSink implements MetricsSink { //ignore specific tag which includes sub-hierarchy if (!tagName.equals("numopenconnectionsperuser")) { - builder.append(sep) + prometheusMetricKey.append(sep) .append(tagName) .append("=\"") .append(tag.value()) @@ -88,10 +90,14 @@ public class PrometheusMetricsSink implements MetricsSink { sep = ","; } } - builder.append("} "); + prometheusMetricKey.append("}"); + + String prometheusMetricKeyAsString = prometheusMetricKey.toString(); + builder.append(prometheusMetricKeyAsString); + builder.append(" "); builder.append(metrics.value()); builder.append("\n"); - metricLines.put(key, builder.toString()); + metricLines.put(prometheusMetricKeyAsString, builder.toString()); } } diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/TestPrometheusMetricsSink.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/TestPrometheusMetricsSink.java index e233f65..f2683b5 100644 --- a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/TestPrometheusMetricsSink.java +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/TestPrometheusMetricsSink.java @@ -21,17 +21,19 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import org.apache.hadoop.metrics2.MetricsInfo; +import org.apache.hadoop.metrics2.MetricsSource; import org.apache.hadoop.metrics2.MetricsSystem; +import org.apache.hadoop.metrics2.MetricsTag; import org.apache.hadoop.metrics2.annotation.Metric; import org.apache.hadoop.metrics2.annotation.Metrics; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.lib.MutableCounterLong; +import static java.nio.charset.StandardCharsets.UTF_8; import org.junit.Assert; import org.junit.Test; -import static java.nio.charset.StandardCharsets.UTF_8; - /** * Test prometheus Sink. */ @@ -60,7 +62,6 @@ public class TestPrometheusMetricsSink { //THEN String writtenMetrics = stream.toString(UTF_8.name()); - System.out.println(writtenMetrics); Assert.assertTrue( "The expected metric line is missing from prometheus metrics output", writtenMetrics.contains( @@ -72,6 +73,49 @@ public class TestPrometheusMetricsSink { } @Test + public void testPublishWithSameName() throws IOException { + //GIVEN + MetricsSystem metrics = DefaultMetricsSystem.instance(); + + metrics.init("test"); + PrometheusMetricsSink sink = new PrometheusMetricsSink(); + metrics.register("Prometheus", "Prometheus", sink); + metrics.register("FooBar", "fooBar", (MetricsSource) (collector, all) -> { + collector.addRecord("RpcMetrics").add(new MetricsTag(PORT_INFO, "1234")) + .addGauge(COUNTER_INFO, 123).endRecord(); + + collector.addRecord("RpcMetrics").add(new MetricsTag( + PORT_INFO, "2345")).addGauge(COUNTER_INFO, 234).endRecord(); + }); + + metrics.start(); + metrics.publishMetricsNow(); + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + OutputStreamWriter writer = new OutputStreamWriter(stream, UTF_8); + + //WHEN + sink.writeMetrics(writer); + writer.flush(); + + //THEN + String writtenMetrics = stream.toString(UTF_8.name()); + Assert.assertTrue( + "The expected metric line is missing from prometheus metrics output", + writtenMetrics.contains( + "rpc_metrics_counter{port=\"2345\"")); + + Assert.assertTrue( + "The expected metric line is missing from prometheus metrics " + + "output", + writtenMetrics.contains( + "rpc_metrics_counter{port=\"1234\"")); + + metrics.stop(); + metrics.shutdown(); + } + + @Test public void testNamingCamelCase() { PrometheusMetricsSink sink = new PrometheusMetricsSink(); @@ -127,4 +171,29 @@ public class TestPrometheusMetricsSink { @Metric private MutableCounterLong numBucketCreateFails; } -} \ No newline at end of file + + public static final MetricsInfo PORT_INFO = new MetricsInfo() { + @Override + public String name() { + return "PORT"; + } + + @Override + public String description() { + return "port"; + } + }; + + public static final MetricsInfo COUNTER_INFO = new MetricsInfo() { + @Override + public String name() { + return "COUNTER"; + } + + @Override + public String description() { + return "counter"; + } + }; + +} --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org