Azure Resource Graph Query Patterns
Azure Resource Graph (ARG) queries use a KQL subset against indexed Azure resource metadata. Results are near real-time across all subscriptions.
Command Format
bash
az graph query -q "<KQL>" --query "data[].\{col1:field1, col2:field2\}" -o table| Flag | Purpose |
|---|---|
-q | KQL query string |
--query | JMESPath to shape output columns |
--first N | Limit to N results |
--subscriptions | Scope to specific subscription IDs |
-o table | Table output (also: json, tsv) |
Key Tables
| Table | Contents |
|---|---|
Resources | All ARM resources — name, type, location, properties, tags, sku |
ResourceContainers | Subscriptions, resource groups, management groups |
HealthResources | Resource health availability status |
ServiceHealthResources | Azure service health events/incidents |
AuthorizationResources | Role assignments and definitions |
AdvisorResources | Azure Advisor recommendations |
KQL Essentials
=~case-insensitive equals (use fortypefield — types are lowercase)properties.fieldNamenavigates the properties JSON bagmv-expandflattens arrays (subnets, IP configs)isempty()/isnotnull()checks for null/empty fieldstostring()converts dynamic fields for display
Resource Inventory Patterns
Count all resources by type:
kql
Resources | summarize count() by type | order by count_ descInventory by type and location:
kql
Resources | summarize count() by type, location | order by type ascCross-subscription inventory with subscription names:
kql
Resources
| join kind=leftouter (
ResourceContainers
| where type == 'microsoft.resources/subscriptions'
| project subscriptionId, subscriptionName=name
) on subscriptionId
| summarize count() by subscriptionName, type
| order by subscriptionName asc, count_ descAll resources in a resource group:
kql
Resources