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:
- Antal Azure-resurser
- Räkna Key Vault-resurser
- Lista över resurser sorterade efter namn
- Visning av alla virtuella datorer sorterade efter namn i fallande ordning
- Visning av de första fem virtuella datorerna efter namn och OS-typ
- Antal virtuella datorer efter OS-typ
- Visning av resurser med lagring
- Visa en lista över alla undernät för virtuella Azure-nätverk
- Lista över alla offentliga IP-adresser
- Antal resurser som har IP-adresser konfigurerade efter prenumeration
- Lista över resurser med ett specifikt tagg-värde
- Lista över alla lagringskonton med ett specifikt taggvärde
- Visa en lista över alla taggar och deras värden
- Visa oassocierade nätverkssäkerhetsgrupper
- Lista Azure Monitor-aviseringar ordnade efter allvarlighetsgrad
- Lista Azure Monitor-aviseringar ordnade efter allvarlighetsgrad och aviseringstillstånd
- Lista Azure Monitor-aviseringar ordnade efter allvarlighetsgrad, övervakningstjänst och målresurstyp
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 desc
order 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. Tack till Saul Dolgin för bidraget.
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 mvexpand
extend
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
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
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
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
- Läs mer om frågespråket.
- Läs mer om hur du utforskar resurser.
- Se exempel på avancerade frågor.