Azure Cost Management Basics: Stop Cloud Bills Surprising Your Team
Azure cost management is a monthly habit, not a one-off clean-up. Put a budget with actual and forecast alerts on every subscription, tag resources so each charge has an owner, turn on anomaly alerts, deallocate or right-size idle machines, and only then buy reservations or savings plans. Remember that a budget warns people: it never switches anything off by itself.
At a glance
- Budgets alert on actual and forecast cost at subscription or resource group level. They do not stop spending.
- Anomaly alerts flag unusual daily spikes or drops on a subscription, roughly a day and a half after the day ends.
- Tags give every charge an owner and an environment. They are not applied to past costs.
- Azure Advisor finds idle and oversized machines. Its savings figures use retail prices, so treat them as estimates.
- Reservations and savings plans cut rates for steady workloads. Clean up first, commit second.
- A short monthly review keeps the whole thing honest.
Why Azure bills surprise teams
Three things catch most teams out.
The data lags. Microsoft says cost and usage data is typically available within 8 to 24 hours, and budgets are evaluated against it every 24 hours. A large resource created on Friday afternoon may not trigger an alert until the next day or later.
Nothing stops by default. Pay-as-you-go subscriptions have no spending limit. The Azure spending limit exists only on credit-based offers such as the free account and Visual Studio subscriptions. A budget sends emails; it does not stop resources unless you build automation behind it.
Currency moves. If you are billed in pounds under a Microsoft Customer Agreement, a budget at billing account scope is evaluated in US dollars, while billing profile and invoice section budgets use your billing currency. Savings plans for these customers are priced in US dollars and billed in local currency at that month's exchange rate, so the sterling amount can change from month to month. If you want thresholds in pounds, avoid the billing account scope.
Step 1: Set budgets that reach a person
Create a budget on every subscription, and on any resource group that a single team owns. In the Azure portal, open the subscription, select Budgets, then Add. A few settings matter:
- Reset period. Monthly is easiest to read. An annual Azure budget is divided evenly across the twelve months of the calendar year, which rarely matches an April to March financial year, so many UK teams keep monthly budgets and track the annual figure in their finance system.
- Thresholds. Each budget needs at least one threshold and one email address, and can hold up to five of each. A sensible pattern is actual cost alerts at 50%, 80% and 100%, plus a forecast alert at 100%, so you hear about an overrun before it happens.
- Recipients. Send alerts to a shared mailbox or team channel as well as the named owner. Add azure-noreply@microsoft.com to your safe senders list so alerts do not land in junk.
- Action groups. At subscription and resource group scope, a budget can call an Azure Monitor action group. That can send push notifications to the Azure mobile app or trigger automation, such as a Logic App that stops development machines. Test it before you rely on it.
Then add two more alert types from Cost alerts in Cost Management:
- Anomaly alerts work at subscription scope only. Azure compares each day's usage with a forecast built from the previous 60 days and runs detection about 36 hours after the day ends (UTC). You can create up to five anomaly alert rules per subscription, so add colleagues as recipients rather than creating duplicates.
- Scheduled alerts email a saved cost analysis view daily, weekly or monthly, with a chart and an optional CSV. Recipients do not need Azure access to read them, which makes this the easiest way to keep finance colleagues informed.
Step 2: Tag so every pound has an owner
Untagged spend is the cost nobody can explain. Agree a short tag set, enforce it, and report against it.
| Tag | Example value | Why it helps |
|---|---|---|
| owner | payroll-team | Someone to ask |
| costCentre | CC-4100 | Matches finance codes |
| environment | dev, test or prod | Shows what can be shut down |
| application | payroll-api | Groups related resources |
Four rules from Microsoft's documentation are worth knowing:
- Tags must be applied to the resource itself. They are not inherited from the resource group by default, and they are never added to past usage.
- Some resource types do not support tags, or do not include them in usage data.
- Azure Policy can require or append tags when resources are created, which is far easier than chasing people afterwards.
- If your billing account is an Enterprise Agreement or Microsoft Customer Agreement, turn on tag inheritance in Cost Management. It copies subscription and resource group tags onto child resource usage records for the current month. The tags are applied to cost data only, not to the resources.
Tags are stored as plain text and appear in reports and exports, so never put personal data or secrets in them.
Step 3: Cut waste before you commit
Deallocate, do not just shut down
A virtual machine shut down from inside Windows or Linux shows as Stopped. Azure still reserves its compute, so you keep paying for it. Only Stopped (deallocated), done from the portal, CLI or PowerShell, ends compute charges. Disks and static public IP addresses are billed either way.
This Azure Resource Graph query lists machines that are stopped but still allocated:
resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend powerState = tostring(properties.extended.instanceView.powerState.code)
| where powerState =~ 'PowerState/stopped'
| project name, resourceGroup, location, subscriptionId
And this one finds managed disks that are not attached to anything:
resources
| where type =~ 'microsoft.compute/disks'
| where tostring(properties.diskState) =~ 'Unattached'
| project name, resourceGroup, sku = tostring(sku.name), sizeGb = toint(properties.diskSizeGB)
Take a snapshot before deleting a disk if there is any doubt, because deletion cannot be undone.
Schedule development and test shutdown
Every virtual machine has an Auto-shutdown setting under Operations. The time zone defaults to UTC, so choose the London time zone instead; otherwise a 19:00 shutdown runs at 20:00 local time all summer. You can send an email or webhook warning before shutdown so anyone working late can postpone it. Larger estates usually move to automated start and stop schedules.
If your developers hold Visual Studio subscriptions, the Azure Dev/Test offer gives discounted rates on services such as virtual machines, Azure SQL Database and App Service for non-production work. Keep production out of those subscriptions.
Work through Advisor, sceptically
Azure Advisor flags underused virtual machines and scale sets from their CPU, memory and network activity over a lookback period. The default is seven days, and you can extend it per subscription to as long as 90 days, which matters for workloads that peak at month end, such as payroll.
Two cautions come from Microsoft's own documentation: Advisor's savings are calculated at retail rates, and they ignore reservations and savings plans you already hold. Use them to rank where to look, not as a forecast of what you will save.
Step 4: Commit only after the clean-up
Reservations and savings plans both trade a one-year or three-year commitment for lower rates. They differ in flexibility.
| Reservation | Savings plan | |
|---|---|---|
| You commit to | A resource type and region | A fixed hourly spend |
| Discount applies to | Matching usage only | Eligible services in any region |
| Best for | Stable, unchanging workloads | Workloads that change size or region |
| Can you cancel? | Yes, within a yearly limit | No, purchases are final |
There are two savings plans: one for compute (virtual machines, App Service, Functions premium, Container Apps and more) and one for databases (Azure SQL, PostgreSQL, MySQL, Cosmos DB and others). Where both could apply, Azure uses the reservation first, because it usually carries the deeper discount. As of October 2026, reservation cancellations are capped at USD 50,000 of commitment in a rolling 12-month window.
Microsoft recommends this order: right-size first, exchange underused reservations, trade in reservations you no longer need for a savings plan, buy reservations for stable workloads, and add savings plans last. After any purchase, wait at least seven days before buying the other type so the recommendations can catch up.
One date to plan around: from 1 February 2027, reservations bought for services that savings plans cover, such as virtual machines, App Service and Azure SQL Database, can no longer be exchanged. Reservations bought before that date keep one final exchange, and automatic renewals after it count as new purchases. Trading a reservation in for a savings plan remains available. If a reservation purchase is on your list, decide with that rule in mind.
A monthly cost review in six steps
Put a short meeting in the diary just after month end, with the platform owner and someone from finance.
- Budgets. For each subscription, compare actual and forecast cost with the budget. If a budget fires every month for a known reason, adjust it and record why.
- Anomalies. Open the Cost analysis smart views and go through any anomaly insights with the engineers who own those resource groups.
- Untagged cost. Group cost by your owner tag. Anything untagged gets an owner before the next review.
- Advisor. Action, postpone or dismiss each cost recommendation, and note the reason.
- Commitments. Check reservation and savings plan utilisation. Low utilisation usually means something was resized, moved or deleted.
- Waste sweep. Run the two queries above and remove resources past their planned end date.
Keep the outcome to a few lines in a shared log. After a few months, that log is exactly the evidence finance wants when next year's cloud budget is set.
How CertTulen Academy can help
CertTulen Academy is a Microsoft Training Services Partner running live, MCT-led online classes with hands-on labs. If you run Azure day to day, the AZ-104 Azure Administrator course covers budgets, alerts, tags, Azure Policy and Advisor recommendations, all listed in the exam's skills measured. For finance or project colleagues who need the vocabulary first, AZ-900 Azure Fundamentals explains pricing and cost management in one day. Teams can book a private cohort, or contact us for a batch that suits your time zone.
Frequently Asked Questions
Does an Azure budget stop my resources when it is reached?+
No. A budget only sends notifications when actual or forecast cost crosses a threshold. Resources keep running and billing continues. At subscription or resource group scope you can connect the budget to an Azure Monitor action group that triggers automation, such as a Logic App that stops development machines, but you have to build and test that yourself.
How quickly do Azure cost alerts arrive?+
Microsoft says cost and usage data typically lands within 8 to 24 hours, budgets are evaluated every 24 hours, and emails normally go out within an hour of evaluation. Anomaly detection runs about 36 hours after the end of each day in UTC. Expect a lag of a day or more, which is why forecast alerts are worth adding.
Should we buy an Azure reservation or a savings plan?+
Buy a reservation for a workload that will run continuously on the same resource type in the same region, because it usually gives the deeper discount. Choose a savings plan when sizes, services or regions are likely to change. In both cases, right-size and remove idle resources first, since a discount on waste is still waste.
Why does a new tag not appear in Azure cost analysis?+
Check four things. The tag must be on the resource itself, not just its resource group, unless tag inheritance is enabled. It can take up to a day for cost data to refresh. Tags are never applied to usage from before they were added. And some resource types do not support tags or do not include them in usage data.
Can finance colleagues see Azure costs without portal access?+
Yes. Save a view in Cost analysis, such as cost by resource group for the current month, and subscribe recipients to a scheduled alert. They receive a daily, weekly or monthly email with a chart and optional CSV, and Microsoft states they do not need access to the Azure portal or Cost Management to read it.
Sources
- Tutorial: Create and manage budgets
- Identify anomalies and unexpected changes in cost
- Group and allocate costs using tag inheritance
- FinOps best practices for compute
- Optimize virtual machine (VM) or virtual machine scale set (VMSS) spend by resizing or shutting down underutilized instances
- Decide between a savings plan and a reservation
- Changes to the Azure reservation exchange policy
- What are savings plans?
Checked on 25 October 2026. Exams, products and rules change, so confirm on the official page before you book or decide.
Written by
Microsoft Certified Trainer (MCT), founder of CertTulen Academy
CertTulen Academy · Microsoft Training Services Partner · HRD Corp Accredited

