From ec90891636512eb7dc44e4c20ca9eb3353e59d4f Mon Sep 17 00:00:00 2001 From: Lucian Petrut Date: Tue, 10 Oct 2023 16:22:27 +0300 Subject: [PATCH] Improve vm_consolidation logging We're adding a few info log messages in order to trace the "vm consolidation" strategy more easily. Change-Id: I8ce1a9dd173733f1b801839d3ad0c1269c4306bb --- .../strategies/vm_workload_consolidation.py | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py b/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py index 2c5f55489..8cd205cf2 100644 --- a/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py +++ b/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py @@ -307,6 +307,8 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy): node_cpu_util += instance_util['cpu'] node_ram_util += instance_util['ram'] node_disk_util += instance_util['disk'] + LOG.debug("instance utilization: %s %s", + instance, instance_util) return dict(cpu=node_cpu_util, ram=node_ram_util, disk=node_disk_util) @@ -388,8 +390,15 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy): instance_utilization = self.get_instance_utilization(instance) metrics = ['cpu', 'ram', 'disk'] for m in metrics: - if (instance_utilization[m] + node_utilization[m] > - node_capacity[m] * cc[m]): + fits = (instance_utilization[m] + node_utilization[m] <= + node_capacity[m] * cc[m]) + LOG.debug( + "Instance fits: %s, metric: %s, instance: %s, " + "node: %s, instance utilization: %s, " + "node utilization: %s, node capacity: %s, cc: %s", + fits, m, instance, node, instance_utilization[m], + node_utilization[m], node_capacity[m], cc[m]) + if not fits: return False return True @@ -424,6 +433,9 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy): for a in actions: self.solution.actions.remove(a) self.number_of_migrations -= 1 + LOG.info("Optimized migrations: %s. " + "Source: %s, destination: %s", actions, + src_name, dst_name) src_node = self.compute_model.get_node_by_name(src_name) dst_node = self.compute_model.get_node_by_name(dst_name) instance = self.compute_model.get_instance_by_uuid( @@ -460,6 +472,8 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy): key=lambda x: self.get_instance_utilization( x)['cpu'] ): + LOG.info("Node %s overloaded, attempting to reduce load.", + node) # skip exclude instance when migrating if instance.watcher_exclude: LOG.debug("Instance is excluded by scope, " @@ -468,11 +482,19 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy): for destination_node in reversed(sorted_nodes): if self.instance_fits( instance, destination_node, cc): + LOG.info("Offload: found fitting " + "destination (%s) for instance: %s. " + "Planning migration.", + destination_node, instance.uuid) self.add_migration(instance, node, destination_node) break if not self.is_overloaded(node, cc): + LOG.info("Node %s no longer overloaded.", node) break + else: + LOG.info("Node still overloaded (%s), " + "continuing offload phase.", node) def consolidation_phase(self, cc): """Perform consolidation phase. @@ -508,6 +530,10 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy): break if self.instance_fits( instance, destination_node, cc): + LOG.info("Consolidation: found fitting " + "destination (%s) for instance: %s. " + "Planning migration.", + destination_node, instance.uuid) self.add_migration(instance, node, destination_node) break