From 46d37a70d6c613c9f69ecdea43241fab261cee5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20Kov=C3=A1cs?= Date: Fri, 7 Oct 2022 11:31:02 +0200 Subject: [PATCH] HBASE-27395 Adding description to Prometheus metrics (#4807) Signed-off-by: Tamas Payer Signed-off-by: Balazs Meszaros --- .../http/prometheus/PrometheusHadoopServlet.java | 12 +++++++++--- .../hbase/http/prometheus/TestPrometheusServlet.java | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java index c6e13b37c66d..db5952e2fa78 100644 --- a/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java +++ b/hbase-http/src/main/java/org/apache/hadoop/hbase/http/prometheus/PrometheusHadoopServlet.java @@ -41,7 +41,7 @@ public class PrometheusHadoopServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - writeMetrics(resp.getWriter()); + writeMetrics(resp.getWriter(), "true".equals(req.getParameter("description"))); } static String toPrometheusName(String metricRecordName, String metricName) { @@ -57,15 +57,21 @@ static String toPrometheusName(String metricRecordName, String metricName) { */ @RestrictedApi(explanation = "Should only be called in tests or self", link = "", allowedOnPath = ".*/src/test/.*|.*/PrometheusHadoopServlet\\.java") - void writeMetrics(Writer writer) throws IOException { + void writeMetrics(Writer writer, boolean desc) throws IOException { Collection metricRecords = MetricsExportHelper.export(); for (MetricsRecord metricsRecord : metricRecords) { for (AbstractMetric metrics : metricsRecord.metrics()) { if (metrics.type() == MetricType.COUNTER || metrics.type() == MetricType.GAUGE) { String key = toPrometheusName(metricsRecord.name(), metrics.name()); + + if (desc) { + String description = metrics.description(); + if (!description.isEmpty()) writer.append("# HELP ").append(description).append('\n'); + } + writer.append("# TYPE ").append(key).append(" ") - .append(metrics.type().toString().toLowerCase()).append("\n").append(key).append("{"); + .append(metrics.type().toString().toLowerCase()).append('\n').append(key).append("{"); /* add tags */ String sep = ""; diff --git a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java index fcfde82ad41c..0ca021bc12bb 100644 --- a/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java +++ b/hbase-http/src/test/java/org/apache/hadoop/hbase/http/prometheus/TestPrometheusServlet.java @@ -60,7 +60,8 @@ public void testPublish() throws IOException { // WHEN PrometheusHadoopServlet prom2Servlet = new PrometheusHadoopServlet(); - prom2Servlet.writeMetrics(writer); + // Test with no description + prom2Servlet.writeMetrics(writer, false); // THEN String writtenMetrics = stream.toString(UTF_8.name());