Informatie over de querytaal van Azure Resource Graph

De querytaal voor Azure Resource Graph ondersteunt veel operators en functies. Elk werk en werkt op basis van Kusto-querytaal (KQL). Voor meer informatie over de querytaal die door Resource Graph wordt gebruikt, begint u met de zelfstudie voor KQL.

In dit artikel worden de taalonderdelen behandeld die worden ondersteund door Resource Graph:

Resource Graph-tabellen

Resource Graph biedt verschillende tabellen voor de gegevens die worden opgeslagen over Azure Resource Manager-resourcetypen en de bijbehorende eigenschappen. Resource Graph-tabellen kunnen worden gebruikt met de join operator om eigenschappen op te halen uit gerelateerde resourcetypen.

Resource Graph-tabellen ondersteunen de join smaken:

Resource Graph-tabel Kunnen join andere tabellen? Beschrijving
AdvisorResources Ja Bevat resources met betrekking tot Microsoft.Advisor.
AlertsManagementResources Ja Bevat resources met betrekking tot Microsoft.AlertsManagement.
AppServiceResources Ja Bevat resources met betrekking tot Microsoft.Web.
AuthorizationResources Ja Bevat resources met betrekking tot Microsoft.Authorization.
AWSResources Ja Bevat resources met betrekking tot Microsoft.AwsConnector.
AzureBusinessContinuityResources Ja Bevat resources met betrekking tot Microsoft.AzureBusinessContinuity.
ChaosResources Ja Bevat resources met betrekking tot Microsoft.Chaos.
CommunityGalleryResources Ja Bevat resources met betrekking tot Microsoft.Compute.
DesktopVirtualizationResources Ja Bevat resources met betrekking tot Microsoft.DesktopVirtualization.
DnsResources Ja Bevat resources met betrekking tot Microsoft.Network.
EdgeOrderResources Ja Bevat resources met betrekking tot Microsoft.EdgeOrder.
ElasticsanResources Ja Bevat resources met betrekking tot Microsoft.ElasticSan.
ExtendedLocationResources Ja Bevat resources met betrekking tot Microsoft.ExtendedLocation.
FeatureResources Ja Bevat resources met betrekking tot Microsoft.Features.
GuestConfigurationResources Ja Bevat resources met betrekking tot Microsoft.GuestConfiguration.
HealthResourceChanges Ja Bevat resources met betrekking tot Microsoft.Resources.
HealthResources Ja Bevat resources met betrekking tot Microsoft.ResourceHealth.
InsightsResources Ja Bevat resources met betrekking tot Microsoft.Insights.
IoTSecurityResources Ja Bevat resources met betrekking tot Microsoft.IoTSecurity en Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Ja Bevat resources met betrekking tot Microsoft.KubernetesConfiguration.
KustoResources Ja Bevat resources met betrekking tot Microsoft.Kusto.
MaintenanceResources Ja Bevat resources met betrekking tot Microsoft.Maintenance.
ManagedServicesResources Ja Bevat resources met betrekking tot Microsoft.ManagedServices.
MigrateResources Ja Bevat resources met betrekking tot Microsoft.OffAzure.
NetworkResources Ja Bevat resources met betrekking tot Microsoft.Network.
OrbitalResources Ja Bevat resources met betrekking tot Microsoft.Orbital.
PatchAssessmentResources Ja Bevat resources met betrekking tot de evaluatie van Microsoft.Compute azure Virtual Machines-patches en Microsoft.HybridCompute.
PatchInstallationResources Ja Bevat resources met betrekking tot de patchinstallatie van Microsoft.Compute Azure Virtual Machines en Microsoft.HybridCompute.
PolicyResources Ja Bevat resources met betrekking tot Microsoft.PolicyInsights.
RecoveryServicesResources Ja Bevat resources met betrekking tot Microsoft.DataProtection en Microsoft.RecoveryServices.
ResourceChanges Ja Bevat resources met betrekking tot Microsoft.Resources.
ResourceContainerChanges Ja Bevat resources met betrekking tot Microsoft.Resources.
ResourceContainers Ja Omvat beheergroep (), abonnement (Microsoft.Management/managementGroupsMicrosoft.Resources/subscriptions) en resourcegroep (Microsoft.Resources/subscriptions/resourcegroups) resourcetypen en gegevens.
Resources Ja De standaardtabel als een tabel niet is gedefinieerd in de query. De meeste Resource Manager-resourcetypen en -eigenschappen zijn hier.
SecurityResources Ja Bevat resources met betrekking tot Microsoft.Security.
ServiceFabricResources Ja Bevat resources met betrekking tot Microsoft.ServiceFabric.
ServiceHealthResources Ja Bevat resources met betrekking tot Microsoft.ResourceHealth/events.
SpotResources Ja Bevat resources met betrekking tot Microsoft.Compute.
SupportResources Ja Bevat resources met betrekking tot Microsoft.Support.
TagsResources Ja Bevat resources met betrekking tot Microsoft.Resources/tagnamespaces.

