diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-17 08:45:19 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-17 08:45:19 +0200 |
commit | 8c9ecd8d0c2bda57d175aa5ccbb81b174f7e340e (patch) | |
tree | 49386d03277e5b900d07c5e0b88aed3fc9da17cb /metrics-proxy | |
parent | 53b3149dbf9bbba8527b0cb586f3c151e432d66c (diff) |
Check if metric is present before creating sample.
Diffstat (limited to 'metrics-proxy')
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusModel.java | 51 |
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); } } |