[fix](fe-metric) Prometheus read format error #13831 (#13832)

Co-authored-by: 迟成 <chicheng@meituan.com>
This commit is contained in:
ccoffline
2022-11-14 22:07:00 +08:00
committed by GitHub
parent b0ff852d74
commit 37fdd011b4
3 changed files with 44 additions and 9 deletions

View File

@ -57,7 +57,7 @@ public final class MetricRepo {
private static final Logger LOG = LogManager.getLogger(MetricRepo.class);
// METRIC_REGISTER is only used for histogram metrics
private static final MetricRegistry METRIC_REGISTER = new MetricRegistry();
public static final MetricRegistry METRIC_REGISTER = new MetricRegistry();
public static final DorisMetricRegistry DORIS_METRIC_REGISTER = new DorisMetricRegistry();
public static volatile boolean isInit = false;

View File

@ -27,6 +27,7 @@ import com.codahale.metrics.Histogram;
import com.codahale.metrics.Snapshot;
import com.google.common.base.Joiner;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@ -177,18 +178,37 @@ public class PrometheusMetricVisitor extends MetricVisitor {
@Override
public void visitHistogram(StringBuilder sb, String prefix, String name, Histogram histogram) {
final String fullName = prefix + name.replaceAll("\\.", "_");
// part.part.part.k1=v1.k2=v2
List<String> names = new ArrayList<>();
List<String> tags = new ArrayList<>();
for (String part : name.split("\\.")) {
String[] kv = part.split("=");
if (kv.length == 1) {
names.add(kv[0]);
} else if (kv.length == 2) {
tags.add(String.format("%s=\"%s\"", kv[0], kv[1]));
}
}
final String fullName = prefix + String.join("_", names);
final String fullTag = String.join(" ", tags);
sb.append(HELP).append(fullName).append(" ").append("\n");
sb.append(TYPE).append(fullName).append(" ").append("summary\n");
Snapshot snapshot = histogram.getSnapshot();
sb.append(fullName).append("{quantile=\"0.75\"} ").append(snapshot.get75thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.95\"} ").append(snapshot.get95thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.98\"} ").append(snapshot.get98thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.99\"} ").append(snapshot.get99thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.999\"} ").append(snapshot.get999thPercentile()).append("\n");
sb.append(fullName).append("_sum ").append(histogram.getCount() * snapshot.getMean()).append("\n");
sb.append(fullName).append("_count ").append(histogram.getCount()).append("\n");
sb.append(fullName).append("{quantile=\"0.75\" ").append(fullTag).append("} ")
.append(snapshot.get75thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.95\" ").append(fullTag).append("} ")
.append(snapshot.get95thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.98\" ").append(fullTag).append("} ")
.append(snapshot.get98thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.99\" ").append(fullTag).append("} ")
.append(snapshot.get99thPercentile()).append("\n");
sb.append(fullName).append("{quantile=\"0.999\" ").append(fullTag).append("} ")
.append(snapshot.get999thPercentile()).append("\n");
sb.append(fullName).append("_sum {").append(fullTag).append("} ")
.append(histogram.getCount() * snapshot.getMean()).append("\n");
sb.append(fullName).append("_count {").append(fullTag).append("} ")
.append(histogram.getCount()).append("\n");
return;
}

View File

@ -19,11 +19,14 @@ package org.apache.doris.metric;
import org.apache.doris.common.FeConstants;
import com.codahale.metrics.Histogram;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
public class MetricsTest {
@ -53,4 +56,16 @@ public class MetricsTest {
}
}
}
@Test
public void testDBMetrics() {
MetricRepo.DB_HISTO_QUERY_LATENCY.getOrAdd("test_db").update(10L);
StringBuilder sb = new StringBuilder();
MetricVisitor visitor = new PrometheusMetricVisitor();
SortedMap<String, Histogram> histograms = MetricRepo.METRIC_REGISTER.getHistograms();
for (Map.Entry<String, Histogram> entry : histograms.entrySet()) {
visitor.visitHistogram(sb, MetricVisitor.FE_PREFIX, entry.getKey(), entry.getValue());
}
Assert.assertTrue(sb.toString().contains("# TYPE doris_fe_query_latency_ms summary"));
}
}