Skip to main content

Theoretical Foundation: Manage Costs by Using Alerts, Budgets, and Azure Advisor Recommendations


1. Initial Intuition​

Imagine you are a company's financial manager and receive the electricity bill only once a month, with no tracking during the month. If someone left the air conditioning on unnecessarily for the entire month, you only find out when the bill arrives. At this point, the money has already been spent and there's no way to recover it.

Managing costs in Azure without adequate tools is exactly like this: discovering excessive spending only in the monthly bill, when it's too late to act.

Azure offers three complementary mechanisms to transform this scenario:

Budgets are like the monthly budget: you define how much you can spend and Azure continuously monitors.

Cost alerts are the alarm: when spending approaches or exceeds the budget, you are notified immediately, not at the end of the month.

Azure Advisor is the financial consultant: it analyzes your environment and recommends where you are wasting money and how to optimize.

Together, these three mechanisms form the practice of FinOps in Azure: visibility, control, and real-time cost optimization.


2. Context​

Where cost management fits in Azure governance​

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

Cost management depends on the entire organizational structure we built in previous modules. Well-applied tags allow filtering costs by project. Well-organized Resource Groups show cost per application. Separate subscriptions allow isolated billing per environment. Without this foundation, cost management is compromised.

Why these mechanisms exist​

The public cloud model inverts traditional financial control. In on-premises infrastructure, you buy hardware with fixed and predictable costs. In the cloud, cost is variable and can grow at any time: a developer who mistakenly creates 100 VMs, a processing job that doesn't end, a storage account that accumulates data without control.

Without proactive monitoring, cloud costs can surprise negatively. With budgets, alerts, and Advisor recommendations, you maintain financial control without giving up the agility that the cloud offers.


3. Building the Concepts​

3.1 Azure Cost Management + Billing​

Before understanding budgets and alerts, it's necessary to understand the platform that sustains them: Azure Cost Management + Billing.

This is the central financial visibility tool of Azure. It offers:

  • Cost Analysis: interactive cost visualization by period, grouped by service, resource, tag, RG, subscription, or any dimension
  • Budgets: definition of spending limits with automatic alerts
  • Recommendations: integration with Azure Advisor for optimization suggestions
  • Exports: automatic cost data export to Storage Account
  • Invoices: access to monthly invoices

Cost Management is available for Subscriptions, Resource Groups, and Management Groups. The scope determines which resources are included in the analysis.

3.2 What is a Budget​

A Budget in Azure is a definition of spending limit for a specific scope and period. It doesn't block spending (by default), but continuously monitors and triggers notifications when thresholds are reached.

A Budget has the following components:

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

TimeGrain defines the budget reset period:

TimeGrainPeriodWhen to use
MonthlyMonthly, resets every 1stMonthly operational budgets
QuarterlyQuarterlyFiscal quarter planning
AnnuallyAnnualAnnual budgets approved by board
BillingMonthBilling monthAligned to Microsoft's billing cycle
BillingQuarterBilling quarterFor EA/MCA with fiscal quarter
BillingAnnualBilling yearFor annual contracts

3.3 Types of cost alerts​

Within a Budget, you define Notifications that trigger when thresholds are reached. There are two types of threshold:

TypeWhat it measuresWhen to use
ActualCost already incurred and confirmedAlerts that spending HAS happened
ForecastedCost projection until end of periodPreventive alerts before cost occurs

The distinction is critical for action decisions:

An Actual alert at 100% means you have ALREADY spent the entire budget. The action is reactive.

A Forecasted alert at 100% means that, if the trend continues, you WILL reach 100% before the end of the period. The action is preventive.

Anomaly alerts are a third type, independent of budgets: Cost Management uses machine learning to identify unusual spending patterns and automatically notify without needing a defined threshold.

3.4 Budget Scopes​

Budgets can be created at different scopes in the Azure hierarchy:

ScopeCoversUse case
Management GroupAll subscriptions in the MGTotal corporate budget
SubscriptionAll resources in subscriptionBudget per environment or BU
Resource GroupOnly resources in the RGBudget per project or application

Budgets in MG and Subscription can be filtered by tags, Resource Groups, services, or specific meters, allowing granular budgets even in broad scopes.

3.5 Azure Advisor​

