Informatie over de querytaal van Azure Resource Graph

De querytaal voor de Azure Resource Graph ondersteunt veel operators en functies. Elk werkt 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 hun eigenschappen. Sommige tabellen kunnen worden gebruikt met join operators of union om eigenschappen op te halen uit gerelateerde resourcetypen. Hier volgt de lijst met tabellen die beschikbaar zijn in Resource Graph:

Resource Graph tabel Kunnen join andere tabellen? Description
Resources Yes De standaardtabel als er geen is gedefinieerd in de query. De meeste Resource Manager resourcetypen en -eigenschappen staan hier.
ResourceContainers Yes Bevat beheergroep (Microsoft.Management/managementGroups), abonnement (Microsoft.Resources/subscriptions) en resourcegroep (Microsoft.Resources/subscriptions/resourcegroups) resourcetypen en gegevens.
AdvisorResources Ja (preview) Bevat resources met betrekking tot Microsoft.Advisor.
AlertsManagementResources Ja (preview) Bevat resources met betrekking tot Microsoft.AlertsManagement.
DesktopVirtualizationResources Yes Bevat resources met betrekking tot Microsoft.DesktopVirtualization.
ExtendedLocationResources No Bevat resources met betrekking tot Microsoft.ExtendedLocation.
GuestConfigurationResources No Bevat resources met betrekking tot Microsoft.GuestConfiguration.
HealthResources Ja (preview) Bevat resources met betrekking tot Microsoft.ResourceHealth/availabilitystatuses.
IoTSecurityResources No Bevat resources met betrekking tot Microsoft.IoTSecurity.
KubernetesConfigurationResources No Bevat resources met betrekking tot Microsoft.KubernetesConfiguration.
MaintenanceResources Gedeeltelijk, voeg alleen toe aan . (preview) Bevat resources met betrekking tot Microsoft.Maintenance.
PatchAssessmentResources No Bevat resources met betrekking tot azure Virtual Machines patch-evaluatie.
PatchInstallationResources No Bevat resources met betrekking tot de installatie van Azure Virtual Machines patch.
PolicyResources Yes Bevat resources met betrekking tot Microsoft.PolicyInsights.
RecoveryServicesResources Gedeeltelijk, voeg alleen toe aan . (preview) Bevat resources met betrekking tot Microsoft.DataProtection en Microsoft.RecoveryServices.
SecurityResources Ja (preview) Bevat resources met betrekking tot Microsoft.Security.
ServiceHealthResources Nee (preview) Bevat resources met betrekking tot Microsoft.ResourceHealth/events.
WorkloadMonitorResources No Bevat resources met betrekking tot Microsoft.WorkloadMonitor.

Zie Naslaginformatie: Ondersteunde tabellen en resourcetypen voor een volledige lijst, inclusief resourcetypen.

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. Het wordt echter aanbevolen om 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 <tableName> | distinct type zoals gebruiken om een lijst op te halen met resourcetypen die de opgegeven Resource Graph tabel ondersteunt die in uw omgeving bestaan.

In de volgende query ziet u 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 bevat voor zowel abonnementen als resourcegroepen, kan elk type worden gebruikt om vanuit de tabel Resources aan de resource te koppelen.

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 als project in de gekoppelde tabel bevindt project. Met de veldnaam wordt join voorkomen dat deze wordt toegevoegd als naam1 , omdat de eigenschap al wordt geprojecteerd vanuit Resources. 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

Bij het beperken van de join resultaten met projectmoet de eigenschap die door join wordt gebruikt om de twee tabellen, subscriptionId in het bovenstaande voorbeeld, te koppelen, worden opgenomen in project.

Uitgebreide eigenschappen

Als preview-functie hebben sommige resourcetypen in Resource Graph meer typegerelateerde eigenschappen beschikbaar om query's uit te voeren buiten de eigenschappen die door Azure Resource Manager worden geleverd. Deze set waarden, ook wel uitgebreide eigenschappen genoemd, bestaat op een ondersteund resourcetype in properties.extended. Als u wilt zien welke resourcetypen uitgebreide eigenschappen hebben, gebruikt u de volgende query:

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

Voorbeeld: Get count of virtual machines by instanceView.powerState.code:

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

aangepaste taalelementen Resource Graph

Gedeelde querysyntaxis (preview)

