Co-authored-by: 迟成 <chicheng@meituan.com>
This commit is contained in:
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user