Azure Advisor is an automated consultant that continuously analyzes resources in your Azure environment and generates recommendations in five categories:

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

For cost management purposes, the Cost category is most relevant. Advisor's cost recommendations are based on:

  • 30-day analysis of CPU, memory, network, and disk usage
  • Comparison of actual usage with contracted SKU
  • Analysis of reservations (Reserved Instances) versus pay-as-you-go
  • Identification of orphaned resources (disks, IPs, NICs without use)

3.6 Azure Reservations and Savings Plans (Advisor context)​

Advisor frequently recommends Reservations and Savings Plans, which are discount mechanisms through commitment:

OptionCommitmentTypical discountFlexibility
Pay-As-You-GoNone0%Total
Azure Savings Plan1 or 3 years of compute spendingUp to 65%High (applies to any compute)
Reserved Instances1 or 3 years of specific resource typeUp to 72%Low (specific type and region)
Hybrid BenefitUse of existing Windows/SQL licenseUp to 85% combinedMedium
Spot InstancesNo commitment, can be interruptedUp to 90%Very low (for fault-tolerant workloads)

When Advisor identifies that you consistently use a VM type for more than 30 days, it calculates the savings of buying a Reserved Instance and shows the ROI in months.


4. Structural View​

Complete cost management flow​

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

How Budget and Advisor complement each other​

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

Budget detects that something is wrong. Advisor explains what and recommends how to fix it.


5. Practical Operation​

Budget lifecycle​

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

Non-obvious Budget behaviors​

Budgets DON'T block spending by default. A Budget that reached 100% doesn't automatically stop creating new resources. It only notifies. To automatically block spending, you need to configure an Action Group that triggers an Azure Automation Runbook that applies a Policy or disables resources. This is possible but requires additional configuration.

Cost data has an 8 to 24-hour delay. The cost shown in Cost Management and evaluated by the Budget is not real-time. For resources like VMs and Storage, the typical delay is 8 to 24 hours. For some marketplace services, it can reach 72 hours. This means 100% Actual alerts may trigger after the value has already been exceeded.

Forecasted alerts are more valuable precisely because of this. Since actual data has delays, Forecasted alerts with low thresholds (70-80%) give sufficient margin to act before actual spending is accounted for.

A Budget applies to the defined scope, not the scope where it was created. A Budget created in Subscription A with tag filter Project=ecommerce monitors only resources with that tag, regardless of RG. Filters are powerful for project budgets that cross multiple RGs.

Multiple alerts in the same Budget are independent. You can have up to 5 notification conditions in a Budget: for example, 50% Actual, 80% Actual, 100% Actual, 80% Forecasted, 100% Forecasted. Each triggers independently and to different recipients if desired.

How Advisor generates cost recommendations​

Advisor analyzes 30 days of telemetry data. For VMs, it checks:

  • Average CPU usage: if consistently below 5%, recommends reducing SKU or shutting down
  • Maximum CPU usage: if peak never exceeds 20%, confirms SKU is overprovisioned
  • Inbound network connections: helps confirm if VM is actually in use

A typical Advisor cost recommendation would be:

"VM vm-analytics-01 had average CPU usage of 3% in the last 30 days. Consider reducing from Standard_D4s_v3 (4 vCPUs, $485/month) to Standard_B2s (2 vCPUs, $95/month). Estimated savings: $390/month (80%)."

Advisor doesn't implement recommendations automatically. Every recommendation requires human action or explicitly configured automation.


6. Implementation Methods​

Azure Portal​

When to use: initial configuration, visual cost analysis, reviewing Advisor recommendations

Creating a Budget:

  1. Portal > Cost Management + Billing > Budgets
  2. Select scope (Subscription or RG)
  3. + Add
  4. Define name, amount, period (Monthly/Quarterly/Annual)
  5. Define start and end dates
  6. Optionally: filter by RG, tags, services
  7. Configure alerts (threshold, Actual/Forecasted type, recipients)
  8. Create

Checking Advisor recommendations:

  1. Portal > Azure Advisor
  2. Cost tab for savings recommendations
  3. Click each recommendation to see details and estimated savings
  4. Implement button when available (for some simple actions like VM resizing)
  5. Postpone or Dismiss button to manage non-applicable recommendations

