From 6d08ced9c0bec22d1c9d29aedad2b1f3c44747aa Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Fri, 12 May 2023 17:39:12 +0200 Subject: Add cluster.cost metric --- .../provision/maintenance/MetricsReporter.java | 25 ++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'node-repository/src/main') 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 e6cfe8ca6b5..97427b4baee 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 @@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.collections.Pair; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; @@ -77,7 +78,8 @@ public class MetricsReporter extends NodeRepositoryMaintainer { updateTenantUsageMetrics(nodes); updateRepairTicketMetrics(nodes); updateAllocationMetrics(nodes); - updateExclusiveSwitchMetrics(nodes); + updateClusterMetrics(nodes); + updateClusterMetrics(nodes); return 1.0; } @@ -109,20 +111,31 @@ public class MetricsReporter extends NodeRepositoryMaintainer { }); } - private void updateExclusiveSwitchMetrics(NodeList nodes) { + private void updateClusterMetrics(NodeList nodes) { Map> byCluster = nodes.stream() .filter(node -> node.type() == NodeType.tenant) .filter(node -> node.state() == State.active) .filter(node -> node.allocation().isPresent()) .collect(Collectors.groupingBy(node -> new ClusterId(node.allocation().get().owner(), node.allocation().get().membership().cluster().id()))); byCluster.forEach((clusterId, clusterNodes) -> { - NodeList clusterHosts = nodes.parentsOf(NodeList.copyOf(clusterNodes)); - long nodesOnExclusiveSwitch = NodeList.copyOf(clusterNodes).onExclusiveSwitch(clusterHosts).size(); - double exclusiveSwitchRatio = nodesOnExclusiveSwitch / (double) clusterNodes.size(); - metric.set("nodes.exclusiveSwitchFraction", exclusiveSwitchRatio, getContext(dimensions(clusterId.application(), clusterId.cluster()))); + Metric.Context context = getContext(dimensions(clusterId.application(), clusterId.cluster())); + updateExclusiveSwitchMetrics(clusterNodes, nodes, context); + updateClusterCostMetrics(clusterNodes, context); }); } + private void updateExclusiveSwitchMetrics(List clusterNodes, NodeList allNodes, Metric.Context context) { + NodeList clusterHosts = allNodes.parentsOf(NodeList.copyOf(clusterNodes)); + long nodesOnExclusiveSwitch = NodeList.copyOf(clusterNodes).onExclusiveSwitch(clusterHosts).size(); + double exclusiveSwitchRatio = nodesOnExclusiveSwitch / (double) clusterNodes.size(); + metric.set("nodes.exclusiveSwitchFraction", exclusiveSwitchRatio,context); + } + + private void updateClusterCostMetrics(List clusterNodes, Metric.Context context) { + double cost = clusterNodes.stream().mapToDouble(node -> node.resources().cost()).sum(); + metric.set("cluster.cost", cost, context); + } + private void updateZoneMetrics() { metric.set("zone.working", nodeRepository().nodes().isWorking() ? 1 : 0, null); } -- cgit v1.2.3