Förstå frågespråket för Azure Resource Graph

Frågespråket för Azure Resource Graph stöder många operatorer och funktioner. Varje arbete och drift baseras på Kusto-frågespråk (KQL). Om du vill veta mer om det frågespråk som används av Resource Graph börjar du med självstudien för KQL.

Den här artikeln beskriver de språkkomponenter som stöds av Resource Graph:

Resource Graph-tabeller

Resource Graph innehåller flera tabeller för de data som lagras om Azure Resource Manager-resurstyper och deras egenskaper. Resource Graph-tabeller kan användas med operatorn join för att hämta egenskaper från relaterade resurstyper.

Resource Graph-tabeller stöder smakerna join :

Resource Graph-tabell Kan join andra tabeller? Description
AdvisorResources Yes Inkluderar resurser relaterade till Microsoft.Advisor.
AlertsManagementResources Yes Inkluderar resurser relaterade till Microsoft.AlertsManagement.
AppServiceResources Yes Inkluderar resurser relaterade till Microsoft.Web.
AuthorizationResources Yes Inkluderar resurser relaterade till Microsoft.Authorization.
AWSResources Yes Inkluderar resurser relaterade till Microsoft.AwsConnector.
AzureBusinessContinuityResources Yes Inkluderar resurser relaterade till Microsoft.AzureBusinessContinuity.
ChaosResources Yes Inkluderar resurser relaterade till Microsoft.Chaos.
CommunityGalleryResources Yes Inkluderar resurser relaterade till Microsoft.Compute.
ComputeResources Yes Innehåller resurser som är relaterade till Microsoft.Compute VM-skalningsuppsättningar.
DesktopVirtualizationResources Yes Inkluderar resurser relaterade till Microsoft.DesktopVirtualization.
DnsResources Yes Inkluderar resurser relaterade till Microsoft.Network.
EdgeOrderResources Yes Inkluderar resurser relaterade till Microsoft.EdgeOrder.
ElasticsanResources Yes Inkluderar resurser relaterade till Microsoft.ElasticSan.
ExtendedLocationResources Yes Inkluderar resurser relaterade till Microsoft.ExtendedLocation.
FeatureResources Yes Inkluderar resurser relaterade till Microsoft.Features.
GuestConfigurationResources Yes Inkluderar resurser relaterade till Microsoft.GuestConfiguration.
HealthResourceChanges Yes Inkluderar resurser relaterade till Microsoft.Resources.
HealthResources Yes Inkluderar resurser relaterade till Microsoft.ResourceHealth.
InsightsResources Yes Inkluderar resurser relaterade till Microsoft.Insights.
IoTSecurityResources Yes Inkluderar resurser relaterade till Microsoft.IoTSecurity och Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Yes Inkluderar resurser relaterade till Microsoft.KubernetesConfiguration.
KustoResources Yes Inkluderar resurser relaterade till Microsoft.Kusto.
MaintenanceResources Yes Inkluderar resurser relaterade till Microsoft.Maintenance.
ManagedServicesResources Yes Inkluderar resurser relaterade till Microsoft.ManagedServices.
MigrateResources Yes Inkluderar resurser relaterade till Microsoft.OffAzure.
NetworkResources Yes Inkluderar resurser relaterade till Microsoft.Network.
PatchAssessmentResources Yes Inkluderar resurser relaterade till Azure Virtual Machines patchbedömning Microsoft.Compute och Microsoft.HybridCompute.
PatchInstallationResources Yes Inkluderar resurser relaterade till patchinstallation Microsoft.Compute av Azure Virtual Machines och Microsoft.HybridCompute.
PolicyResources Yes Inkluderar resurser relaterade till Microsoft.PolicyInsights.
RecoveryServicesResources Yes Inkluderar resurser relaterade till Microsoft.DataProtection och Microsoft.RecoveryServices.
ResourceChanges Yes Inkluderar resurser relaterade till Microsoft.Resources.
ResourceContainerChanges Yes Inkluderar resurser relaterade till Microsoft.Resources.
ResourceContainers Yes Innehåller resurstyper och data för hanteringsgrupp (Microsoft.Management/managementGroups), prenumeration (Microsoft.Resources/subscriptions) och resursgrupp (Microsoft.Resources/subscriptions/resourcegroups).
Resources Yes Standardtabellen om en tabell inte har definierats i frågan. De flesta Resource Manager-resurstyper och egenskaper finns här.
SecurityResources Yes Inkluderar resurser relaterade till Microsoft.Security.
ServiceFabricResources Yes Inkluderar resurser relaterade till Microsoft.ServiceFabric.
ServiceHealthResources Yes Inkluderar resurser relaterade till Microsoft.ResourceHealth/events.
SpotResources Yes Inkluderar resurser relaterade till Microsoft.Compute.
SupportResources Yes Inkluderar resurser relaterade till Microsoft.Support.
TagsResources Yes Inkluderar resurser relaterade till Microsoft.Resources/tagnamespaces.

En lista över tabeller som innehåller resurstyper finns i tabellen Azure Resource Graph och resurstypsreferensen.