Voor een lijst met tabellen met resourcetypen gaat u naar azure Resource Graph-tabel en resourcetypereferentie.

Notitie

Resources is de standaardtabel. Tijdens het uitvoeren van query's op de tabel Resources is het niet vereist om de tabelnaam op te geven, tenzij join of union worden gebruikt. Maar de aanbevolen procedure is altijd de eerste tabel in de query op te nemen.

Gebruik Resource Graph Explorer in de portal om te ontdekken welke resourcetypen beschikbaar zijn in elke tabel. Als alternatief kunt u een query gebruiken om <tableName> | distinct type een lijst met resourcetypen op te halen die door de opgegeven Resource Graph-tabel worden ondersteund die in uw omgeving aanwezig zijn.

De volgende query toont een eenvoudige join. Het queryresultaat combineert de kolommen en eventuele dubbele kolomnamen uit de gekoppelde tabel, ResourceContainers in dit voorbeeld, worden toegevoegd aan 1. Aangezien de tabel ResourceContainers typen heeft voor zowel abonnementen als resourcegroepen, kan een van beide typen worden gebruikt om vanuit de tabel Resources aan de resource deel te nemen.

Resources
| join ResourceContainers on subscriptionId
| limit 1

De volgende query toont een complexer gebruik van join. Eerst gebruikt project de query om de velden op te halen uit resources voor het resourcetype Azure Key Vault-kluizen. In de volgende stap join worden de resultaten samengevoegd met ResourceContainers waarbij het type een abonnement is op een eigenschap die zich zowel in de eerste tabel project als in de gekoppelde tabel projectbevindt. De naam van het veld voorkomt dat join deze wordt toegevoegd als naam1, omdat de eigenschap al uit Resources is geprojecteerd. Het queryresultaat is één sleutelkluis met het type, de naam, de locatie en de resourcegroep van de sleutelkluis, samen met de naam van het abonnement waarin deze zich bevindt.

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

Notitie

Wanneer u de join resultaten beperkt met project, moet de eigenschap die wordt gebruikt om join de twee tabellen te koppelen, subscriptionId in het bovenstaande voorbeeld worden opgenomen in project.

Uitgebreide eigenschappen

Als preview-functie hebben sommige resourcetypen in Resource Graph meer typegerelateerde eigenschappen die beschikbaar zijn om query's uit te voeren buiten de eigenschappen van Azure Resource Manager. Deze set waarden, ook wel uitgebreide eigenschappen genoemd, bestaat op een ondersteund resourcetype in properties.extended. Gebruik de volgende query om weer te geven welke resourcetypen uitgebreide eigenschappen hebben:

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

Voorbeeld: Het aantal virtuele machines ophalen op instanceView.powerState.code:

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

Aangepaste taalelementen van Resource Graph

Syntaxis voor gedeelde query's (preview)

