azurerm_monitor_metric_alert cost estimation
A metric alert rule billed per monitored time series. A standard (static-threshold) rule is ~$0.10/month; dynamic-threshold rules are ~$0.50.
An azurerm_monitor_metric_alert evaluates a metric against a threshold and fires when it's breached. Cost is per monitored time series: a standard static-threshold rule is ~$0.10/month, and a dynamic-threshold (ML-based) rule is ~$0.50/month. These are tiny individually — the cost only matters at scale.
The subtlety is "per time series." A single alert rule scoped to multiple resources, or to a metric with multiple dimensions, monitors one time series per resource × dimension combination — and bills per series. So an alert rule applied across hundreds of VMs, or on a high-cardinality metric, multiplies the per-series charge well beyond the single-rule figure.
The levers: prefer static thresholds over dynamic where ML isn't needed (5x cheaper per series), be mindful of multi-resource and multi-dimension scope (it multiplies series), and remove alert rules that no longer serve a purpose. Notification actions (SMS, voice) have their own small charges; email/webhook are free.
c3x prices the alert from its type (static vs dynamic) per series; high-cardinality or broadly-scoped alerts scale from there.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "azurerm_monitor_metric_alert" "cpu" {
name = "high-cpu"
resource_group_name = azurerm_resource_group.main.name
scopes = [azurerm_linux_virtual_machine.app.id]
criteria {
metric_namespace = "Microsoft.Compute/virtualMachines"
metric_name = "Percentage CPU"
aggregation = "Average"
operator = "GreaterThan"
threshold = 80
}
action {
action_group_id = azurerm_monitor_action_group.ops.id
}
}Pricing dimensions
What you actually pay for when you provision azurerm_monitor_metric_alert.
| Dimension | Unit | What's being charged |
|---|---|---|
| Metric alert | per time series-month | Per monitored time series. Static-threshold ~$0.10; dynamic-threshold ~$0.50. Multi-resource/multi-dimension scope multiplies the series count. $0.10/series (static); $0.50/series (dynamic) |
Sample C3X output
A single static-threshold metric alert (one time series):
azurerm_monitor_metric_alert.cpu
└─ Metric alert (static) 1 series-month $0.10
Monthly $0.10Optimization tips
Common ways to reduce azurerm_monitor_metric_alert cost without changing the workload.
Prefer static thresholds where ML isn't needed
~$0.40/series vs dynamicDynamic-threshold (ML-based) alerts are ~5x the cost of static ones per series (~$0.50 vs ~$0.10). Use dynamic only where the metric genuinely benefits from adaptive baselining; static thresholds cover most alerting cheaply.
Mind multi-resource and multi-dimension scope
Proportional to series reducedCost is per time series, not per rule. An alert scoped across hundreds of VMs, or on a high-cardinality multi-dimension metric, bills per series — so broad or high-cardinality alerts add up well beyond the single-rule figure.
Remove stale alert rules
Per stale rule/series removedAlert rules left over from decommissioned resources or old investigations still bill per series. Periodically prune rules that no longer fire or matter.
Use free notification channels
Per SMS/voice notification avoidedEmail and webhook notifications are free; SMS and voice have per-notification charges. Route alerts through email/webhook/Teams where possible and reserve SMS/voice for genuine paging.
FAQ
How is an Azure Monitor metric alert billed?
Per monitored time series — a static-threshold rule is ~$0.10/month and a dynamic-threshold (ML) rule ~$0.50/month. Individually tiny; the cost matters at scale, since multi-resource or multi-dimension alerts bill per series, not per rule.
Why is my metric-alert cost higher than the number of rules?
Because it's per time series. One rule scoped to 200 VMs monitors 200 series and bills for 200. High-cardinality metrics (many dimension combinations) multiply it too. Scope alerts deliberately and prefer static over dynamic thresholds.
How does c3x estimate the cost?
From the alert type (static vs dynamic) per time series. For broadly-scoped or high-cardinality alerts, multiply by the series count to see the true cost.
Related resources
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including azurerm_monitor_metric_alert.