Note

Resources är standardtabellen. När du kör frågor mot Resources tabellen krävs det inte att du anger tabellnamnet såvida inte join eller union används. Men den rekommenderade metoden är att alltid inkludera den inledande tabellen i frågan.

Om du vill ta reda på vilka resurstyper som är tillgängliga i varje tabell använder du Resource Graph Explorer i portalen. Du kan också använda en fråga, till exempel <tableName> | distinct type för att hämta en lista över resurstyper som den angivna Resource Graph-tabellen stöder i din miljö.

Följande fråga visar en enkel join. Frågeresultatet blandar ihop kolumnerna och eventuella dubblettkolumner från den sammanfogade tabellen, ResourceContainers i detta exempel, läggs till med 1. Eftersom tabellen ResourceContainers har typer för både prenumerationer och resursgrupper kan båda typerna användas för att ansluta till resursen från Resources tabellen.

Resources
| join ResourceContainers on subscriptionId
| limit 1

Följande fråga visar en mer komplex användning av join. Först använder project frågan för att hämta fälten från Resources för resurstypen Azure Key Vault-valv. Nästa steg används join för att slå ihop resultaten med ResourceContainers där typen är en prenumeration en egenskap som finns både i den första tabellens project och den sammanfogade tabellens project. Fältombytningen undviker join att lägga till det som name1 eftersom egenskapen redan projiceras från Resources. Frågeresultatet är en enda nyckelvalv som visar typ, namn, plats och resursgrupp för nyckelvalvet, tillsammans med namnet på den prenumeration som det finns i.

Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1

Note

När resultaten begränsas join med project, måste egenskapen som används av join för att relatera de två tabellerna, subscriptionId i exemplet ovan, inkluderas i project.

Utökade egenskaper

Som en förhandshandsfunktion har vissa resurstyper i Resource Graph fler typrelaterade egenskaper tillgängliga att fråga efter utöver de egenskaper som Azure Resource Manager tillhandahåller. Denna uppsättning värden, kända som utökade egenskaper, existerar på en stödd resurstyp i properties.extended. För att visa resurstyper med utökade egenskaper, använd följande fråga:

Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc

Exempel: Hämta antalet virtuella datorer genom instanceView.powerState.codeatt :

Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)

Anpassade språkelement för Resource Graph

Syntax för delad fråga (förhandsversion)

Som en förhandsgranskningsfunktion kan en delad fråga nås direkt i en Resource Graph-fråga. Det här scenariot gör det möjligt att skapa standardfrågor som delade frågor och återanvända dem. Om du vill anropa en delad fråga i en Resource Graph-fråga använder du syntaxen {{shared-query-uri}} . URI:n för den delade frågan är resurs-ID: t för den delade frågan på Inställningssidan för den frågan. I det här exemplet är /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OSvår delade fråge-URI . Den här URI:n pekar på prenumerationen, resursgruppen och det fullständiga namnet på den delade fråga som vi vill referera till i en annan fråga. Den här frågan är densamma som den som skapades i Självstudie: Skapa och dela en fråga.

Note

Du kan inte spara en fråga som refererar till en delad fråga som en delad fråga.

Exempel 1: Använd endast den delade frågan:

Resultatet av den här Resource Graph-frågan är samma som frågan som lagras i den delade frågan.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}

Exempel 2: Inkludera den delade frågan som en del av en större fråga:

Den här frågan använder först den delade frågan och använder limit sedan för att ytterligare begränsa resultaten.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'

KQL-språkelement som stöds

Resource Graph stödjer en delmängd av KQL-datatyper, skalära funktioner, skaläroperatorer och aggregeringsfunktioner. Specifika tabelloperatorer stöds av Resource Graph, varav vissa har olika beteenden.

Operatorer på tabell-/toppnivå som stöds

Här är listan över KQL-tabelloperatorer som stöds av Resource Graph med specifika exempel:

KQL Resource Graph-exempelfråga Notes
count Räkna nyckelvalv
distinct Visning av resurser med lagring
extend Antal virtuella datorer efter OS-typ
join Nyckelvalv med prenumerationsnamn Join-varianter stöds: innerunique, inner, leftouter och fullouter. Gränsen på tre join eller union åtgärder (eller en kombination av de två) i en enda fråga, räknas tillsammans, varav en kan vara en koppling mellan tabeller. Om all korstabellsanvändning join sker mellan Resource och ResourceContainers, tillåts tre korstabeller join . Anpassade anslutningsstrategier, till exempel sändningskoppling, tillåts inte. För vilka tabeller kan använda joingår du till Resource Graph-tabeller.
limit Lista över alla offentliga IP-adresser takeSynonymen för . Det fungerar inte med Skip.
mvexpand Äldre operator, använd mv-expand i stället. RowLimit max 2 000. Standardvärdet är 128.
mv-expand Lista Azure Cosmos DB med specifika skrivplatser RowLimit max 2 000. Standardvärdet är 128. Gräns på 3 mv-expand i en enskild fråga.
order Lista över resurser sorterade efter namn Synonym till sort
parse Hämta virtuella nätverk och undernät för nätverksgränssnitt Det är optimalt att komma åt egenskaper direkt om de finns i stället för att använda parse.
project Lista över resurser sorterade efter namn
project-away Ta bort kolumner från resultat
sort Lista över resurser sorterade efter namn Synonym till order
summarize Antal Azure-resurser Endast förenklad förstasida
take Lista över alla offentliga IP-adresser limitSynonymen för . Det fungerar inte med Skip.
top Visning av de första fem virtuella datorerna efter namn och OS-typ
union Kombinera resultat från två frågor till ett enda resultat Enkel tabell tillåts: | union [kind= inner|outer] [withsource=ColumnName] Table. Gräns på tre union ben i en enda fråga. Fuzzy-upplösning för union bentabeller tillåts inte. Kan användas inom en enda tabell eller mellan tabellerna Resources och ResourceContainers .
where Visning av resurser med lagring

