diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-09-18 13:56:51 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-09-18 13:56:51 +0200 |
commit | 9a4a8a442f3b75a869e21adac4ae17f729e09688 (patch) | |
tree | ddb990bdcc64e23afee276dcd4e96b7627f959da | |
parent | 2480ea2140a14fe91722e9997eeae4d893bce3c8 (diff) |
Add 'autoscaling' metric consumer
4 files changed, 40 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java new file mode 100644 index 00000000000..f6f51ed91fb --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/AutoscalingMetrics.java @@ -0,0 +1,26 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.model.admin.monitoring; + +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Metrics used for autoscaling + * + * @author bratseth + */ +public class AutoscalingMetrics { + + public static final MetricSet autoscalingMetricSet = create(); + + private static MetricSet create() { + return new MetricSet("autoscaling", + metrics("cpu.util", "mem_total.util", "disk.util")); + } + + private static Set<Metric> metrics(String ... names) { + return Arrays.stream(names).map(Metric::new).collect(Collectors.toSet()); + } + +} 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 6731e9b2581..698b01c306a 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 @@ -10,6 +10,7 @@ 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; @@ -19,7 +20,7 @@ import static java.util.Collections.unmodifiableList; /** * A metric consumer is a set of metrics given an id that can be requested at runtime. * - * @author trygve + * @author Trygve Berdal * @author gjoranv */ // TODO: This construct seems redundant when we have metrics sets @@ -30,6 +31,9 @@ public class MetricsConsumer { consumer(VespaMetrics.vespaMetricsConsumerId.id, vespaMetricSet, systemMetricSet, networkMetricSet); public static final MetricsConsumer defaultConsumer = consumer(ValuesFetcher.defaultMetricsConsumerId.id, defaultMetricSet, systemMetricSet); + // Referenced from com.yahoo.vespa.hosted.provision.autoscale.NodeMetricsFetcher + public static final MetricsConsumer autoscaling = + consumer("autoscaling", autoscalingMetricSet); private final String id; private final MetricSet metricSet; 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 fac6e37feec..dd514f1e245 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 @@ -7,6 +7,7 @@ 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; @@ -20,14 +21,17 @@ import static com.yahoo.vespa.model.admin.monitoring.VespaMetricSet.vespaMetricS */ public class PredefinedMetricSets { - public static final Map<String, MetricSet> predefinedMetricSets = toMapById( + private static final Map<String, MetricSet> sets = toMapById( defaultMetricSet, defaultVespaMetricSet, vespaMetricSet, systemMetricSet, - networkMetricSet + networkMetricSet, + autoscalingMetricSet ); + public static Map<String, MetricSet> get() { return sets; } + private static Map<String, MetricSet> toMapById(MetricSet... metricSets) { Map<String, MetricSet> availableMetricSets = new LinkedHashMap<>(); for (MetricSet metricSet : metricSets) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java index d2f06da992c..b643f771d73 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java @@ -18,6 +18,7 @@ import com.yahoo.vespa.model.admin.ModelConfigProvider; import com.yahoo.vespa.model.admin.monitoring.DefaultMonitoring; import com.yahoo.vespa.model.admin.monitoring.Monitoring; import com.yahoo.vespa.model.admin.monitoring.builder.Metrics; +import com.yahoo.vespa.model.admin.monitoring.builder.PredefinedMetricSets; import com.yahoo.vespa.model.admin.monitoring.builder.xml.MetricsBuilder; import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer; import org.w3c.dom.Element; @@ -25,8 +26,6 @@ import org.w3c.dom.Element; import java.util.ArrayList; import java.util.List; -import static com.yahoo.vespa.model.admin.monitoring.builder.PredefinedMetricSets.predefinedMetricSets; - /** * A base class for admin model builders, to support common functionality across versions. * @@ -69,8 +68,8 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu @Override protected Admin doBuild(DeployState deployState, AbstractConfigProducer parent, Element adminElement) { Monitoring monitoring = getMonitoring(XML.getChild(adminElement,"monitoring"), deployState.isHosted()); - Metrics metrics = new MetricsBuilder(applicationType, predefinedMetricSets) - .buildMetrics(XML.getChild(adminElement, "metrics")); + Metrics metrics = new MetricsBuilder(applicationType, PredefinedMetricSets.get()) + .buildMetrics(XML.getChild(adminElement, "metrics")); FileDistributionConfigProducer fileDistributionConfigProducer = getFileDistributionConfigProducer(parent, deployState.isHosted()); Admin admin = new Admin(parent, monitoring, metrics, multitenant, fileDistributionConfigProducer, deployState.isHosted()); |