diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-12-11 14:11:08 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-12-11 14:11:08 +0100 |
commit | 78c2202723f437437f27731dd4d5366d14c01d86 (patch) | |
tree | a1cb0564a588cc96fb76a46a2ce6d391b6829a3c /node-repository | |
parent | ef0656780a6e86269bb183bb7070a16900e6e09d (diff) |
Emit metric counting autoscale events
Diffstat (limited to 'node-repository')
4 files changed, 13 insertions, 4 deletions
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(); } |