Starter Resource Graph-frågeexempel

Det första steget mot att förstå frågor med Azure Resource Graph är en grundläggande förståelse för frågespråket. Om du inte redan är bekant med Kusto-frågespråk (KQL) rekommenderar vi att du läser KQL-självstudien för att förstå hur du skapar begäranden för de resurser du letar efter.

Den här artikeln använder följande startfrågor:

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Språkstöd

Azure CLI (via ett tillägg) och Azure PowerShell (via en modul) har stöd för Azure Resource Graph. Kontrollera att din miljö är redo innan du kör någon av nedanstående frågor. Se Azure CLI och Azure PowerShell för anvisningar om hur du installerar och validerar din valda gränssnittsmiljö.

Antal Azure-resurser

Den här frågan returnerar antalet Azure-resurser som finns i de prenumerationer som du har åtkomst till. Det är också en bra fråga för att verifiera att ditt gränssnittval har lämpliga Azure Resource Graph-komponenter installerade och fungerar korrekt.

Resources
| summarize count()

Som standard frågar Azure CLI alla tillgängliga prenumerationer, men du kan ange parametern --subscriptions för att fråga efter specifika prenumerationer.

az graph query -q "Resources | summarize count()"

I det här exemplet används en variabel för prenumerations-ID:t.

subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid

Du kan också fråga efter omfång för hanteringsgrupp och klientorganisation. Ersätt <managementGroupId> och <tenantId> med dina värden.

az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'

Du kan också använda en variabel för klientorganisations-ID:t.

tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid

Räkna Key Vault-resurser

Den här frågan använder count i stället för summarize att räkna antalet poster som returneras. Endast nyckelvalv ingår i antalet.

Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"

Lista över resurser sorterade efter namn

Frågan returnerar alla typer av resurser men bara egenskaperna name (namn), type (typ) och location (plats). Den använder order by för att sortera egenskaperna efter egenskapen name (namn) i stigande (asc) ordning.

Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"

Visning av alla virtuella datorer sorterade efter namn i fallande ordning

För att bara lista virtuella datorer (som är typen Microsoft.Compute/virtualMachines) kan vi matcha egenskapen type (typ) i resultatet. Som för den föregående frågan, ändrar descorder by till att vara fallande. Tecknet =~ i typmatchningen talar om för Resource Graph att Resource Graph ska vara skiftlägesokänsligt.

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"

Visning av de första fem virtuella datorerna efter namn och OS-typ

Den här frågan använder top för att endast hämta fem matchande poster som sorteras efter namn. Typen av Azure-resurs är Microsoft.Compute/virtualMachines. project talar om Azure Resource Graph vilka egenskaper som ska inkluderas.

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"

Antal virtuella datorer efter OS-typ

Vi bygger vidare på den föregående frågan och begränsar fortfarande efter Azure-resurstyp Microsoft.Compute/virtualMachines men inte längre efter antalet returnerade poster. I stället använder vi summarize och count() för att definiera hur värdena ska grupperas och aggregeras efter egenskap, som i det här exemplet är properties.storageProfile.osDisk.osType. Ett exempel på hur denna sträng ser ut i det fullständiga objektet visas i Utforska resurser – Identifiering av virtuell maskin.

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)"

Ett annat sätt att skriva samma fråga är till extend en egenskap och ge den ett tillfälligt namn för användning i frågan, i det här fallet os. os används sedan av summarize och count() som i föregående exempel.

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)"

Kommentar

Tänk på att medan =~ tillåter skiftlägesokänslig matchning, kräver användning av egenskaper (som properties.storageProfile.osDisk.osType) i frågan att skiftläget är korrekt. Om egenskapen är det felaktiga fallet returneras ett null- eller felaktigt värde och gruppering eller sammanfattning skulle vara felaktig.

Visning av resurser med lagring

I stället för att explicit definiera vilken typ som ska matchas hittar den här exempelfrågan alla Azure-resurser som contains ordet lagring.

Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"

Visa en lista över alla undernät för virtuella Azure-nätverk

Den här frågan returnerar en lista över virtuella Azure-nätverk (VNet) inklusive undernätsnamn och adressprefix.

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"

Lista över alla offentliga IP-adresser

Hittar på ett liknande sätt som för den föregående frågan allt som är en typ med ordet publicIPAddresses. Den här frågan expanderar det mönstret så att det endast innehåller resultat där properties.ipAddressisnotempty, för att endast returnera properties.ipAddress och till limit resultaten av de 100 främsta. Du kan behöva undvika citattecknaderna beroende på ditt valda gränssnitt.

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"

Antal resurser som har IP-adresser konfigurerade efter prenumeration

Om vi använder den föregående exempelfrågan och lägger till summarize och count(), kan vi få en lista efter prenumeration på resurser med konfigurerade IP-adresser.

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"

Lista över resurser med ett specifikt tagg-värde

Vi kan begränsa resultaten med andra egenskaper än Azure-resurstyp, till exempel en tagg. I det här exemplet filtrerar vi för Azure-resurser med ett taggnamn innehållande environment som har värdet internal.

Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"

Om du även vill ange vilka taggar som resursen har och deras värden lägger du egenskapen taggs (taggar) i project-nyckelordet.

Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"

Lista över alla lagringskonton med specifikt taggvärde

Kombinera filterfunktionerna för exemplet ovan och filtrera Azure-resurstyp efter egenskapen type (typ). Den här frågan begränsar även sökningen för specifika typer av Azure-resurser med ett visst taggnamn och -värde.

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'"

Kommentar

I det här exemplet används == för matchning istället för villkorliga =~. == är en skiftlägeskänslig matchning.

Visa en lista över alla taggar och deras värden

Den här frågan visar taggar för hanteringsgrupper, prenumerationer och resurser tillsammans med deras värden. Frågan begränsar först till resurser där taggar isnotempty(), begränsar de inkluderade fälten genom att endast inkludera taggar i project, och mvexpandextend för att hämta kopplade data från egenskapsväskan. Den använder union sedan för att kombinera resultaten från ResourceContainers till samma resultat från Resurser, vilket ger bred täckning till vilka taggar som hämtas. Slutligen begränsar den resultatet till distinct kopplade data och undantar system-dolda taggar.

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-""

Visa oassocierade nätverkssäkerhetsgrupper

Den här frågan returnerar nätverkssäkerhetsgrupper (NSG:er) som inte är kopplade till ett nätverksgränssnitt eller undernät.

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"

Lista Azure Monitor-aviseringar ordnade efter allvarlighetsgrad

Den här frågan använder alertsmanagementresources tabellen för att returnera Azure Monitor-aviseringar ordnade efter allvarlighetsgrad.

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"

Lista Azure Monitor-aviseringar ordnade efter allvarlighetsgrad och aviseringstillstånd

Den här frågan använder alertsmanagementresources tabellen för att returnera Azure Monitor-aviseringar ordnade efter allvarlighetsgrad och aviseringstillstånd.

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"

Lista Azure Monitor-aviseringar ordnade efter allvarlighetsgrad, övervakningstjänst och målresurstyp

Den här frågan använder alertsmanagementresources tabellen för att returnera Azure Monitor-aviseringar ordnade efter allvarlighetsgrad, övervakningstjänst och målresurstyp.

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"

Nästa steg