diff options
5 files changed, 14 insertions, 4 deletions
diff --git a/metrics/src/main/java/ai/vespa/metrics/ConfigServerMetrics.java b/metrics/src/main/java/ai/vespa/metrics/ConfigServerMetrics.java index 0b6b116dfc4..94731945038 100644 --- a/metrics/src/main/java/ai/vespa/metrics/ConfigServerMetrics.java +++ b/metrics/src/main/java/ai/vespa/metrics/ConfigServerMetrics.java @@ -141,6 +141,7 @@ public enum ConfigServerMetrics implements VespaMetrics { THROTTLED_HOST_FAILURES("throttledHostFailures", Unit.HOST, "Number of host failures stopped due to throttling"), THROTTLED_NODE_FAILURES("throttledNodeFailures", Unit.HOST, "Number of node failures stopped due to throttling"), NODE_FAIL_THROTTLING("nodeFailThrottling", Unit.BINARY, "Metric indicating when node failure throttling is active. The value 1 means active, 0 means inactive"), + CLUSTER_AUTOSCALED("clusterAutoscaled", Unit.OPERATION, "Number of times a cluster has been rescaled by the autoscaler"), DEPLOYMENT_PREPARE_MILLIS("deployment.prepareMillis", Unit.MILLISECOND, "Duration of deployment preparations"), DEPLOYMENT_ACTIVATE_MILLIS("deployment.activateMillis", Unit.MILLISECOND, "Duration of deployment activations"), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java index b29bfd9af62..e6d0c339e5a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainer.java @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; +import ai.vespa.metrics.ConfigServerMetrics; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationLockException; import com.yahoo.config.provision.ClusterResources; @@ -156,6 +157,8 @@ public class AutoscalingMaintainer extends NodeRepositoryMaintainer { private void logAutoscaling(ClusterResources from, ClusterResources to, ApplicationId application, NodeList clusterNodes) { log.info("Autoscaling " + application + " " + clusterNodes.clusterSpec() + ":" + "\nfrom " + toString(from) + "\nto " + toString(to)); + metric.add(ConfigServerMetrics.CLUSTER_AUTOSCALED.baseName(), 1, + metric.createContext(MetricsReporter.dimensions(application, clusterNodes.clusterSpec().id()))); } static String toString(ClusterResources r) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java index e5941bedfb8..c203f8a8321 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java @@ -408,7 +408,7 @@ public class MetricsReporter extends NodeRepositoryMaintainer { metric.set(ConfigServerMetrics.NODES_EMPTY_EXCLUSIVE.baseName(), emptyHosts, null); } - static Map<String, String> dimensions(ApplicationId application, ClusterSpec.Id cluster) { + public static Map<String, String> dimensions(ApplicationId application, ClusterSpec.Id cluster) { Map<String, String> dimensions = new HashMap<>(dimensions(application)); dimensions.put("clusterid", cluster.value()); return dimensions; diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java index 9ca667b54e4..5c5cc1be170 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java @@ -1,13 +1,13 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; -import com.yahoo.config.provision.ClusterInfo; -import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; +import com.yahoo.config.provision.ClusterInfo; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.IntRange; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; @@ -150,6 +150,9 @@ public class AutoscalingMaintainerTest { assertEquals(lastMaintenanceTime.toEpochMilli(), tester.deployer().activationTime(app1).get().toEpochMilli()); events = tester.nodeRepository().applications().get(app1).get().cluster(cluster1.id()).get().scalingEvents(); assertEquals(2, events.get(2).generation()); + + // Metric counts number of times the cluster is rescaled + assertEquals(2, tester.metric().sumNumberValues("clusterAutoscaled"), Double.MIN_VALUE); } @Test diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java index cdef45dbb9c..e4a712d3898 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTester.java @@ -37,6 +37,7 @@ public class AutoscalingMaintainerTester { private final ProvisioningTester provisioningTester; private final AutoscalingMaintainer maintainer; private final MockDeployer deployer; + private final TestMetric metric; public AutoscalingMaintainerTester(MockDeployer.ApplicationContext ... appContexts) { this(new Zone(Environment.prod, RegionName.from("us-east3")), appContexts); @@ -46,9 +47,10 @@ public class AutoscalingMaintainerTester { provisioningTester = new ProvisioningTester.Builder().zone(zone).flavorsConfig(flavorsConfig()).build(); provisioningTester.clock().setInstant(Instant.ofEpochMilli(0)); deployer = new MockDeployer(provisioningTester.provisioner(), provisioningTester.clock(), List.of(appContexts)); + metric = new TestMetric(); maintainer = new AutoscalingMaintainer(provisioningTester.nodeRepository(), deployer, - new TestMetric(), + metric, Duration.ofMinutes(1)); provisioningTester.makeReadyNodes(20, "flt", NodeType.host, 8); provisioningTester.activateTenantHosts(); @@ -58,6 +60,7 @@ public class AutoscalingMaintainerTester { public ManualClock clock() { return provisioningTester.clock(); } public MockDeployer deployer() { return deployer; } public AutoscalingMaintainer maintainer() { return maintainer; } + public TestMetric metric() { return metric; } public static ApplicationId makeApplicationId(String name) { return ProvisioningTester.applicationId(name); } public static ClusterSpec containerClusterSpec() { return ProvisioningTester.containerClusterSpec(); } |