Cost Analysis:

  1. Portal > Cost Management + Billing > Cost analysis
  2. Select period, granularity (daily, monthly)
  3. Group by: Tag, Resource Group, Service, Location
  4. Save as custom View for recurring use

Portal limitation: not reproducible, doesn't scale for configuring budgets across multiple subscriptions simultaneously.


Azure CLI​

# Create Budget in a Subscription
az consumption budget create \
--budget-name "budget-sub-producao-mensal" \
--amount 15000 \
--time-grain Monthly \
--start-date "2026-04-01" \
--end-date "2027-03-31" \
--notifications '{
"alerta_80_actual": {
"enabled": true,
"operator": "GreaterThan",
"threshold": 80,
"threshold_type": "Actual",
"contact_emails": ["cloud-team@empresa.com", "finance@empresa.com"],
"contact_roles": ["Owner", "Contributor"]
},
"alerta_100_actual": {
"enabled": true,
"operator": "GreaterThan",
"threshold": 100,
"threshold_type": "Actual",
"contact_emails": ["cto@empresa.com", "cfo@empresa.com"]
},
"alerta_80_forecast": {
"enabled": true,
"operator": "GreaterThan",
"threshold": 80,
"threshold_type": "Forecasted",
"contact_emails": ["cloud-team@empresa.com"]
}
}'

# Create Budget in a specific Resource Group
az consumption budget create \
--budget-name "budget-ecommerce-mensal" \
--amount 3000 \
--time-grain Monthly \
--start-date "2026-04-01" \
--end-date "2027-03-31" \
--resource-group "rg-ecommerce-prod" \
--notifications '{
"alerta_90": {
"enabled": true,
"operator": "GreaterThan",
"threshold": 90,
"threshold_type": "Actual",
"contact_emails": ["tech-lead@empresa.com"]
}
}'

# List all Budgets in subscription
az consumption budget list --output table

# View details of a Budget
az consumption budget show --budget-name "budget-sub-producao-mensal"

# Delete a Budget
az consumption budget delete --budget-name "budget-sub-producao-mensal"

# View current subscription cost (last 30 days)
az consumption usage list \
--start-date "$(date -d '30 days ago' +%Y-%m-%d)" \
--end-date "$(date +%Y-%m-%d)" \
--query "sort_by([].{
Resource: instanceName,
Service: consumedService,
Cost: pretaxCost,
Currency: currency
}, &Cost) | reverse(@) | [:20]" \
--output table

# View Advisor cost recommendations
az advisor recommendation list \
--category Cost \
--output table

# View Advisor recommendations with estimated savings details
az advisor recommendation list \
--category Cost \
--query "[].{
Recurso: resourceMetadata.resourceId,
Impacto: impact,
Descricao: shortDescription.solution,
Economia: extendedProperties.annualSavingsAmount
}" \
--output table

# Implement a specific Advisor recommendation
az advisor recommendation enable \
--recommendation-id "<recommendation-id>"

# Dismiss a non-applicable recommendation
az advisor recommendation disable \
--recommendation-id "<recommendation-id>" \
--days 30

# Configure automatic cost data export
az costmanagement export create \
--name "export-mensal-sub" \
--type ActualCost \
--scope "subscriptions/<sub-id>" \
--storage-account-id "/subscriptions/<sub-id>/resourceGroups/rg-billing/providers/Microsoft.Storage/storageAccounts/stgbillingexport" \
--storage-container "cost-exports" \
--recurrence Monthly \
--recurrence-period from="2026-04-01" to="2027-03-31"

Azure PowerShell​

# Create Budget via PowerShell
$notifications = @{
"Alert_80_Actual" = New-AzConsumptionBudgetNotification `
-NotificationKey "Alert_80_Actual" `
-Threshold 80 `
-Operator GreaterThan `
-ContactEmail @("cloud-team@empresa.com", "finance@empresa.com") `
-Enabled $true

"Alert_100_Actual" = New-AzConsumptionBudgetNotification `
-NotificationKey "Alert_100_Actual" `
-Threshold 100 `
-Operator GreaterThan `
-ContactEmail @("cto@empresa.com") `
-Enabled $true
}

