Azure Costs: The Black Box That Gets More Expensive Every Month
Why no resource group should ever exist without budget control — and how to fix that.
At the MVP Summit in Redmond you don’t sit in sessions all day.
You sit with people who live inside Azure — architects, MVPs, engineers. And at some point the conversation turns to costs.
What got me: it was not one customer story. It was many. Experts from completely different industries, different countries, different company sizes — all describing the exact same pattern. Customers running Azure in production, sometimes for years. And every single month they open the bill and get surprised.
No budgets. No alerts. No structure. Resources running because someone created them once and nobody looked again.
That is not an Azure problem. That is a discipline problem. But Azure makes it very easy to ignore — until the invoice makes it impossible.
Azure Cost Management + Billing
Azure Cost Management + Billing is Microsoft’s built-in tool for cost analysis and control. It is free to use, available directly in the portal, and used by a surprisingly small number of environments in any meaningful way.
The relevant levers:
- Budgets: Cost limits at subscription or resource group level
- Alerts: Notifications when defined thresholds are hit (80%, 100%)
- Cost Analysis: Breakdown by service, resource group, tag, time period
- Tags: Mandatory for clean cost attribution
- Azure Policy: Enforces tagging and can block resource creation without tags
Setting Up a Budget — Here Is How
Why Resource Groups — and Not Just the Subscription?
A budget at subscription level is better than nothing. But it is like having one circuit breaker for the whole building. You know too much power is flowing somewhere — but not where.
rg-project-x-monthly · Based on last 3 months average plus 15% buffer.Via Azure CLI
Azure CLIaz consumption budget create \
--budget-name "rg-project-x-monthly" \
--amount 500 \
--time-grain Monthly \
--resource-group rg-project-x \
--notifications enabled=true \
operator=GreaterThan \
threshold=80 \
contact-emails="team@example.com"
Exact CLI syntax can vary depending on your az version — check the official docs if something looks off.
Three Things That Catch People Off Guard
An exceeded budget does not shut anything down. It informs — the consequence has to come from a human.
Without a connected Action Group an alert is just a silent entry in the portal.
Old resources created before you introduced budgets keep running quietly. Open Cost Analysis and filter for resources without tags.
Azure Cost Control — Minimum Viable Setup
- Every resource group has a monthly budget
- Alert at 80% (warning) and 100% (escalation) configured
- Forecast alert at 110% active
- Action Group connected with email or Teams webhook
- Minimum tags defined and enforced via Azure Policy
- Cost Analysis reviewed monthly — top 5 cost drivers known
- Old resources checked for tags and actual usage
A budget without an alert is like a speedometer with no display — you are still driving, but you only notice at the gas station that you went too fast.
Open Azure Cost Management right now and count how many of your resource groups have no active budget. The number will surprise you.
Open Azure Cost Management →