Esempi di query di Resource Graph di base
Il primo passaggio per capire le query con Azure Resource Graph è conoscere i fondamenti del linguaggio di query. Se non si ha familiarità con il linguaggio di query Kusto (KQL), è consigliabile vedere l'esercitazione di KQL per capire come comporre richieste in grado di individuare le risorse desiderate.
Questo articolo usa le query di avvio seguenti:
- Contare le risorse di Azure
- Contare le risorse dell'insieme di credenziali delle chiavi
- Elencare le risorse ordinate per nome
- Mostrare tutte le macchine virtuali ordinate per nome in ordine decrescente
- Mostrare le prime cinque macchine virtuali per nome e tipo di sistema operativo
- Contare le macchine virtuali per tipo di sistema operativo
- Mostrare le risorse che contengono archivi
- Elencare tutte le subnet della rete virtuale di Azure
- Elencare tutti gli indirizzi IP pubblici
- Contare le risorse che hanno indirizzi IP configurati per sottoscrizione
- Elencare le risorse con un valore di tag specifico
- Elencare tutti gli account di archiviazione con un valore di tag specifico
- Elencare tutti i tag e i relativi valori
- Visualizzare i gruppi di sicurezza di rete non associati
- Elencare gli avvisi di Monitoraggio di Azure ordinati in base alla gravità
- Elencare gli avvisi di Monitoraggio di Azure ordinati in base alla gravità e allo stato di avviso
- Elencare gli avvisi di Monitoraggio di Azure ordinati per gravità, servizio di monitoraggio e tipo di risorsa di destinazione
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Supporto di versioni in lingue diverse
Azure Resource Graph è supportato dall'interfaccia della riga di comando di Azure tramite un'estensione e da Azure PowerShell tramite un modulo. Prima di eseguire le query seguenti, verificare che l'ambiente sia pronto. Per i passaggi necessari per installare e convalidare l'ambiente shell preferito, vedere le informazioni relative all'interfaccia della riga di comando di Azure e ad Azure PowerShell.
Contare le risorse di Azure
Questa query restituisce il numero di risorse di Azure esistenti nelle sottoscrizioni a cui l'utente ha accesso. È anche una query valida da usare per verificare che nella shell preferita siano installati i componenti di Azure Resource Graph appropriati e funzionino correttamente.
Resources
| summarize count()
Per impostazione predefinita, l'interfaccia della riga di comando di Azure esegue query su tutte le sottoscrizioni accessibili, ma è possibile specificare il parametro --subscriptions
per eseguire query su sottoscrizioni specifiche.
az graph query -q "Resources | summarize count()"
In questo esempio viene usata una variabile per l'ID sottoscrizione.
subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid
È anche possibile eseguire query in base agli ambiti per il gruppo di gestione e il tenant. Sostituire <managementGroupId>
e <tenantId>
con i propri valori.
az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'
È anche possibile usare una variabile per l'ID tenant.
tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid
Contare le risorse dell'insieme di credenziali delle chiavi
Questa query usa count
invece di summarize
per contare il numero di record restituiti. Nel conteggio sono inclusi solo gli insiemi di credenziali delle chiavi.
Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"
Elencare le risorse ordinate per nome
Questa query restituisce qualsiasi tipo di risorsa, ma solo le proprietà name, type e location. Usa order by
per ordinare le proprietà in base alla proprietà name in ordine crescente (asc
).
Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"
Mostrare tutte le macchine virtuali ordinate per nome in ordine decrescente
Per elencare solo le macchine virtuali (che sono di tipo Microsoft.Compute/virtualMachines
), è possibile cercare le corrispondenze della proprietà type nei risultati. Analogamente alla query precedente, desc
cambia order by
in decrescente. Nella ricerca di corrispondenze per tipo, =~
induce Resource Graph a non distinguere fra maiuscole e minuscole.
Resources
| project name, location, type
| where type =~ 'Microsoft.Compute/virtualMachines'
| order by name desc
az graph query -q "Resources | project name, location, type| where type =~ 'Microsoft.Compute/virtualMachines' | order by name desc"
Mostrare le prime cinque macchine virtuali per nome e tipo di sistema operativo
Questa query usa top
per recuperare solo cinque record corrispondenti che vengono ordinati in base al nome. Il tipo della risorsa di Azure è Microsoft.Compute/virtualMachines
. project
indica ad Azure Resource Graph quali proprietà includere.
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, properties.storageProfile.osDisk.osType
| top 5 by name desc
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project name, properties.storageProfile.osDisk.osType | top 5 by name desc"
Contare le macchine virtuali per tipo di sistema operativo
Continuando dalla query precedente, le risorse sono ancora limitate al tipo Microsoft.Compute/virtualMachines
, ma non è più presente il limite sul numero di record restituiti.
Invece, sono stati usati summarize
e count()
per definire come raggruppare e aggregare i valori in base a una proprietà, che in questo esempio è properties.storageProfile.osDisk.osType
. Per un esempio dell'aspetto di questa stringa nell'oggetto completo, vedere le informazioni sull'esplorazione delle risorse e l'individuazione delle macchine virtuali.
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| summarize count() by tostring(properties.storageProfile.osDisk.osType)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by tostring(properties.storageProfile.osDisk.osType)"
Un modo diverso per scrivere la stessa query consiste nel extend
una proprietà e assegnargli un nome temporaneo da usare all'interno della query, in questo caso os. os viene quindi usato da summarize
e count()
come nell'esempio precedente.
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| extend os = properties.storageProfile.osDisk.osType
| summarize count() by tostring(os)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | extend os = properties.storageProfile.osDisk.osType | summarize count() by tostring(os)"
Nota
Tenere presente che, sebbene =~
consenta la ricerca di corrispondenze senza distinzione fra maiuscole e minuscole, per usare le proprietà, ad esempio properties.storageProfile.osDisk.osType, nella query è necessario che le maiuscole/minuscole siano corrette. Se le maiuscole/minuscole sono errate, viene restituito un valore Null o errato e il raggruppamento o il riepilogo non saranno corretti.
Mostrare le risorse che contengono archivi
Invece di definire in modo esplicito il tipo da individuare, questa query di esempio trova tutte le risorse di Azure che contengono (contains
) la parola storage.
Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"
Elencare tutte le subnet di rete virtuale di Azure
Questa query restituisce un elenco di reti virtuali di Azure, inclusi i nomi delle subnet e i prefissi degli indirizzi. Grazie a Saul Dolgin per il contributo.
Resources
| where type == 'microsoft.network/virtualnetworks'
| extend subnets = properties.subnets
| mv-expand subnets
| project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId
az graph query -q "Resources | where type == 'microsoft.network/virtualnetworks' | extend subnets = properties.subnets | mv-expand subnets | project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId"
Elencare tutti gli indirizzi IP pubblici
Analogamente alla query precedente, trovare gli elementi in cui il tipo contenga la parola publicIPAddresses.
Questa query si espande su tale modello per includere solo i risultati in cui properties.ipAddressisnotempty
, per restituire soloproperties.ipAddress e per limit
i risultati dei 100 migliori. Potrebbe essere necessario eseguire l'escape delle virgolette a seconda della shell in uso.
Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| project properties.ipAddress
| limit 100
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | project properties.ipAddress | limit 100"
Contare le risorse che hanno indirizzi IP configurati per sottoscrizione
Usando la query dell'esempio precedente e aggiungendo summarize
e count()
, è possibile ottenere un elenco per sottoscrizione delle risorse con indirizzi IP configurati.
Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| summarize count () by subscriptionId
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId"
Elencare le risorse con un valore di tag specifico
È possibile limitare i risultati mediante proprietà diverse dal tipo di risorsa di Azure, ad esempio un tag. In questo esempio si applica alle risorse di Azure un filtro basato sul nome di tag Environment con il valore Internal.
Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"
Per fornire anche i tag della risorsa e i relativi valori, aggiungere la proprietà tags per alla parola chiave project
.
Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"
Elencare tutti gli account di archiviazione con un valore di tag specifico
Combinare la funzionalità di filtro dell'esempio precedente e filtrare il tipo di risorsa di Azure per la proprietà type. Questa query limita anche la ricerca di tipi specifici di risorse di Azure con un nome di tag e un valore specifici.
Resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where tags['tag with a space']=='Custom value'
az graph query -q "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where tags['tag with a space']=='Custom value'"
Nota
Questo esempio usa ==
per la corrispondenza anziché l'operatore condizionale =~
. ==
rappresenta una corrispondenza con distinzione fra maiuscole e minuscole.
Elencare tutti i tag e i relativi valori
Questa query elenca i tag nei gruppi di gestione, nelle sottoscrizioni e nelle risorse insieme ai relativi valori.
La query limita innanzitutto le risorse in cui i tag isnotempty()
, limita i campi inclusi includendo solo i tag in project
e mvexpand
e extend
per ottenere i dati associati dal contenitore delle proprietà. Usa quindi union
per combinare i risultati di ResourceContainers agli stessi risultati di Resources, offrendo una copertura generale ai tag recuperati. Infine, limita i risultati adistinct
dati associati ed esclude i tag nascosti dal sistema.
ResourceContainers
| where isnotempty(tags)
| project tags
| mvexpand tags
| extend tagKey = tostring(bag_keys(tags)[0])
| extend tagValue = tostring(tags[tagKey])
| union (
resources
| where isnotempty(tags)
| project tags
| mvexpand tags
| extend tagKey = tostring(bag_keys(tags)[0])
| extend tagValue = tostring(tags[tagKey])
)
| distinct tagKey, tagValue
| where tagKey !startswith "hidden-"
az graph query -q "ResourceContainers | where isnotempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) | union (resources | where notempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) ) | distinct tagKey, tagValue | where tagKey !startswith "hidden-""
Mostrare i gruppi di sicurezza di rete non associati
Questa query restituisce i gruppi di sicurezza di rete non associati a un'interfaccia di rete o a una subnet.
Resources
| where type =~ "microsoft.network/networksecuritygroups" and isnull(properties.networkInterfaces) and isnull(properties.subnets)
| project name, resourceGroup
| sort by name asc
az graph query -q "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc"
Elencare gli avvisi di Monitoraggio di Azure ordinati in base alla gravità
alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity)
| summarize AlertsCount = count() by Severity
Elencare gli avvisi di Monitoraggio di Azure ordinati in base alla gravità e allo stato di avviso
alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity),
AlertState= tostring(properties.essentials.alertState)
| summarize AlertsCount = count() by Severity, AlertState
Elencare gli avvisi di Monitoraggio di Azure ordinati per gravità, servizio di monitoraggio e tipo di risorsa di destinazione
alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity),
MonitorCondition = tostring(properties.essentials.monitorCondition),
ObjectState = tostring(properties.essentials.alertState),
MonitorService = tostring(properties.essentials.monitorService),
AlertRuleId = tostring(properties.essentials.alertRule),
SignalType = tostring(properties.essentials.signalType),
TargetResource = tostring(properties.essentials.targetResourceName),
TargetResourceType = tostring(properties.essentials.targetResourceName), id
| summarize AlertsCount = count() by Severity, MonitorService , TargetResourceType
Passaggi successivi
- Altre informazioni sul linguaggio di query.
- Altre informazioni su come esplorare le risorse.
- Vedere esempi di query avanzate.