Als preview-functie kan een gedeelde query rechtstreeks worden geopend in een Resource Graph-query. Dit scenario maakt het mogelijk om standaardquery's te maken als gedeelde query's en deze opnieuw te gebruiken. Als u een gedeelde query wilt aanroepen in 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 pagina Instellingen voor die query. In dit voorbeeld is /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OSde 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 dezelfde als de query die is gemaakt in 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 operatoren worden ondersteund door Resource Graph, waarvan sommige ander gedrag vertonen.

Ondersteunde operators op het hoogste niveau in tabelvorm/op het hoogste niveau

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

KQL Resource Graph voorbeeldquery Notities
Tellen Sleutelkluizen tellen
distinct Resources weergeven die opslag bevatten
Uitbreiden Virtuele machines tellen op type besturingssysteem
Join Sleutelkluis met abonnementsnaam Ondersteunde join-smaken: innerunique, inner, leftouter. Limiet van 3 join in één query, waarvan 1 een kruistabel joinkan zijn. Als het gebruik in meerdere tabellen join plaatsvindt tussen Resource en ResourceContainers, zijn 3 kruistabellen join toegestaan. Aangepaste joinstrategieën, zoals broadcast join, zijn niet toegestaan. Zie Resource Graph tabellen voor welke tabellen kunnen worden gebruiktjoin.
Beperken Een lijst van alle openbare IP-adressen weergeven Synoniem van take. Werkt niet met Overslaan.
mvexpand Verouderde operator, gebruik mv-expand in plaats daarvan. RowLimit maximum van 400. De standaardwaarde is 128.
mv-expand Azure Cosmos DB met specifieke schrijflocaties weergeven RowLimit maximum van 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 deze bestaan in plaats van gebruik te maken parsevan .
Project Een lijst van resources weergeven, gesorteerd op naam
project-away Kolommen verwijderen uit resultaten
Sorteren 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 Overslaan.
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: T| union [|kind=outerinner] [withsource=Kolomnaam] Tabel. Limiet van 3 poten union in één query. Fuzzy resolutie van union beentabellen is niet toegestaan. Kan worden gebruikt binnen één tabel of tussen de tabellen Resources en ResourceContainers .
Waar Resources weergeven die opslag bevatten

Er is een standaardlimiet van 3 join en 3 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 portal 'Query openen' heeft Azure Resource Graph Explorer een hogere globale limiet dan 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 er geen beheergroep of abonnementslijst is gedefinieerd, bestaat het querybereik uit alle resources, waaronder gedelegeerde Azure Lighthouse-resources .

De lijst met abonnementen of beheergroepen waarop u een query wilt uitvoeren, kan handmatig worden gedefinieerd om het bereik van de resultaten te wijzigen. De eigenschap REST API managementGroups gebruikt bijvoorbeeld de beheergroep-id, die verschilt van de naam van de beheergroep. Wanneer managementGroups is opgegeven, worden resources van de eerste 10.000 abonnementen in of onder de opgegeven beheergroephiërarchie opgenomen. managementGroups kan niet tegelijkertijd subscriptionsmet worden gebruikt.

Voorbeeld: voer een query uit op alle resources binnen de hiërarchie van de beheergroep met de naam My Management Group .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"]
    }
    

Met de AuthorizationScopeFilter parameter kunt u Azure Policy-toewijzingen en Azure RBAC-roltoewijzingen in de AuthorizationResources tabel weergeven die zijn overgenomen van hogere bereiken. De AuthorizationScopeFilter parameter accepteert de volgende waarden voor de PolicyResources tabellen en AuthorizationResources :

  • 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 voor 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 gebruiken in uw aanvragen.

Voorbeeld: Alle beleidstoewijzingen ophalen in de bereiken myMG-beheergroep en Tenanthoofdmap (bovenliggend).

  • REST API-URI

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

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

Voorbeeld: Haal alle beleidstoewijzingen op voor het mySubscriptionId-abonnement , de beheergroep en de hoofdbereiken van de tenant.

  • REST API-URI

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

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

Escapetekens

Sommige eigenschapsnamen, zoals de namen die een . of $bevatten, moeten in de query worden verpakt of ge escaped, anders wordt de eigenschapsnaam onjuist geïnterpreteerd en levert niet de verwachte resultaten op.

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

    Voorbeeldquery die de eigenschap odata.type verpakt:

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

    • Bash - \

      Voorbeeldquery die de eigenschap $type in Bash escapen:

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

    • Powershell - `

      Voorbeeldquery die de eigenschap $type in PowerShell escapen:

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

Volgende stappen