Zone-redundant Managed Grafana outside production
A Managed Grafana workspace paying for zone redundancy while tagged non-production.
Why it happens
Azure Managed Grafana bills zone redundancy as its own meter rather than as a multiplier on the workspace, so it is a separable line on the bill. In East US the Standard Zone Redundancy meter is $0.0411 an hour, which is $30.00 a month, more than the $0.0342 an hour node it protects. Zone redundancy spreads the workspace across at least three availability zones so a datacenter failure does not take the dashboards down, which a development or test workspace does not need. The remedy is not a setting: Microsoft states zone redundancy can be enabled only when the workspace is created and cannot be changed later, so moving off it means deploying a new workspace and pointing the dashboards and data sources at it.
Paste this into Resource Graph Explorer in the Azure portal.
resources
| where type =~ 'microsoft.dashboard/grafana'
// Scope below matches CloudFinOpsPro policy DEFAULTS: exclusions.protectTag, environment.tagKeys,
// environment.allowedTagValues, and allowUntagged false so an untagged resource counts as production.
// If your policy.yaml differs, edit the three lines below or this will disagree with your own agent.
| where tolower(tostring(coalesce(tags['cfop:protect'], ''))) !in ('true', 'yes', '1')
| extend cfopEnv = tolower(trim(' ', tostring(coalesce(tags['Environment'], tags['environment'], tags['env'], ''))))
| where cfopEnv in ('dev', 'development', 'test', 'qa', 'sandbox', 'nonprod', 'non-prod', 'staging')
// zoneRedundancy is an enum of Disabled and Enabled that DEFAULTS to Disabled, so an absent value
// means off rather than unknown. Matched exactly, so a value Azure adds later is not swept in.
| extend zoneRedundancy = tostring(properties.zoneRedundancy)
| where zoneRedundancy =~ 'Enabled'
// Deliberately no dollar arithmetic. The rate is read live by the agent so it cannot go stale here.
| project name, resourceGroup, location, zoneRedundancy, sku = tostring(sku.name), environment = cfopEnvAzure Managed Grafana bills zone redundancy as its own meter rather than as a multiplier on the workspace, so it is a separable line on the bill. Verified against the retail API, East US publishes exactly four meters for Azure Grafana Service, and Standard Zone Redundancy is $0.0411 an hour, which is $30.00 over 730 hours. The Standard Node it protects is $0.0342 an hour, so the redundancy costs more than the thing it makes redundant. This query deliberately returns the setting rather than a dollar figure: a rate baked into a published query goes stale the day Azure reprices, which is why the agent reads it live. Note the remedy is NOT a setting change. The ARM specification lists zoneRedundancy among the properties a PATCH accepts, but Microsoft's documentation states you can enable zone redundancy only when you create the workspace and cannot change it later, so moving off it means deploying a new workspace and pointing the dashboards and data sources at it. This is a structural test, so what it returns is what the check reports.
Applies to microsoft.dashboard/grafanaWhat the agent does about it
A Managed Grafana workspace paying for zone redundancy while tagged non-production.
It will not fix this one
It reports this and takes no action. A check only earns the right to change something once the action behind it can re-read live state before it fires and knows the way back.
Related checks
Log Analytics table over-retained beyond the configured baseline
A Log Analytics table whose interactive retention exceeds the configured baseline. The query-rate half of the intake row, which would tell whether the table is a Basic-plan candidate, needs a data-plane query the agent does not yet perform.
Log Analytics workspace retained beyond the free period
A Log Analytics workspace whose default retention exceeds the 31 days Azure includes at no extra cost. Every table without its own override inherits this, so it is reported once against the workspace rather than once per table.
Idle virtual machine
A running VM whose CPU and network have been near zero for the whole window.