Det finns en standardgräns på tre join och tre mv-expand operatorer i en enda Resource Graph SDK-fråga. Du kan begära en ökning av dessa gränser för din klientorganisation via Hjälp + support.

För att stödja Open Query-portalupplevelsen har Azure Resource Graph Explorer en högre global gräns än Resource Graph SDK.

Note

Du kan inte referera till en tabell som rätt tabell flera gånger, vilket överskrider gränsen på 1. Om du gör det får du ett fel med koden DisallowedMaxNumberOfRemoteTables.

Frågeomfång

Omfattningen av de prenumerationer eller hanteringsgrupper från vilka resurser returneras av en fråga är som standard en lista över prenumerationer baserat på den auktoriserade användarens kontext. Om en ledningsgrupp eller en prenumerationslista inte är definierad, omfattar frågeomfånget alla resurser och inkluderar Azure Lighthouse-delegerade resurser.

Listan över prenumerationer eller hanteringsgrupper som ska frågas kan definieras manuellt för att ändra resultatets omfattning. Egenskapen REST API managementGroups tar till exempel hanteringsgruppens ID, som skiljer sig från namnet på hanteringsgruppen. När managementGroups anges inkluderas resurser från de första 10 000 prenumerationerna i eller under den angivna hanteringsgruppshierarkin. managementGroups kan inte användas samtidigt som subscriptions.

Exempel: Fråga alla resurser i hierarkin för hanteringsgruppen med namnet My Management Group med ID myMG.

  • REST API-URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • Begärandekropp

    {
      "query": "Resources | summarize count()",
      "managementGroups": ["myMG"]
    }
    

Med AuthorizationScopeFilter parametern kan du visa en lista över Azure Policy-tilldelningar och rolltilldelningar för Rollbaserad åtkomstkontroll i Azure (Azure RBAC) i tabellen AuthorizationResources som ärvs från de övre omfången. Parametern AuthorizationScopeFilter accepterar följande värden för tabellerna PolicyResources och AuthorizationResources :

  • AtScopeAndBelow (standard om inte specificerat): Returnerar tilldelingar för det givna scopet och alla barnscopes.
  • AtScopeAndAbove: Returnerar tilldelningar för det givna omfånget och alla överordnade omfång, men inte för barnomfång.
  • AtScopeAboveAndBelow: Returnerar tilldelningar för det givna scope, alla föräldrascopes och alla underscopes.
  • AtScopeExact: Returnerar endast tilldelningar för det givna scope; Inga föräldrar eller barn-skopior ingår.

Note

För att använda parametern AuthorizationScopeFilter , se till att använda API-versionen 2021-06-01-preview eller senare i dina förfrågningar.

Exempel: Få alla policytilldelningar hos myMG :s managementgrupp och Tenant Root (moder) scopes.

  • REST API-URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Exempel på begärandetext

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "managementGroups": ["myMG"]
    }
    

Exempel: Hämta alla policytilldelningar vid mySubscriptionId-prenumerationen , hanteringsgruppen och Tenant Root-scopes.

  • REST API-URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Exempel på begärandetext

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "subscriptions": ["mySubscriptionId"]
    }
    

Escape-tecken

Vissa egenskapsnamn, till exempel de som innehåller en . eller $, måste vara omslutna eller undantagna i frågan eller så tolkas egenskapsnamnet felaktigt och ger inte de förväntade resultaten.

  • Punkt (.): Omslut egenskapsnamnet ['propertyname.withaperiod'] med hakparenteser.

    Exempelfråga som omsluter egenskapen odata.type:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • Dollartecken ($): Undvik tecknet i egenskapsnamnet. Vilket escape-tecken som används beror på gränssnittet som kör Resource Graph.

    • Bash: Använd en backslash (\) som flyktkaraktär.

      Exempel på fråga som undviker egenskapen $type i Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: Undvik inte dollartecknet ($)-karaktären.

    • PowerShell: Använd en backtick (`) som escape-tecken.

      Exempelfråga som undviker egenskapen $type i PowerShell:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
      

Nästa steg