An Azure personalized recommendation engine that helps users follow best practices to optimize Azure deployments.
Hi @a2z mc When you create a Virtual Machine in Azure, several additional resources are deployed alongside it. Some of these continue to incur charges even if the VM is stopped, unless the VM is properly Stopped (deallocated) from the Azure portal. Common resources tied to a VM that may be charged include:
- Managed Disks (OS disk + any data disks) — billed even when the VM is deallocated.
- Public IP address (especially Standard SKU / Static) — billed hourly.
- Network Interface (NIC) — typically free, but tied to other billable resources.
- Recovery Services Vault / Backup — charged per protected instance and storage used.
- Snapshots — billed based on size.
- Log Analytics workspace / Diagnostic Storage Account — billed on ingestion and retention.
- Bastion / Load Balancer / NAT Gateway / VPN Gateway (if configured).
Please follow the below process to Identify what is being charged:
- Sign in to the Azure portal.
- Navigate to Cost Management + Billing → Cost analysis.
- Set the timeframe to Last 30 days.
- Group by Resource to see exactly which resources are generating charges.
- Sort by Cost (descending) to identify the top contributors.
Please refer the document for more details https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/quick-acm-cost-analysis.
Stop (deallocate) the VM when not in use:
Simply shutting down the VM from inside the OS does not stop compute charges. You must Stop it from the Azure portal so the status shows Stopped (deallocated).
Please refer the document for more details https://learn.microsoft.com/en-us/azure/virtual-machines/states-billing
Delete unused resources:
Once you confirm a resource is no longer needed, you can delete it from the Azure portal:
- Virtual Machine → Delete from the VM overview page.
- Disks → Identify unattached disks under Disks blade (state = Unattached) and delete them.
- Public IPs → Delete any that aren't associated with a NIC or load balancer.
- Network Interfaces / NSGs → Remove leftover NICs not bound to a VM.
- Recovery Services Vault → Stop backup → Delete backup data → Delete the vault.
- Resource Group → If everything inside is unused, deleting the entire Resource Group removes all child resources in one action.
Please refer the document for more details
- https://learn.microsoft.com/azure/virtual-machines/delete
- https://learn.microsoft.com/en-us/azure/virtual-machines/disks-find-unattached-portal
- https://learn.microsoft.com/en-us/azure/backup/backup-azure-delete-vault?tabs=portal
Prevent future surprises:
- Set up a Budget alert under Cost Management → Budgets to receive an email when spending crosses a threshold.
- Use the https://azure.microsoft.com/en-us/pricing/calculator/ before creating new resources to estimate costs.
Please refer the document for more details https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/tutorial-acm-create-budgets?tabs=psbudget
If you need any further assistance kindly help us to share the following details:
- What resource types do you see on the bill (for example: Compute/VM, Managed Disks, Public IP, Load balancer, Network, Backup, Azure Monitor/Logs, etc.)?
- Are you running this VM 24/7, or only during certain hours?
- What OS and approximate workload (web app, database, just testing, etc.)?
- Do you have any additional disks attached, and do you know their sizes/types?
- Do you currently have Azure Monitor / VM Insights or the Azure Monitor Agent installed?
If you have further questions regarding this answer, feel free to click "Comment". If you find the answer helpful, please click "upvote" and accept it. This helps the community by allowing others with similar queries to easily find the solution.