summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@yahooinc.com>2023-08-02 09:53:19 +0200
committerGitHub <noreply@github.com>2023-08-02 09:53:19 +0200
commit3eaa086166d3b31019a59541c2f10b10fa4d0b8d (patch)
tree64f9613a3885924e8783458bf01fa35d29bebca8
parent615d4a7c87b973e207bebaf87fc52394e575c6e4 (diff)
parentbd60d39d2a9dde6bf4bec95f50eba81f4c5c6cff (diff)
Merge pull request #27940 from vespa-engine/olaa/infrastructure-metric-sets
Infrastructure metric sets
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/ConsumersConfigGenerator.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java9
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsConsumersTest.java14
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricTest.java1
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java97
-rw-r--r--container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java55
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/AutoscalingMetrics.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java)2
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/DefaultMetrics.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/DefaultMetrics.java)4
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/DefaultVespaMetrics.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/DefaultVespaMetrics.java)21
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/InfrastructureMetricSet.java)11
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/Metric.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java)2
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java)2
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/NetworkMetrics.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/NetworkMetrics.java)5
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/SystemMetrics.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/SystemMetrics.java)18
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/VespaMetricSet.java (renamed from config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java)4
22 files changed, 215 insertions, 80 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
index 62cbf61b336..f8837a4530a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin;
+import ai.vespa.metrics.set.MetricSet;
import com.yahoo.cloud.config.SlobroksConfig;
import com.yahoo.cloud.config.ZookeepersConfig;
import com.yahoo.cloud.config.log.LogdConfig;
@@ -20,7 +21,6 @@ import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainer;
import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainerCluster;
import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer;
import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster;
-import com.yahoo.vespa.model.admin.monitoring.MetricSet;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
@@ -31,7 +31,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import static com.yahoo.vespa.model.admin.monitoring.MetricSet.empty;
+import static ai.vespa.metrics.set.MetricSet.empty;
+
/**
* This is the admin pseudo-plugin of the Vespa model, responsible for
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/ConsumersConfigGenerator.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/ConsumersConfigGenerator.java
index 97a6f27b759..ea3d5e55b07 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/ConsumersConfigGenerator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/ConsumersConfigGenerator.java
@@ -2,17 +2,16 @@
package com.yahoo.vespa.model.admin.metricsproxy;
+import ai.vespa.metrics.set.Metric;
+import ai.vespa.metrics.set.MetricSet;
import ai.vespa.metricsproxy.core.ConsumersConfig.Consumer;
import com.yahoo.config.provision.SystemName;
-import com.yahoo.vespa.model.admin.monitoring.Metric;
-import com.yahoo.vespa.model.admin.monitoring.MetricSet;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
/**
* Helper class to generate config for metrics consumers.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
index 58e624960f9..df6fee1deb7 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.model.admin.metricsproxy;
+import ai.vespa.metrics.set.MetricSet;
import ai.vespa.metricsproxy.core.ConsumersConfig;
import ai.vespa.metricsproxy.core.MetricsConsumers;
import ai.vespa.metricsproxy.core.MetricsManager;
@@ -27,7 +28,6 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.ThreadedHttpRequestHandler;
import com.yahoo.osgi.provider.model.ComponentModel;
import com.yahoo.vespa.model.admin.Admin;
-import com.yahoo.vespa.model.admin.monitoring.MetricSet;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.container.ContainerCluster;
@@ -45,6 +45,7 @@ import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static ai.vespa.metrics.set.MetricSet.empty;
import static com.yahoo.vespa.model.admin.metricsproxy.ConsumersConfigGenerator.addMetrics;
import static com.yahoo.vespa.model.admin.metricsproxy.ConsumersConfigGenerator.generateConsumers;
import static com.yahoo.vespa.model.admin.metricsproxy.ConsumersConfigGenerator.toConsumerBuilder;
@@ -53,7 +54,6 @@ import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerClus
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster.AppDimensionNames.LEGACY_APPLICATION;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster.AppDimensionNames.SYSTEM;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster.AppDimensionNames.TENANT;
-import static com.yahoo.vespa.model.admin.monitoring.MetricSet.empty;
/**
* Container cluster for metrics proxy containers.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java
index c6bd4c6e295..e18156876cd 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricsConsumer.java
@@ -1,21 +1,21 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import ai.vespa.metrics.set.Metric;
+import ai.vespa.metrics.set.MetricSet;
import ai.vespa.metricsproxy.core.VespaMetrics;
import ai.vespa.metricsproxy.http.ValuesFetcher;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import static com.yahoo.vespa.model.admin.monitoring.AutoscalingMetrics.autoscalingMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultMetrics.defaultMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.NetworkMetrics.networkMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.SystemMetrics.systemMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.VespaMetricSet.vespaMetricSet;
-import static java.util.Collections.unmodifiableList;
+import static ai.vespa.metrics.set.AutoscalingMetrics.autoscalingMetricSet;
+import static ai.vespa.metrics.set.DefaultMetrics.defaultMetricSet;
+import static ai.vespa.metrics.set.NetworkMetrics.networkMetricSet;
+import static ai.vespa.metrics.set.SystemMetrics.systemMetricSet;
+import static ai.vespa.metrics.set.VespaMetricSet.vespaMetricSet;
/**
* A metric consumer is a set of metrics given an id that can be requested at runtime.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java
index d0a5b1bbe43..3af2b4f8732 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/PredefinedMetricSets.java
@@ -1,19 +1,19 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring.builder;
-import com.yahoo.vespa.model.admin.monitoring.MetricSet;
+import ai.vespa.metrics.set.MetricSet;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
-import static com.yahoo.vespa.model.admin.monitoring.AutoscalingMetrics.autoscalingMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultMetrics.defaultMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.NetworkMetrics.networkMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.SystemMetrics.systemMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultVespaMetrics.defaultVespaMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.VespaMetricSet.vespaMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.InfrastructureMetricSet.infrastructureMetricSet;
+import static ai.vespa.metrics.set.AutoscalingMetrics.autoscalingMetricSet;
+import static ai.vespa.metrics.set.DefaultMetrics.defaultMetricSet;
+import static ai.vespa.metrics.set.DefaultVespaMetrics.defaultVespaMetricSet;
+import static ai.vespa.metrics.set.InfrastructureMetricSet.infrastructureMetricSet;
+import static ai.vespa.metrics.set.NetworkMetrics.networkMetricSet;
+import static ai.vespa.metrics.set.SystemMetrics.systemMetricSet;
+import static ai.vespa.metrics.set.VespaMetricSet.vespaMetricSet;
/**
* A data object for predefined metric sets.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java
index f75b2a864f9..a00fe47eb21 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/builder/xml/MetricsBuilder.java
@@ -1,10 +1,10 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring.builder.xml;
+import ai.vespa.metrics.set.Metric;
+import ai.vespa.metrics.set.MetricSet;
import com.yahoo.config.model.ConfigModelContext.ApplicationType;
import com.yahoo.text.XML;
-import com.yahoo.vespa.model.admin.monitoring.Metric;
-import com.yahoo.vespa.model.admin.monitoring.MetricSet;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
import org.w3c.dom.Element;
@@ -14,8 +14,9 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultVespaMetrics.defaultVespaMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.SystemMetrics.systemMetricSet;
+import static ai.vespa.metrics.set.DefaultVespaMetrics.defaultVespaMetricSet;
+import static ai.vespa.metrics.set.SystemMetrics.systemMetricSet;
+
/**
* @author gjoranv
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
index b809f25ced2..383027438fc 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin;
+import ai.vespa.metrics.set.Metric;
import com.yahoo.cloud.config.LogforwarderConfig;
import com.yahoo.cloud.config.SentinelConfig;
import com.yahoo.config.application.api.ApplicationPackage;
@@ -15,7 +16,6 @@ import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.model.VespaModel;
-import com.yahoo.vespa.model.admin.monitoring.Metric;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import org.junit.jupiter.api.Test;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsConsumersTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsConsumersTest.java
index 0a1791b3766..d5ce26bafe8 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsConsumersTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsConsumersTest.java
@@ -1,13 +1,18 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.metricsproxy;
+import ai.vespa.metrics.set.Metric;
+import ai.vespa.metrics.set.MetricSet;
import ai.vespa.metricsproxy.core.ConsumersConfig;
import com.yahoo.vespa.model.VespaModel;
-import com.yahoo.vespa.model.admin.monitoring.Metric;
-import com.yahoo.vespa.model.admin.monitoring.MetricSet;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import org.junit.jupiter.api.Test;
+import static ai.vespa.metrics.set.DefaultMetrics.defaultMetricSet;
+import static ai.vespa.metrics.set.DefaultVespaMetrics.defaultVespaMetricSet;
+import static ai.vespa.metrics.set.NetworkMetrics.networkMetricSet;
+import static ai.vespa.metrics.set.SystemMetrics.systemMetricSet;
+import static ai.vespa.metrics.set.VespaMetricSet.vespaMetricSet;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.TestMode.hosted;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.TestMode.self_hosted;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.checkMetric;
@@ -16,11 +21,6 @@ import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.c
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getCustomConsumer;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.getModel;
import static com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyModelTester.servicesWithAdminOnly;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultMetrics.defaultMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultVespaMetrics.defaultVespaMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.NetworkMetrics.networkMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.SystemMetrics.systemMetricSet;
-import static com.yahoo.vespa.model.admin.monitoring.VespaMetricSet.vespaMetricSet;
import static java.util.Collections.singleton;
import static org.junit.jupiter.api.Assertions.*;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java
index 2c9293473ed..fe5b6950d45 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyModelTester.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.model.admin.metricsproxy;
+import ai.vespa.metrics.set.Metric;
import ai.vespa.metricsproxy.core.ConsumersConfig;
import ai.vespa.metricsproxy.http.application.MetricsNodesConfig;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig;
@@ -11,7 +12,6 @@ import ai.vespa.metricsproxy.service.VespaServicesConfig;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.search.config.QrStartConfig;
import com.yahoo.vespa.model.VespaModel;
-import com.yahoo.vespa.model.admin.monitoring.Metric;
import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.test.VespaModelTester;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java
index 7eec4450f33..8235f45aaec 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java
@@ -1,6 +1,8 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import ai.vespa.metrics.set.Metric;
+import ai.vespa.metrics.set.MetricSet;
import com.google.common.collect.Sets;
import org.junit.jupiter.api.Test;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricTest.java
index e87bb90c36b..f07b8c59322 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricTest.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import ai.vespa.metrics.set.Metric;
import com.google.common.collect.ImmutableMap;
import org.junit.jupiter.api.Test;
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java
index e06c7c8aa32..c60389fc55e 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.container.jdisc.state;
+import ai.vespa.metrics.set.InfrastructureMetricSet;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -22,11 +23,15 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import static com.yahoo.container.jdisc.state.JsonUtil.sanitizeDouble;
import static com.yahoo.container.jdisc.state.StateHandler.getSnapshotProviderOrThrow;
@@ -60,6 +65,7 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
private final SnapshotProvider snapshotProvider;
private final String applicationName;
private final String hostDimension;
+ private final Map<String, Set<String>> metricSets;
@Inject
public MetricsPacketsHandler(Timer timer,
@@ -69,6 +75,7 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
snapshotProvider = getSnapshotProviderOrThrow(snapshotProviders);
applicationName = config.application();
hostDimension = config.hostname();
+ metricSets = getMetricSets();
}
@@ -93,14 +100,19 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
private byte[] buildMetricOutput(String query) {
try {
- if (query != null && query.equals("array-formatted")) {
- return getMetricsArray();
+ var queryMap = parseQuery(query);
+ var metricSetId = queryMap.get("metric-set");
+ var format = queryMap.get("format");
+
+ // TODO: Remove "array-formatted"
+ if ("array".equals(format) || queryMap.containsKey("array-formatted")) {
+ return getMetricsArray(metricSetId);
}
- if ("format=prometheus".equals(query)) {
+ if ("prometheus".equals(format)) {
return buildPrometheusOutput();
}
- String output = getAllMetricsPackets() + "\n";
+ String output = getAllMetricsPackets(metricSetId) + "\n";
return output.getBytes(StandardCharsets.UTF_8);
} catch (JsonProcessingException e) {
throw new RuntimeException("Bad JSON construction.", e);
@@ -109,10 +121,10 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
}
}
- private byte[] getMetricsArray() throws JsonProcessingException {
+ private byte[] getMetricsArray(String metricSetId) throws JsonProcessingException {
ObjectNode root = jsonMapper.createObjectNode();
ArrayNode jsonArray = jsonMapper.createArrayNode();
- getPacketsForSnapshot(getSnapshot(), applicationName, timer.currentTimeMillis())
+ getPacketsForSnapshot(getSnapshot(), metricSetId, applicationName, timer.currentTimeMillis())
.forEach(jsonArray::add);
MetricGatherer.getAdditionalMetrics().forEach(jsonArray::add);
root.set("metrics", jsonArray);
@@ -132,9 +144,9 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
.writeValueAsString(jsonObject);
}
- private String getAllMetricsPackets() throws JsonProcessingException {
+ private String getAllMetricsPackets(String metricSetId) throws JsonProcessingException {
StringBuilder ret = new StringBuilder();
- List<JsonNode> metricsPackets = getPacketsForSnapshot(getSnapshot(), applicationName, timer.currentTimeMillis());
+ List<JsonNode> metricsPackets = getPacketsForSnapshot(getSnapshot(), metricSetId, applicationName, timer.currentTimeMillis());
String delimiter = "";
for (JsonNode packet : metricsPackets) {
ret.append(delimiter); // For legibility and parsing in unit tests
@@ -166,6 +178,29 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
return packets;
}
+ private List<JsonNode> getPacketsForSnapshot(MetricSnapshot metricSnapshot, String metricSetId, String application, long timestamp) {
+ if (metricSnapshot == null) return Collections.emptyList();
+ if (metricSetId == null) return getPacketsForSnapshot(metricSnapshot, application, timestamp);
+ Set<String> configuredMetrics = metricSets.getOrDefault(metricSetId, Collections.emptySet());
+ List<JsonNode> packets = new ArrayList<>();
+
+ for (Map.Entry<MetricDimensions, MetricSet> snapshotEntry : metricSnapshot) {
+ MetricDimensions metricDimensions = snapshotEntry.getKey();
+ MetricSet metricSet = snapshotEntry.getValue();
+
+ ObjectNode packet = jsonMapper.createObjectNode();
+ addMetaData(timestamp, application, packet);
+ addDimensions(metricDimensions, packet);
+ var metrics = getMetrics(metricSet);
+ metrics.keySet().retainAll(configuredMetrics);
+ if (!metrics.isEmpty()) {
+ addMetrics(metrics, packet);
+ packets.add(packet);
+ }
+ }
+ return packets;
+ }
+
private void addMetaData(long timestamp, String application, ObjectNode packet) {
packet.put(APPLICATION_KEY, application);
packet.put(TIMESTAMP_KEY, TimeUnit.MILLISECONDS.toSeconds(timestamp));
@@ -208,6 +243,39 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
}
}
+ private Map<String, Number> getMetrics(MetricSet metricSet) {
+ var metrics = new HashMap<String, Number>();
+ for (Map.Entry<String, MetricValue> metric : metricSet) {
+ String name = metric.getKey();
+ MetricValue value = metric.getValue();
+ if (value instanceof CountMetric) {
+ metrics.put(name + ".count", ((CountMetric) value).getCount());
+ } else if (value instanceof GaugeMetric) {
+ GaugeMetric gauge = (GaugeMetric) value;
+ metrics.put(name + ".average", sanitizeDouble(gauge.getAverage()));
+ metrics.put(name + ".last", sanitizeDouble(gauge.getLast()));
+ metrics.put(name + ".max", sanitizeDouble(gauge.getMax()));
+ if (gauge.getPercentiles().isPresent()) {
+ for (Tuple2<String, Double> prefixAndValue : gauge.getPercentiles().get()) {
+ metrics.put(name + "." + prefixAndValue.first + "percentile", prefixAndValue.second.doubleValue());
+ }
+ }
+ } else {
+ throw new UnsupportedOperationException("Unknown metric class: " + value.getClass().getName());
+ }
+ }
+ return metrics;
+ }
+
+ private void addMetrics(Map<String, Number> metrics, ObjectNode packet) {
+ ObjectNode metricsObject = jsonMapper.createObjectNode();
+ packet.set(METRICS_KEY, metricsObject);
+ metrics.forEach((name, value) -> {
+ if (value instanceof Double) metricsObject.put(name, (Double) value);
+ else metricsObject.put(name, (Long) value);
+ });
+ }
+
private String getContentType(String query) {
if ("format=prometheus".equals(query)) {
return "text/plain;charset=utf-8";
@@ -215,4 +283,17 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
return "application/json";
}
+ private Map<String, String> parseQuery(String query) {
+ if (query == null) return Map.of();
+ return Arrays.stream(query.split("&"))
+ .map(s -> s.split("="))
+ .collect(Collectors.toMap(s -> s[0], s -> s.length < 2 ? "" : s[1]));
+ }
+
+ private Map<String, Set<String>> getMetricSets() {
+ // For now - single infrastructure metric set
+ return Map.of(
+ InfrastructureMetricSet.infrastructureMetricSet.getId(), InfrastructureMetricSet.infrastructureMetricSet.getMetrics().keySet()
+ );
+ }
}
diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java
index 3f5c31e5e7f..38c1072c759 100644
--- a/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java
+++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java
@@ -163,6 +163,61 @@ public class MetricsPacketsHandlerTest extends StateHandlerTestBase {
""";
assertEquals(expectedResponse, response);
}
+
+ @Test
+ public void test_metric_filtering() {
+ var context = StateMetricContext.newInstance(Map.of("dim-1", "value1"));
+ var snapshot = new MetricSnapshot();
+ snapshot.set(context, "gauge.metric", 0.2);
+ snapshot.add(context, "counter.metric", 5);
+ snapshot.add(context, "configserver.requests", 120);
+ // Infrastructure set only contains max and average
+ snapshot.set(context, "lockAttempt.lockedLoad", 500);
+
+ // Without filtering
+ snapshotProvider.setSnapshot(snapshot);
+ var response = requestAsString("http://localhost/metrics-packets");
+ var expectedResponse = """
+ {
+ "application" : "state-handler-test-base",
+ "timestamp" : 0,
+ "dimensions" : {
+ "dim-1" : "value1",
+ "host" : "some-hostname"
+ },
+ "metrics" : {
+ "gauge.metric.average" : 0.2,
+ "gauge.metric.last" : 0.2,
+ "gauge.metric.max" : 0.2,
+ "configserver.requests.count" : 120,
+ "lockAttempt.lockedLoad.average" : 500.0,
+ "lockAttempt.lockedLoad.last" : 500.0,
+ "lockAttempt.lockedLoad.max" : 500.0,
+ "counter.metric.count" : 5
+ }
+ }
+ """;
+ assertEquals(expectedResponse, response);
+
+ // With filtering
+ response = requestAsString("http://localhost/metrics-packets?metric-set=infrastructure");
+ expectedResponse = """
+ {
+ "application" : "state-handler-test-base",
+ "timestamp" : 0,
+ "dimensions" : {
+ "dim-1" : "value1",
+ "host" : "some-hostname"
+ },
+ "metrics" : {
+ "lockAttempt.lockedLoad.max" : 500.0,
+ "configserver.requests.count" : 120,
+ "lockAttempt.lockedLoad.average" : 500.0
+ }
+ }
+ """;
+ assertEquals(expectedResponse, response);
+ }
private List<JsonNode> incrementTimeAndGetJsonPackets() throws Exception {
advanceToNextSnapshot();
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java b/metrics/src/main/java/ai/vespa/metrics/set/AutoscalingMetrics.java
index 685ca377e70..01793f292cf 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/AutoscalingMetrics.java
@@ -1,5 +1,5 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import ai.vespa.metrics.ContainerMetrics;
import ai.vespa.metrics.HostedNodeAdminMetrics;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/DefaultMetrics.java b/metrics/src/main/java/ai/vespa/metrics/set/DefaultMetrics.java
index 8652acbd546..ffc947828ff 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/DefaultMetrics.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/DefaultMetrics.java
@@ -1,6 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import ai.vespa.metrics.ContainerMetrics;
import ai.vespa.metrics.SearchNodeMetrics;
@@ -18,7 +18,7 @@ import static ai.vespa.metrics.Suffix.max;
import static ai.vespa.metrics.Suffix.ninety_five_percentile;
import static ai.vespa.metrics.Suffix.ninety_nine_percentile;
import static ai.vespa.metrics.Suffix.sum;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultVespaMetrics.defaultVespaMetricSet;
+import static ai.vespa.metrics.set.DefaultVespaMetrics.defaultVespaMetricSet;
/**
* Metrics for the 'default' consumer, which is used by default for the generic metrics api and
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/DefaultVespaMetrics.java b/metrics/src/main/java/ai/vespa/metrics/set/DefaultVespaMetrics.java
index ac03fcf56cb..93b6bfab002 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/DefaultVespaMetrics.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/DefaultVespaMetrics.java
@@ -1,10 +1,10 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import ai.vespa.metrics.ContainerMetrics;
import ai.vespa.metrics.SearchNodeMetrics;
-import com.google.common.collect.ImmutableSet;
+import java.util.LinkedHashSet;
import java.util.Set;
/**
@@ -19,20 +19,11 @@ public class DefaultVespaMetrics {
public static final MetricSet defaultVespaMetricSet = createDefaultVespaMetricSet();
private static MetricSet createDefaultVespaMetricSet() {
+ Set<Metric> metrics = new LinkedHashSet<>();
- Set<Metric> defaultContainerMetrics =
- ImmutableSet.of(new Metric(ContainerMetrics.FEED_OPERATIONS.rate())
- );
+ metrics.add(new Metric(ContainerMetrics.FEED_OPERATIONS.rate()));
+ metrics.add(new Metric(SearchNodeMetrics.CONTENT_PROTON_RESOURCE_USAGE_FEEDING_BLOCKED.last()));
- Set<Metric> defaultContentMetrics =
- ImmutableSet.of(new Metric(SearchNodeMetrics.CONTENT_PROTON_RESOURCE_USAGE_FEEDING_BLOCKED.last())
- );
-
- Set<Metric> defaultMetrics = ImmutableSet.<Metric>builder()
- .addAll(defaultContainerMetrics)
- .addAll(defaultContentMetrics)
- .build();
-
- return new MetricSet("default-vespa", defaultMetrics);
+ return new MetricSet("default-vespa", metrics);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/InfrastructureMetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java
index 92156c959a0..c64be82b937 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/InfrastructureMetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java
@@ -1,7 +1,12 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
-
-import ai.vespa.metrics.*;
+package ai.vespa.metrics.set;
+
+import ai.vespa.metrics.ConfigServerMetrics;
+import ai.vespa.metrics.ContainerMetrics;
+import ai.vespa.metrics.ControllerMetrics;
+import ai.vespa.metrics.LogdMetrics;
+import ai.vespa.metrics.Suffix;
+import ai.vespa.metrics.VespaMetrics;
import java.util.Collections;
import java.util.EnumSet;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java b/metrics/src/main/java/ai/vespa/metrics/set/Metric.java
index b2df37c47b2..53ca75b7f30 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/Metric.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/Metric.java
@@ -1,5 +1,5 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import java.util.LinkedHashMap;
import java.util.Map;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java
index fb67100b435..b8409fb7663 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/MetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java
@@ -1,5 +1,5 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import java.util.Collection;
import java.util.LinkedHashMap;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/NetworkMetrics.java b/metrics/src/main/java/ai/vespa/metrics/set/NetworkMetrics.java
index 21e7d35fc7c..f967e2a2c31 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/NetworkMetrics.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/NetworkMetrics.java
@@ -1,8 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import ai.vespa.metrics.HostedNodeAdminMetrics;
-import com.google.common.collect.ImmutableSet;
import java.util.Set;
@@ -17,7 +16,7 @@ public class NetworkMetrics {
private static MetricSet createNetworkMetricSet() {
Set<Metric> dockerNetworkMetrics =
- ImmutableSet.of(new Metric(HostedNodeAdminMetrics.NET_IN_BYTES.baseName()),
+ Set.of(new Metric(HostedNodeAdminMetrics.NET_IN_BYTES.baseName()),
new Metric(HostedNodeAdminMetrics.NET_IN_ERROR.baseName()),
new Metric(HostedNodeAdminMetrics.NET_IN_DROPPED.baseName()),
new Metric(HostedNodeAdminMetrics.NET_OUT_BYTES.baseName()),
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/SystemMetrics.java b/metrics/src/main/java/ai/vespa/metrics/set/SystemMetrics.java
index 64f2a72d1b4..0560daebc43 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/SystemMetrics.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/SystemMetrics.java
@@ -1,9 +1,9 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import ai.vespa.metrics.HostedNodeAdminMetrics;
-import com.google.common.collect.ImmutableSet;
+import java.util.LinkedHashSet;
import java.util.Set;
/**
@@ -17,7 +17,7 @@ public class SystemMetrics {
private static MetricSet createSystemMetricSet() {
Set<Metric> dockerNodeMetrics =
- ImmutableSet.of(new Metric(HostedNodeAdminMetrics.CPU_UTIL.baseName()),
+ Set.of(new Metric(HostedNodeAdminMetrics.CPU_UTIL.baseName()),
new Metric(HostedNodeAdminMetrics.CPU_SYS_UTIL.baseName()),
new Metric(HostedNodeAdminMetrics.CPU_THROTTLED_TIME.baseName()),
new Metric(HostedNodeAdminMetrics.CPU_THROTTLED_CPU_TIME.baseName()),
@@ -37,19 +37,19 @@ public class SystemMetrics {
Set<Metric> nonDockerNodeMetrics =
// Disk metrics should be based on /home, or else '/' - or simply add filesystem as dimension
- ImmutableSet.of(new Metric("cpu.busy.pct", HostedNodeAdminMetrics.CPU_UTIL.baseName()),
+ Set.of(new Metric("cpu.busy.pct", HostedNodeAdminMetrics.CPU_UTIL.baseName()),
new Metric("mem.used.pct", HostedNodeAdminMetrics.MEM_UTIL.baseName()),
new Metric("mem.active.kb", HostedNodeAdminMetrics.MEM_USED.baseName()),
new Metric("mem.total.kb", HostedNodeAdminMetrics.MEM_LIMIT.baseName()),
new Metric("used.kb", HostedNodeAdminMetrics.DISK_USED.baseName())
);
- Set<Metric> systemMetrics = ImmutableSet.<Metric>builder()
- .addAll(dockerNodeMetrics)
- .addAll(nonDockerNodeMetrics)
- .build();
- return new MetricSet("system", systemMetrics);
+ Set<Metric> metrics = new LinkedHashSet<>();
+ metrics.addAll(dockerNodeMetrics);
+ metrics.addAll(nonDockerNodeMetrics);
+
+ return new MetricSet("system", metrics);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/VespaMetricSet.java
index a0d866fb001..82717b5709d 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/VespaMetricSet.java
@@ -1,5 +1,5 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.admin.monitoring;
+package ai.vespa.metrics.set;
import ai.vespa.metrics.ClusterControllerMetrics;
import ai.vespa.metrics.ContainerMetrics;
@@ -28,7 +28,7 @@ import static ai.vespa.metrics.Suffix.ninety_five_percentile;
import static ai.vespa.metrics.Suffix.ninety_nine_percentile;
import static ai.vespa.metrics.Suffix.rate;
import static ai.vespa.metrics.Suffix.sum;
-import static com.yahoo.vespa.model.admin.monitoring.DefaultVespaMetrics.defaultVespaMetricSet;
+import static ai.vespa.metrics.set.DefaultVespaMetrics.defaultVespaMetricSet;
import static java.util.Collections.singleton;
/**