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
This commit is contained in:
Lucian Petrut 2023-10-10 16:22:27 +03:00
parent 922478fbda
commit ec90891636
1 changed files with 28 additions and 2 deletions

View File

@ -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