What it is
A subscription whose regional vCPU quota is nearly consumed. Azure caps how many vCPUs each subscription can run per region and per VM family, and running close to a cap costs nothing and breaks nothing — until the next allocation. Then the deployment, the autoscale event, or the disaster-recovery failover fails with QuotaExceeded, and the fix is a quota increase request you now have to wait on mid-incident.
Why it happens
Quota consumption is a byproduct of normal growth, not a decision anyone makes. AKS node pools scale up, a VM scale set adds instances, a new environment lands in the same subscription and region — each allocation nibbles at a limit almost nobody tracks. Azure enforces both a per-family cap and a regional total, so you can hit a wall on Standard DSv5 Family vCPUs while the regional number still looks comfortable.
There is no built-in alert as usage climbs. The Quotas page in the portal will show you the numbers if you go looking, per subscription and per region, but nothing pushes a warning at 80%. The failure mode is asymmetric: months of silence, then a hard stop at the exact moment you needed capacity — a production scale-out under load, or a DR failover into a paired region where the quota was never provisioned to absorb the primary region's workload. Increase requests are free, but approval can take hours, and large ones can require capacity review.
What it costs / blast radius
There is no direct cost — quota headroom is free, which is exactly why nobody budgets attention for it. The blast radius is operational: a release blocked at deploy time, an autoscale group pinned below the load it was sized for, or the worst case — a DR plan that fails its real test because the target region's subscription could never have allocated the failed-over VMs in the first place. A failover you cannot execute is a recovery plan you don't have. (Azure behavior; authored assessment.)
See it
QuotaResources
| where type =~ 'microsoft.compute/locations/usages'
| mv-expand json = properties.value
| extend currentUsage = toint(json.currentValue),
quotaLimit = toint(json['limit']),
quotaName = tostring(json['name'].localizedValue)
| where quotaLimit > 0 and currentUsage > 0
| extend usagePercent = round(100.0 * currentUsage / quotaLimit, 1)
| where usagePercent >= 75
| project subscriptionId, location, quotaName,
currentUsage, quotaLimit, usagePercent
| order by usagePercent desc# Per-region view of usage vs limit for one subscription
az vm list-usage --location eastus -o table
# Raise the limit ahead of demand (uses the Microsoft.Quota provider;
# requires the 'quota' CLI extension)
az quota update \
--resource-name standardDSv5Family \
--scope /subscriptions/<sub-id>/providers/Microsoft.Compute/locations/eastus \
--limit-object value=200 --resource-type dedicated
# Large increases may need a support request and capacity review --
# which is why this belongs before the incident, not during it.How StratoLens helps
StratoLens monitors vCPU quota utilization per region across every subscription and flags quotas as they climb toward their limits, so the increase request happens on a calm Tuesday instead of mid-failover. It runs continuously inside your own tenant — no one has to remember to open the Quotas page.