New-AzConsumptionBudget `
-Name "budget-sub-producao-mensal" `
-Amount 15000 `
-Category Cost `
-TimeGrain Monthly `
-StartDate (Get-Date -Day 1 -Month 4 -Year 2026) `
-EndDate (Get-Date -Day 31 -Month 3 -Year 2027) `
-Notification $notifications

# List Budgets
Get-AzConsumptionBudget |
Select-Object Name, Amount, CurrentSpend, TimeGrain

# View Advisor recommendations
Get-AzAdvisorRecommendation -Category Cost |
Select-Object ResourceId, Impact, ShortDescription, @{N="Savings"; E={$_.ExtendedProperties.annualSavingsAmount}} |
Sort-Object Savings -Descending

# View resource usage for current month
Get-AzConsumptionUsageDetail `
-StartDate (Get-Date -Day 1) `
-EndDate (Get-Date) |
Group-Object ConsumedService |
Select-Object Name, @{N="TotalCost"; E={($_.Group | Measure-Object PretaxCost -Sum).Sum}} |
Sort-Object TotalCost -Descending | Select-Object -First 10

Bicep for Budgets as code​

targetScope = 'subscription'

// Monthly budget for production subscription
resource budgetProd 'Microsoft.Consumption/budgets@2021-10-01' = {
name: 'budget-sub-producao-mensal'
properties: {
category: 'Cost'
amount: 15000
timeGrain: 'Monthly'
timePeriod: {
startDate: '2026-04-01'
endDate: '2027-03-31'
}
notifications: {
Alert_70_Forecast: {
enabled: true
operator: 'GreaterThan'
threshold: 70
thresholdType: 'Forecasted'
contactEmails: ['cloud-team@empresa.com']
contactRoles: ['Owner']
}
Alert_90_Actual: {
enabled: true
operator: 'GreaterThan'
threshold: 90
thresholdType: 'Actual'
contactEmails: ['cloud-team@empresa.com', 'finance@empresa.com']
}
Alert_100_Actual: {
enabled: true
operator: 'GreaterThan'
threshold: 100
thresholdType: 'Actual'
contactEmails: ['cto@empresa.com', 'cfo@empresa.com']
contactRoles: ['Owner']
}
}
}
}

// Budget by Resource Group (different scope)
resource budgetEcommerce 'Microsoft.Consumption/budgets@2021-10-01' = {
name: 'budget-ecommerce-mensal'
properties: {
category: 'Cost'
amount: 3000
timeGrain: 'Monthly'
timePeriod: {
startDate: '2026-04-01'
endDate: '2027-03-31'
}
filter: {
dimensions: {
name: 'ResourceGroupName'
operator: 'In'
values: ['rg-ecommerce-prod']
}
}
notifications: {
Alert_80_Actual: {
enabled: true
operator: 'GreaterThan'
threshold: 80
thresholdType: 'Actual'
contactEmails: ['tech-lead@empresa.com']
}
}
}
}

7. Control and Security​

Who can create and view Budgets​

ActionRequired Role
Create/edit/delete BudgetsContributor or higher at the Budget scope
View Budgets and costsCost Management Reader or Reader
View cost of individual RGsReader on RG
Configure exportsContributor + permission on destination Storage Account
Access Advisor recommendationsReader at the scope
Implement Advisor recommendationsDepends on action: usually Contributor on resource

The Cost Management Reader role is a built-in role that allows viewing all cost data without permission to create or modify resources. It's ideal for finance teams that need visibility without operational access.

Budget alert automation response​

A Budget with alert can be connected to an Action Group that triggers an Azure Automation Runbook for automatic response:

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

This is the only way to make a Budget effectively block spending: through alert response automation.

Cost data security​

Cost data in Cost Management contains sensitive information (how much the company spends on each service, usage patterns, application structure). Control who has access to the Cost Management tab:

  • Development teams should have access to their RG cost, not the entire subscription
  • Finance teams need consolidated subscription or Management Group view
  • Use the Cost Management Reader role for visibility without operational power

8. Decision Making​

Budget threshold configuration​

SituationRecommended thresholdTypeRecipient
Preventive alert for planning70-80%ForecastedCloud team
Operational alert for action90%ActualCloud team + technical leadership
Critical alert for escalation100%ActualCTO, CFO, managers
Immediate anomaly alertAny anomalous spikeAnomaly detectionCloud team

When to act on Advisor recommendations​

Recommendation typeWhen to implementCare
Low usage VM (reduce SKU)After validating no seasonal peakCheck 90 days, not just 30
Recommended Reserved InstanceWhen usage is stable and long-term contract acceptable1-3 year commitment isn't flexible
Disk not associated with VMVerify if intentional backup or real orphanNever delete without confirming owner
Unused public IPCheck if on standby for DRReserved IPs cost even without use
Resource unused for 30 daysConfirm with owner before shutting downMay be standby resource

Budget by scope​

SituationBudget scopeReason
Total company financial controlRoot Management GroupConsolidated view of entire organization
Budget by line of businessManagement Group per BUChargeback by business unit
Budget by environment (prod, dev)SubscriptionSeparate billing per environment
Budget by projectResource Group or tag filterProject granularity within subscription
Budget by teamOwner tag filter in BudgetTeams sharing subscription

9. Best Practices​

Configure Budgets in every new subscription, before creating resources. Every subscription creation process should include, as mandatory step, configuring a Budget with at least three thresholds: 80% Forecasted, 90% Actual, 100% Actual.

Use multiple Budgets with different granularities. One Budget on Subscription for total view and individual Budgets per Resource Group for critical projects. This allows identifying which project is consuming more before the entire subscription is impacted.

Configure Forecasted alerts with lower thresholds than Actual. A Forecasted alert at 70% gives time to act before actual cost reaches 90% or 100%. The asymmetry is intentional: Forecasted is preventive, Actual is reactive.

Review Advisor recommendations weekly. Advisor continuously updates recommendations. A weekly review of Advisor's Cost dashboard, with criteria to implement recommendations above $100/month savings, is a mature FinOps practice.

Don't dismiss Advisor recommendations without documenting reason. Use "Dismiss" function with comment when recommendation doesn't apply. "This VM seems underutilized but is a standby server for DR" is valuable information for future audit.

Combine Budgets with Tags for project budgets. Configure Budgets with Project tag filters to track cost of projects that have resources in multiple RGs. Tag is the only way to group cost of resources scattered across organization.

Export cost data for historical analysis. Cost Management retains data for 13 months. For longer-term analysis, configure automatic monthly exports to Storage Account. This data can be loaded into Power BI for FinOps dashboards.

Validate Advisor savings before accepting blindly. VM recommendations are based on 30 days. If service has seasonality (Black Friday, fiscal year start), 30 days data may not capture peak. Always validate with resource owner team.


10. Common Errors​

ErrorWhy it happensHow to avoid
Believing Budget blocks spendingConfusion with concept; Budget only notifiesConfigure response automation if blocking is necessary
Creating Budget after cost explodedReactivity instead of proactivityCreate Budget as first action when creating subscription
Using only Actual alertsNot knowing Forecasted alertsAlways include at least one Forecasted alert at 70-80%
Ignoring Advisor recommendations for monthsNo review processFixed weekly calendar for Advisor review
Deleting "orphan" disk recommended by Advisor without checkingBlindly trusting recommendationAlways confirm with owner before deleting
Not filtering Budgets by tag for projects crossing RGsNot knowing Budgets support filtersUse tag filters for project budgets
Configuring Budget without Action GroupEmail notifications can be ignoredIntegrate Budget with Action Group and Teams/Slack
Buying Reserved Instance without analyzing trendAccepting Advisor recommendation without questioningCheck usage for 60-90 days and growth/decline trend

The costliest error​

Not configuring any Budget in a new subscription. A developer creates AKS cluster with dozens of nodes for testing and forgets to shut down. A week later, $15,000 was spent without any alert. With a $500/month Budget with alert at 50% Forecasted, the alert would have fired on the first day.


11. Operation and Maintenance​

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

Monitor Budget status​

# View current status of all Budgets with consumed percentage
az consumption budget list \
--query "[].{
Name: name,
Amount: amount,
Spent: currentSpend.amount,
Currency: currentSpend.unit,
Percentage: to_number(currentSpend.amount) / to_number(amount) * 100
}" \
--output table

# Check if any Budget is close to limit
az consumption budget list \
--query "[?to_number(currentSpend.amount) / to_number(amount) > 0.8].{
Name: name,
Amount: amount,
Spent: currentSpend.amount
}" \
--output table

Important limits​

LimitValue
Budgets per subscription50
Budgets per Resource Group50
Notifications per Budget5
Data retention in Cost Management13 months
Cost data delay8-24 hours (up to 72h for some services)
Advisor recommendations (update)Every 24 hours

12. Integration and Automation​

Microsoft Teams integration via Logic App​

100%
Scroll para zoom Β· Arraste para mover Β· πŸ“± Pinch para zoom no celular

Power BI for FinOps dashboard​

Configure automatic export to Storage Account and connect to Power BI for real-time FinOps dashboards:

# Create automatic monthly export to Storage Account
az costmanagement export create \
--name "export-custo-mensal" \
--type ActualCost \
--scope "/subscriptions/<sub-id>" \
--storage-account-id "/subscriptions/<sub-id>/resourceGroups/rg-billing/providers/Microsoft.Storage/storageAccounts/stgbillingexport" \
--storage-container "monthly-exports" \
--storage-directory "$(date +%Y)" \
--recurrence Monthly \
--recurrence-period from="2026-01-01" to="2027-12-31" \
--dataset-granularity Daily

In Power BI, connect to Azure Blob Storage and create visualizations of:

  • Cost by Project tag over time
  • Top 10 resources by cost in the month
  • Budgeted vs. actual comparison by department
  • Month-over-month cost growth trend

Budget response automation via Runbook​

# Runbook: Shut down dev VMs when Budget reaches 100%
param (
[string]$subscriptionId,
[string]$budgetName
)

Connect-AzAccount -Identity

# Shut down VMs with AutoShutdown=true tag in dev RGs
$devVMs = Get-AzVM -Status |
Where-Object {
$_.PowerState -eq "VM running" -and
$_.Tags["Environment"] -eq "Development" -and
$_.Tags["AutoShutdown"] -eq "true"
}

foreach ($vm in $devVMs) {
Write-Output "Shutting down $($vm.Name) - Budget $budgetName reached 100%"
Stop-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Force
}

Write-Output "Total VMs shut down: $($devVMs.Count)"

This Runbook is connected to the Budget's Action Group. When Budget reaches 100%, the alert triggers Action Group, which executes Runbook, which shuts down development VMs automatically.

Azure Advisor API for report automation​

# Generate weekly cost recommendations report
az advisor recommendation list \
--category Cost \
--query "[?impact=='High'].{
Resource: resourceMetadata.resourceId,
Problem: shortDescription.problem,
Solution: shortDescription.solution,
AnnualSavings: extendedProperties.annualSavingsAmount,
Currency: extendedProperties.savingsCurrency
}" \
--output json > advisor-custo-$(date +%Y%m%d).json

# Calculate total savings from pending recommendations
az advisor recommendation list \
--category Cost \
--query "sum([].extendedProperties.annualSavingsAmount)" \
--output tsv

13. Final Summary​

Essential points:

  • Budget defines spending limit with notifications but doesn't block spending by default
  • Cost alerts have two types: Actual (cost already occurred) and Forecasted (future cost projection)
  • Azure Advisor analyzes 30 days of telemetry and generates recommendations in 5 categories; Cost category identifies waste and suggests reservations
  • Cost data in Cost Management has 8 to 24 hour delay; some services reach 72 hours
  • Budgets can be created at Management Group, Subscription or Resource Group scopes
  • To automatically block spending, you need to configure Action Group + Runbook as Budget alert response

Critical differences:

  • Budget vs. Resource Lock: Budget monitors spending and notifies; Lock prevents delete/modify operations regardless of cost
  • Alert Actual vs. Forecasted: Actual is reactive (spending already occurred); Forecasted is preventive (based on projection)
  • Advisor recommendation vs. automatic implementation: Advisor identifies and recommends; implementation is manual or requires configured automation
  • Cost Management Reader vs. Reader: Cost Management Reader sees only cost data; Reader sees resources but not necessarily detailed cost

What needs to be remembered for AZ-104:

  • Budget does not block expenses; it only notifies
  • Limit of 50 Budgets per subscription
  • Limit of 5 notifications per Budget
  • Advisor analyzes 30 days of usage data for cost recommendations
  • Advisor recommendations are updated every 24 hours
  • Data retention in Cost Management is 13 months
  • Budget supports tag filters, which allows budgets by project even when resources are in multiple Resource Groups
  • The Cost Management Reader role is the correct way to provide financial visibility without operational access