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.

The pattern

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.

1
Open resource group → Cost Management → Budgets → + Add
Navigate to your resource group in the Azure Portal and select Cost Management.
2
Give it a name and set the amount
Example: rg-project-x-monthly · Based on last 3 months average plus 15% buffer.
3
Set alert thresholds
80% Warning to team  ·  100% Escalation  ·  110% forecast Early warning
4
Connect an Action Group
Email is enough to start. Teams webhook works great later.

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"
Note

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

Budgets do not stop resources

An exceeded budget does not shut anything down. It informs — the consequence has to come from a human.

Alerts go nowhere without an Action Group

Without a connected Action Group an alert is just a silent entry in the portal.

Grandfathered resources

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
Espresso-Moment

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.

Your turn

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 →
Ferdi Lethen-Oellers
Written by
Ferdi Lethen-Oellers
Microsoft MVP

Senior Modern Workplace Consultant at amexus · Speaker · Author of “Microsoft 365 Administration für Dummies”. I make M365 understandable — no buzzwords, no filler.