aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-04-17 08:45:19 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2024-04-17 08:45:19 +0200
commit8c9ecd8d0c2bda57d175aa5ccbb81b174f7e340e (patch)
tree49386d03277e5b900d07c5e0b88aed3fc9da17cb
parent53b3149dbf9bbba8527b0cb586f3c151e432d66c (diff)
Check if metric is present before creating sample.
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusModel.java51
1 files changed, 28 insertions, 23 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusModel.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusModel.java
index 8047da728ad..1f55e2f8679 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusModel.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusModel.java
@@ -1,10 +1,13 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.metric.model.prometheus;
+import ai.vespa.metricsproxy.metric.model.DimensionId;
import ai.vespa.metricsproxy.metric.model.MetricId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.metric.model.ServiceId;
import io.prometheus.client.Collector;
+import io.prometheus.client.Collector.MetricFamilySamples;
+import io.prometheus.client.Collector.MetricFamilySamples.Sample;
import io.prometheus.client.exporter.common.TextFormat;
import java.io.StringWriter;
@@ -19,13 +22,15 @@ import java.util.Set;
* @author yj-jtakagi
* @author gjoranv
*/
-public class PrometheusModel implements Enumeration<Collector.MetricFamilySamples> {
+public class PrometheusModel implements Enumeration<MetricFamilySamples> {
private final Map<ServiceId, List<MetricsPacket>> packetsByServiceId;
private final Iterator<MetricId> metricIterator;
- private final Iterator<Collector.MetricFamilySamples> statusMetrics;
+ private final Iterator<MetricFamilySamples> statusMetrics;
- PrometheusModel(Set<MetricId> metricNames, Map<ServiceId, List<MetricsPacket>> packetsByServiceId,
- List<Collector.MetricFamilySamples> statusMetrics) {
+ PrometheusModel(Set<MetricId> metricNames, Map<ServiceId,
+ List<MetricsPacket>> packetsByServiceId,
+ List<MetricFamilySamples> statusMetrics)
+ {
metricIterator = metricNames.iterator();
this.packetsByServiceId = packetsByServiceId;
this.statusMetrics = statusMetrics.iterator();
@@ -37,7 +42,7 @@ public class PrometheusModel implements Enumeration<Collector.MetricFamilySample
}
@Override
- public Collector.MetricFamilySamples nextElement() {
+ public MetricFamilySamples nextElement() {
return metricIterator.hasNext()
? createMetricFamily(metricIterator.next())
: statusMetrics.next();
@@ -53,31 +58,31 @@ public class PrometheusModel implements Enumeration<Collector.MetricFamilySample
return writer.toString();
}
- private Collector.MetricFamilySamples createMetricFamily(MetricId metricId) {
- List<Collector.MetricFamilySamples.Sample> sampleList = new ArrayList<>();
- var samples = new Collector.MetricFamilySamples(metricId.getIdForPrometheus(), Collector.Type.UNKNOWN, "", sampleList);
+ private MetricFamilySamples createMetricFamily(MetricId metricId) {
+ List<MetricFamilySamples.Sample> sampleList = new ArrayList<>();
packetsByServiceId.forEach(((serviceId, packets) -> {
- var serviceName = serviceId.getIdForPrometheus();
for (var packet : packets) {
- Long timeStamp = packet.timestamp * 1000;
- var dimensions = packet.dimensions();
- List<String> labels = new ArrayList<>(dimensions.size());
- List<String> labelValues = new ArrayList<>(dimensions.size());
- for (var entry : dimensions.entrySet()) {
- var labelName = entry.getKey().getIdForPrometheus();
- labels.add(labelName);
- labelValues.add(entry.getValue());
- }
- labels.add("vespa_service");
- labelValues.add(serviceName);
-
Number metric = packet.metrics().get(metricId);
if (metric != null) {
- sampleList.add(new Collector.MetricFamilySamples.Sample(metricId.getIdForPrometheus(), labels, labelValues, metric.doubleValue(), timeStamp));
+ sampleList.add(createSample(serviceId, metricId, metric, packet.timestamp, packet.dimensions()));
}
}
}));
- return samples;
+ return new MetricFamilySamples(metricId.getIdForPrometheus(), Collector.Type.UNKNOWN, "", sampleList);
+ }
+ private static Sample createSample(ServiceId serviceId, MetricId metricId, Number metric,
+ Long timeStamp, Map<DimensionId, String> dimensions)
+ {
+ List<String> labels = new ArrayList<>(dimensions.size());
+ List<String> labelValues = new ArrayList<>(dimensions.size());
+ for (var entry : dimensions.entrySet()) {
+ var labelName = entry.getKey().getIdForPrometheus();
+ labels.add(labelName);
+ labelValues.add(entry.getValue());
+ }
+ labels.add("vespa_service");
+ labelValues.add(serviceId.getIdForPrometheus());
+ return new Sample(metricId.getIdForPrometheus(), labels, labelValues, metric.doubleValue(), timeStamp);
}
}