Azure savings checks
Microsoft Azure opportunities in Cost Savings come from two sources: Azure Advisor's cost recommendations and CloudYali's own rules. Both run once a day.
Azure Advisor
CloudYali reads Advisor recommendations in the Cost category for each connected subscription. Advisor reports no savings amount to CloudYali, so these opportunities show as Unconverted, count under Awaiting conversion, and cannot be marked implemented yet.
CloudYali's rules
CloudYali prices its rules from your own billing data first, for the last complete month, and then from the Azure retail price list. Every rule has its own runbook in the opportunity's details. When neither price is available, the opportunity appears without an amount.
The utilization rules read Azure Monitor metrics, which need the Monitoring Reader role. When the service principal lacks a role a rule needs, CloudYali skips that rule. See Azure permissions.
Unused resources
| Rule | Detects | Monthly savings |
|---|---|---|
| Unattached disk | A managed disk attached to no VM for 15 days or more | Its full cost |
| Unused public IP | A public IP attached to nothing, or a Standard IP on a deallocated VM | Its full cost |
| Idle load balancer | A load balancer whose backend pools are all empty | Its base and rule cost |
| Orphaned network interface | A NIC with no VM and no private endpoint | No amount; NICs are free |
| Empty App Service plan | A plan with no apps | Its full cost |
| Old snapshot | A snapshot older than 90 days | Its full cost |
| Unused ExpressRoute circuit | A circuit that is not provisioned | Its full cost |
| Idle network gateway | A VPN or ExpressRoute gateway with no connection | Its gateway cost |
| Orphaned restore points | A restore point collection whose VM is gone | Its cost from your billing |
| Stale gallery image versions | Superseded image versions older than 180 days | Their cost from your billing |
| Idle VM | A running VM with P95 CPU under 5% over 30 days, or a stopped VM still allocated | Its full cost |
| Unused storage account | Under 1 GiB used and under 1,000 transactions in 30 days | Its full cost |
| Stale recovery points | Backup items whose newest recovery point is over 180 days old | The stale share of the vault's cost |
Rightsizing and pricing
| Rule | Detects | Monthly savings |
|---|---|---|
| Rightsize VM | CPU and memory fit a smaller size at 80% target utilization | The price difference to the smaller size |
| Burstable VM | Average CPU under 20% with occasional spikes | The difference to a B-series size |
| Rightsize App Service plan | CPU P95 under 40% | The difference to one tier down |
| Rightsize disk | A Premium SSD tier above what the disk uses | The difference to the smaller tier |
| Disk IOPS above the VM's limit | A Premium data disk faster than its VM can use | The difference to Standard SSD |
| Premium snapshot | A snapshot on Premium storage | The difference to Standard storage |
| Storage redundancy | A geo-redundant storage account | The geo-replication share of its cost |
| Storage without a lifecycle policy | A Hot-tier account with no lifecycle policy | No amount |
| Hybrid Benefit for Windows | A Windows VM without Azure Hybrid Benefit | The Windows licence share of its price |
| Dev/Test pricing | A Windows VM in a dev or test resource group | The difference to Dev/Test pricing |
| Spot VM candidate | A running non-production VM | The difference to Spot pricing |
| Cosmos DB autoscale | Manual throughput with P95 use under 66% | The difference to autoscale |
| Rightsize SQL database | A vCore database whose CPU fits fewer vCores | The vCore difference |
| SQL serverless | A provisioned database active under 25% of hours | The difference to serverless |
| SQL elastic pool | Three or more databases on a server whose peaks do not overlap | The difference to one pool |
Commitments
| Rule | Detects | Monthly savings |
|---|---|---|
| Reserved instance | Azure's reservation recommendation for your usage | Azure's estimate |
| Savings plan | Azure's savings plan recommendation for your usage | Azure's estimate |