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 già familiarità con Linguaggio di query Kusto (KQL), è consigliabile esaminare l'esercitazione KQL per comprendere come comporre richieste per le risorse che si sta cercando.

Questo articolo usa le query di avvio seguenti:

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 --subscriptions parametro 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 di Key Vault

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 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 extend in 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 in modo che corrisponda, questa query di esempio trova qualsiasi risorsa di Azure in cui contains archiviare le parole.

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.

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 solo properties.ipAddress e ai limit risultati dai primi 100. Potrebbe essere necessario eseguire l'escape delle virgolette a seconda della shell scelta.

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 tag isnotempty(), limita i campi inclusi includendo solo i tag in projecte e mvexpandextend 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 ai distinct 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à

Questa query usa la alertsmanagementresources tabella per restituire 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
az graph query -q "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

Questa query usa la alertsmanagementresources tabella per restituire 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
az graph query -q "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à, monitorare il servizio e il tipo di risorsa di destinazione

Questa query usa la alertsmanagementresources tabella per restituire gli avvisi di Monitoraggio di Azure ordinati in base alla gravità, al servizio di monitoraggio e al 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
az graph query -q "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