Als preview-functie kan een gedeelde query rechtstreeks worden geopend in een Resource Graph-query. In dit scenario kunt u standaardquery's maken als gedeelde query's en deze opnieuw gebruiken. Als u een gedeelde query wilt aanroepen binnen een Resource Graph-query, gebruikt u de {{shared-query-uri}} syntaxis. De URI van de gedeelde query is de resource-id van de gedeelde query op de Instellingen pagina voor die query. In dit voorbeeld is /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OSonze gedeelde query-URI. Deze URI verwijst naar het abonnement, de resourcegroep en de volledige naam van de gedeelde query waarnaar we in een andere query willen verwijzen. Deze query is hetzelfde als de query die is gemaakt in de zelfstudie: Een query maken en delen.

Notitie

U kunt een query die verwijst naar een gedeelde query niet opslaan als een gedeelde query.

Voorbeeld 1: alleen de gedeelde query gebruiken

De resultaten van deze Resource Graph-query zijn hetzelfde als de query die is opgeslagen in de gedeelde query.

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

Voorbeeld 2: De gedeelde query opnemen als onderdeel van een grotere query

Deze query maakt eerst gebruik van de gedeelde query en gebruikt limit vervolgens om de resultaten verder te beperken.

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

Ondersteunde KQL-taalelementen

Resource Graph ondersteunt een subset van KQL-gegevenstypen, scalaire functies, scalaire operators en aggregatiefuncties. Specifieke tabellaire operators worden ondersteund door Resource Graph, waarvan sommige verschillende gedragingen hebben.

Ondersteunde operators op tabellair/hoogste niveau

Hier volgt de lijst met KQL-tabelloperators die worden ondersteund door Resource Graph met specifieke voorbeelden:

KQL Voorbeeldquery resourcegrafiek Opmerkingen
count Sleutelkluizen tellen
Verschillende Resources weergeven die opslag bevatten
Uitbreiden Virtuele machines tellen op type besturingssysteem
join Sleutelkluis met abonnementsnaam Joins worden ondersteund: innerunique, inner, leftouter en fullouter. Limiet van drie join in één query, waarvan één een kruistabel joinkan zijn. Als alle verschillende tabellen join worden gebruikt tussen Resource en ResourceContainers, zijn er drie verschillende tabellen join toegestaan. Aangepaste joinstrategieën, zoals broadcast join, zijn niet toegestaan. Ga naar Resource Graph-tabellen waarvoor tabellen kunnen worden gebruiktjoin.
limit Een lijst van alle openbare IP-adressen weergeven Synoniem van take. Werkt niet met Skip.
mvexpand Gebruik in plaats daarvan een verouderde operator mv-expand . RowLimit max. 400. De standaardwaarde is 128.
mv-expand Azure Cosmos DB weergeven met specifieke schrijflocaties RowLimit max. 400. De standaardwaarde is 128. Limiet van 2 mv-expand in één query.
order Een lijst van resources weergeven, gesorteerd op naam Synoniem van sort
Parse Virtuele netwerken en subnetten van netwerkinterfaces ophalen Het is optimaal om rechtstreeks toegang te krijgen tot eigenschappen als ze bestaan in plaats van te gebruiken parse.
Project Een lijst van resources weergeven, gesorteerd op naam
project-away Kolommen verwijderen uit resultaten
sort Een lijst van resources weergeven, gesorteerd op naam Synoniem van order
Samenvatten Azure-resources tellen Alleen vereenvoudigde eerste pagina
Nemen Een lijst van alle openbare IP-adressen weergeven Synoniem van limit. Werkt niet met Skip.
Boven De eerste vijf virtuele machines weergeven op naam en met hun type besturingssysteem
Unie Resultaten van twee query's combineren tot één resultaat Eén tabel toegestaan: | union [kind= inner|outer] [withsource=ColumnName] Table. Limiet van drie union benen in één query. Fuzzy resolutie van union beentabellen is niet toegestaan. Kan worden gebruikt in één tabel of tussen de tabellen Resources en ResourceContainers .
Waar Resources weergeven die opslag bevatten

