Skip to main content

🛡️ Azure Virtual Machine is underutilized🟢

Stats​

not available

Logic​

Description​

Open File

Description​

Identify Azure Virtual Machines that are potentially underutilized and rightsize (downsize) them to optimize cloud expenditure. When a linked New Relic host is available, this policy also evaluates memory utilization. Otherwise, it falls back to CPU metrics only. A VM is classified as underutilized if, over a 14-day period, its average CPU utilization remains below 40% and its maximum CPU utilization does not exceed 50%, with memory utilization below 40% when New Relic data is available. Persistently underutilized VMs indicate over-provisioning, leading to inefficient resource usage and elevated operational costs.

Rationale​

Detecting and addressing underutilized VMs is a key cost optimization strategy in cloud environments. By rightsizing or decommissioning over-provisioned VMs, you can reduce unnecessary spending, improve overall resource utilization, and reallocate compute capacity to higher-priority workloads.

Impact​

Downsizing actions must be carefully evaluated to avoid negatively impacting performance, particularly for workloads that may experience occasional bursts or are stateful in nature.

... see more

Remediation​

Open File

Remediation​

Considerations​

  1. Virtual machines (VMs) with local temporary disks cannot be resized to VM SKUs that do not support temporary disks, and vice versa.
  2. Resizing from a SCSI-based VM SKU to a remote NVMe-enabled VM SKU is not supported.

Right-Sizing UNderutilized Virtual Machine​

Resizing a VM should be treated as a disruptive operation, particularly for stateful workloads. Ensure proper planning and downtime windows if required.

For VMs leveraging Premium Storage, it is critical to select an s-series SKU to retain support. For instance, use Standard_E4s_v3 instead of Standard_E4_v3 to maintain Premium disk compatibility.

Azure CLI​
resourceGroup={{resource-group-name}}
vmName={{vm-name}}
newSize={{desired-vm-size}}

### Deallocate the VM
az vm deallocate --resource-group $resourceGroup --name $vmName

### Resize the VM
az vm resize --resource-group $resourceGroup --name $vmName --size $newSize

### Start the VM
az vm start --resource-group $resourceGroup --name $vmName
PowerShell​
$resourceGroup = "{{resource-group-name}}"

... [see more](remediation.md)

policy.yaml​

Open File

Linked Framework Sections​

SectionSub SectionsInternal RulesPoliciesFlagsCompliance
💼 Cloudaware Framework → 💼 Resource Right-Sizing20no data
💼 Cloudaware Framework → 💼 Workload Efficiency25no data