Er is een standaardlimiet van drie join en drie mv-expand operators in één Resource Graph SDK-query. U kunt een verhoging van deze limieten voor uw tenant aanvragen via Help en ondersteuning.

Ter ondersteuning van de Open Query-portal heeft Azure Resource Graph Explorer een hogere globale limiet dan de Resource Graph SDK.

Querybereik

Het bereik van de abonnementen of beheergroepen waaruit resources worden geretourneerd door een query, wordt standaard ingesteld op een lijst met abonnementen op basis van de context van de geautoriseerde gebruiker. Als een beheergroep of een lijst met abonnementen niet is gedefinieerd, is het querybereik alle resources, waaronder gedelegeerde Azure Lighthouse-resources .

De lijst met abonnementen of beheergroepen waarop een query moet worden uitgevoerd, kan handmatig worden gedefinieerd om het bereik van de resultaten te wijzigen. De rest API-eigenschap managementGroups neemt bijvoorbeeld de id van de beheergroep op, die verschilt van de naam van de beheergroep. Wanneer managementGroups dit is opgegeven, worden resources uit de eerste 10.000 abonnementen in of onder de opgegeven beheergroephiërarchie opgenomen. managementGroups kan niet tegelijkertijd worden gebruikt als subscriptions.

Voorbeeld: Voer een query uit op alle resources binnen de hiërarchie van de beheergroep met de naam My Management Group id myMG.

  • REST API-URI

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

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

AuthorizationScopeFilter Met de parameter kunt u Azure Policy-toewijzingen en azure RBAC-roltoewijzingen (op rollen gebaseerd toegangsbeheer) weergeven in de AuthorizationResources tabel die worden overgenomen van hogere bereiken. De AuthorizationScopeFilter parameter accepteert de volgende waarden voor de PolicyResources en AuthorizationResources tabellen:

  • AtScopeAndBelow (standaard indien niet opgegeven): Retourneert toewijzingen voor het opgegeven bereik en alle onderliggende bereiken.
  • AtScopeAndAbove: retourneert toewijzingen voor het opgegeven bereik en alle bovenliggende bereiken, maar niet onderliggende bereiken.
  • AtScopeAboveAndBelow: retourneert toewijzingen voor het opgegeven bereik, alle bovenliggende bereiken en alle onderliggende bereiken.
  • AtScopeExact: retourneert alleen toewijzingen voor het opgegeven bereik; er zijn geen bovenliggende of onderliggende bereiken opgenomen.

Notitie

Als u de AuthorizationScopeFilter parameter wilt gebruiken, moet u de API-versie 2021-06-01-preview of hoger in uw aanvragen gebruiken.

Voorbeeld: Alle beleidstoewijzingen ophalen in de myMG-beheergroep en tenanthoofdmapbereiken (bovenliggende bereiken).

  • REST API-URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Voorbeeld van aanvraagtekst

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

Voorbeeld: Haal alle beleidstoewijzingen op in het mySubscriptionId-abonnement , de beheergroep en de tenanthoofdbereiken.

  • REST API-URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Voorbeeld van aanvraagtekst

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

Escapetekens

Sommige eigenschapsnamen, zoals namen met een . of $, moeten worden verpakt of escaped in de query of de naam van de eigenschap wordt onjuist geïnterpreteerd en levert de verwachte resultaten niet op.

  • . - De naam van de eigenschap als zodanig verpakken: ['propertyname.withaperiod']

    Voorbeeldquery waarmee de eigenschap odata.type wordt verpakt:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • $ - Escape het teken in de naam van de eigenschap. Het gebruikte escape-teken is afhankelijk van de shell waarop Resource Graph wordt uitgevoerd.

    • bash - \

      Voorbeeldquery die de eigenschap $type in Bash escapet:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd - Niet ontsnappen aan het $ teken.

    • PowerShell - `

      Voorbeeldquery die de eigenschap $type in PowerShell escapet:

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

Volgende stappen