Omówienie języka zapytań usługi Azure Resource Graph

Język zapytań dla usługi Azure Resource Graph obsługuje wiele operatorów i funkcji. Każda praca i działanie na podstawie język zapytań Kusto (KQL). Aby dowiedzieć się więcej o języku zapytań używanym przez usługę Resource Graph, zacznij od samouczka dotyczącego języka KQL.

W tym artykule opisano składniki języka obsługiwane przez usługę Resource Graph:

Tabele usługi Resource Graph

Usługa Resource Graph udostępnia kilka tabel dla danych przechowywanych na temat typów zasobów usługi Azure Resource Manager i ich właściwości. Tabele usługi Resource Graph mogą służyć operatorowi join do pobierania właściwości z powiązanych typów zasobów.

Tabele usługi Resource Graph obsługują join smaki:

Tabela usługi Resource Graph Czy inne join tabele mogą być? opis
AdvisorResources Tak Obejmuje zasoby związane z usługąMicrosoft.Advisor.
AlertsManagementResources Tak Obejmuje zasoby związane z usługąMicrosoft.AlertsManagement.
AppServiceResources Tak Obejmuje zasoby związane z usługąMicrosoft.Web.
AuthorizationResources Tak Obejmuje zasoby związane z usługąMicrosoft.Authorization.
AWSResources Tak Obejmuje zasoby związane z usługąMicrosoft.AwsConnector.
AzureBusinessContinuityResources Tak Obejmuje zasoby związane z usługąMicrosoft.AzureBusinessContinuity.
ChaosResources Tak Obejmuje zasoby związane z usługąMicrosoft.Chaos.
CommunityGalleryResources Tak Obejmuje zasoby związane z usługąMicrosoft.Compute.
ComputeResources Tak Obejmuje zasoby związane z zestawami Microsoft.Compute skalowania maszyn wirtualnych.
DesktopVirtualizationResources Tak Obejmuje zasoby związane z usługąMicrosoft.DesktopVirtualization.
DnsResources Tak Obejmuje zasoby związane z usługąMicrosoft.Network.
EdgeOrderResources Tak Obejmuje zasoby związane z usługąMicrosoft.EdgeOrder.
ElasticsanResources Tak Obejmuje zasoby związane z usługąMicrosoft.ElasticSan.
ExtendedLocationResources Tak Obejmuje zasoby związane z usługąMicrosoft.ExtendedLocation.
FeatureResources Tak Obejmuje zasoby związane z usługąMicrosoft.Features.
GuestConfigurationResources Tak Obejmuje zasoby związane z usługąMicrosoft.GuestConfiguration.
HealthResourceChanges Tak Obejmuje zasoby związane z usługąMicrosoft.Resources.
HealthResources Tak Obejmuje zasoby związane z usługąMicrosoft.ResourceHealth.
Szczegółowe informacje Resources Tak Obejmuje zasoby związane z usługąMicrosoft.Insights.
IoTSecurityResources Tak Obejmuje zasoby związane z elementami Microsoft.IoTSecurity i Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Tak Obejmuje zasoby związane z usługąMicrosoft.KubernetesConfiguration.
KustoResources Tak Obejmuje zasoby związane z usługąMicrosoft.Kusto.
MaintenanceResources Tak Obejmuje zasoby związane z usługąMicrosoft.Maintenance.
ManagedServicesResources Tak Obejmuje zasoby związane z usługąMicrosoft.ManagedServices.
MigrateResources Tak Obejmuje zasoby związane z usługąMicrosoft.OffAzure.
NetworkResources Tak Obejmuje zasoby związane z usługąMicrosoft.Network.
OrbitalResources Tak Obejmuje zasoby związane z usługąMicrosoft.Orbital.
PatchAssessmentResources Tak Obejmuje zasoby związane z oceną Microsoft.Compute poprawek usługi Azure Virtual Machines i Microsoft.HybridCompute.
PatchInstallationResources Tak Obejmuje zasoby związane z instalacją Microsoft.Compute poprawek usługi Azure Virtual Machines i Microsoft.HybridCompute.
PolicyResources Tak Obejmuje zasoby związane z usługąMicrosoft.PolicyInsights.
RecoveryServicesResources Tak Obejmuje zasoby związane z elementami Microsoft.DataProtection i Microsoft.RecoveryServices.
Zmiany zasobów Tak Obejmuje zasoby związane z usługąMicrosoft.Resources.
ResourceContainerChanges Tak Obejmuje zasoby związane z usługąMicrosoft.Resources.
ZasobyKontenery Tak Obejmuje grupy zarządzania (), subskrypcji (Microsoft.Management/managementGroupsMicrosoft.Resources/subscriptions) i grupy zasobów (Microsoft.Resources/subscriptions/resourcegroups) oraz typy zasobów i dane.
Zasoby Tak Tabela domyślna, jeśli tabela nie jest zdefiniowana w zapytaniu. Większość typów zasobów i właściwości usługi Resource Manager jest tutaj.
SecurityResources Tak Obejmuje zasoby związane z usługąMicrosoft.Security.
ServiceFabricResources Tak Obejmuje zasoby związane z usługąMicrosoft.ServiceFabric.
ServiceHealthResources Tak Obejmuje zasoby związane z usługąMicrosoft.ResourceHealth/events.
SpotResources Tak Obejmuje zasoby związane z usługąMicrosoft.Compute.
SupportResources Tak Obejmuje zasoby związane z usługąMicrosoft.Support.
TagsResources Tak Obejmuje zasoby związane z usługąMicrosoft.Resources/tagnamespaces.

Aby uzyskać listę tabel zawierających typy zasobów, przejdź do tabeli usługi Azure Resource Graph i odwołania do typu zasobu.

Uwaga

Resources jest tabelą domyślną. Podczas wykonywania zapytań dotyczących Resources tabeli nie jest wymagane podanie nazwy tabeli, chyba że join zostanie użyta lub union użyta. Zalecaną praktyką jest jednak zawsze uwzględnienie początkowej tabeli w zapytaniu.

Aby dowiedzieć się, które typy zasobów są dostępne w każdej tabeli, użyj Eksploratora usługi Resource Graph w portalu. Alternatywnie możesz użyć zapytania, takiego jak <tableName> | distinct type pobranie listy typów zasobów, które dana tabela usługi Resource Graph obsługuje istniejące w danym środowisku.

Poniższe zapytanie przedstawia proste joinpolecenie . Wynik zapytania łączy kolumny i wszystkie zduplikowane nazwy kolumn z tabeli sprzężonej, ResourceContainers w tym przykładzie, są dołączane z wartością 1. Ponieważ tabela ResourceContainers zawiera typy zarówno dla subskrypcji, jak i grup zasobów, oba typy mogą służyć do dołączania do zasobu z Resources tabeli.

Resources
| join ResourceContainers on subscriptionId
| limit 1

Poniższe zapytanie przedstawia bardziej złożone użycie programu join. Najpierw zapytanie używa project polecenia , aby pobrać pola z Resources dla typu zasobu magazynów usługi Azure Key Vault. W następnym kroku użyto join metody , aby scalić wyniki z elementami ResourceContainers, gdzie typ jest subskrypcjąwłaściwości, która znajduje się zarówno w tabeli pierwszej, project jak i tabeli połączonej project. Zmiana nazwy pola pozwala uniknąć join dodawania go jako nazwy1 , ponieważ właściwość jest już przewidywana z Resourceselementu . Wynikiem zapytania jest pojedynczy magazyn kluczy wyświetlający typ, nazwę, lokalizację i grupę zasobów magazynu kluczy wraz z nazwą subskrypcji, w niej znajduje się.

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

Uwaga

Podczas ograniczania join wyników za pomocą projectwłaściwości , używanej przez join program do powiązania dwóch tabel , subscriptionId w powyższym przykładzie musi być uwzględniona w elem project.

Właściwości rozszerzone

W ramach funkcji w wersji zapoznawczej niektóre typy zasobów w usłudze Resource Graph mają więcej właściwości związanych z typem, które są dostępne do wykonywania zapytań poza właściwościami udostępnianymi przez usługę Azure Resource Manager. Ten zestaw wartości, nazywany właściwościami rozszerzonymi, istnieje w obsługiwanym typie zasobu w systemie properties.extended. Aby wyświetlić typy zasobów z rozszerzonymi właściwościami, użyj następującego zapytania:

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

Przykład: pobieranie liczby maszyn wirtualnych według instanceView.powerState.code:

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

Elementy języka niestandardowego usługi Resource Graph

Składnia zapytań udostępnionych (wersja zapoznawcza)

Jako funkcja w wersji zapoznawczej dostęp do udostępnionego zapytania można uzyskać bezpośrednio w zapytaniu usługi Resource Graph. Ten scenariusz umożliwia tworzenie standardowych zapytań jako udostępnionych zapytań i ponowne używanie ich. Aby wywołać zapytanie udostępnione wewnątrz zapytania usługi Resource Graph, użyj {{shared-query-uri}} składni . Identyfikator URI udostępnionego zapytania to identyfikator zasobu udostępnionego zapytania na stronie Ustawienia dla tego zapytania. W tym przykładzie identyfikator URI udostępnionego zapytania to /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS. Ten identyfikator URI wskazuje subskrypcję, grupę zasobów i pełną nazwę udostępnionego zapytania, do którego chcemy się odwołać w innym zapytaniu. To zapytanie jest takie samo jak zapytanie utworzone w artykule Samouczek: tworzenie i udostępnianie zapytania.

Uwaga

Nie można zapisać kwerendy odwołującej się do udostępnionego zapytania jako kwerendy udostępnionej.

Przykład 1: Użyj tylko udostępnionego zapytania:

Wyniki tego zapytania usługi Resource Graph są takie same jak zapytanie przechowywane w udostępnionym zapytaniu.

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

Przykład 2. Dołącz udostępnione zapytanie jako część większego zapytania:

To zapytanie najpierw używa udostępnionego zapytania, a następnie używa limit go do dalszego ograniczania wyników.

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

Obsługiwane elementy języka KQL

Usługa Resource Graph obsługuje podzestaw typów danych KQL, funkcji skalarnych, operatorów skalarnych i funkcji agregacji. Określone operatory tabelaryczne są obsługiwane przez usługę Resource Graph, z których niektóre mają różne zachowania.

Obsługiwane operatory tabelaryczne/najwyższego poziomu

Oto lista operatorów tabelarycznych języka KQL obsługiwanych przez usługę Resource Graph z określonymi przykładami:

KQL Przykładowe zapytanie usługi Resource Graph Uwagi
count Liczba magazynów kluczy
Odrębne Pokaż zasoby, które zawierają magazyn
Rozszerzyć Liczba maszyn wirtualnych według typu systemu operacyjnego
join Magazyn kluczy o nazwie subskrypcji Obsługiwane smaki sprzężenia: innerunique, wewnętrzny, leftouter i fullouter. Limit trzech join w jednym zapytaniu, z których jeden może być tabelą krzyżową join. Jeśli wszystkie zastosowania między tabelami join znajdują się między elementami Resource i ResourceContainers, trzy tabele między tabelami join są dozwolone. Niestandardowe strategie sprzężenia, takie jak dołączanie do emisji, nie są dozwolone. Dla których tabel można używać , przejdź do obszaru Tabele usługi joinResource Graph.
limit Lista wszystkich publicznych adresów IP Synonim .take Nie działa z funkcją Pomiń.
mvexpand Zamiast tego użyj starszego mv-expand operatora. WierszLimit maksymalnie 400. Wartość domyślna to 128.
mv-expand Wyświetlanie listy usługi Azure Cosmos DB z określonymi lokalizacjami zapisu WierszLimit maksymalnie 400. Wartość domyślna to 128. Limit 2 mv-expand w jednym zapytaniu.
order Lista zasobów posortowana według nazwy Synonim sort
Przeanalizować Pobieranie sieci wirtualnych i podsieci interfejsów sieciowych Optymalne jest uzyskiwanie dostępu do właściwości bezpośrednio, jeśli istnieją zamiast używać metody parse.
Projektu Lista zasobów posortowana według nazwy
odchodzi od projektu Usuwanie kolumn z wyników
sort Lista zasobów posortowana według nazwy Synonim order
Podsumować Liczba zasobów platformy Azure Uproszczona tylko pierwsza strona
take Lista wszystkich publicznych adresów IP Synonim .limit Nie działa z funkcją Pomiń.
Do góry Pokaż pierwsze pięć maszyn wirtualnych według nazwy i ich typu systemu operacyjnego
Unii Łączenie wyników z dwóch zapytań w jeden wynik Dozwolona jedna tabela: | union [kind= inner|outer] [withsource=ColumnName] Table. Limit trzech union nóg w jednym zapytaniu. Rozmyte rozpoznawanie union tabel nóg nie jest dozwolone. Może być używany w jednej tabeli lub między tabelami Resources i ResourceContainers .
Gdzie Pokaż zasoby, które zawierają magazyn

Istnieje domyślny limit trzech join i trzech mv-expand operatorów w jednym zapytaniu zestawu RESOURCE Graph SDK. Możesz poprosić o zwiększenie tych limitów dla dzierżawy za pośrednictwem pomocy i obsługi technicznej.

Aby obsługiwać środowisko portalu Otwórz zapytanie , Eksplorator usługi Azure Resource Graph ma wyższy limit globalny niż zestaw SDK usługi Resource Graph.

Uwaga

Nie można odwołać się do tabeli jako odpowiedniej tabeli wiele razy, co przekracza limit 1. Jeśli to zrobisz, zostanie wyświetlony błąd z kodem DisallowedMaxNumberOfRemoteTables.

Zakres zapytania

Zakres subskrypcji lub grup zarządzania, z których zasoby są zwracane przez zapytanie domyślnie do listy subskrypcji na podstawie kontekstu autoryzowanego użytkownika. Jeśli grupa zarządzania lub lista subskrypcji nie jest zdefiniowana, zakres zapytania to wszystkie zasoby i obejmuje delegowane zasoby usługi Azure Lighthouse .

Lista subskrypcji lub grup zarządzania do wykonywania zapytań można zdefiniować ręcznie, aby zmienić zakres wyników. Na przykład właściwość interfejsu API managementGroups REST przyjmuje identyfikator grupy zarządzania, która różni się od nazwy grupy zarządzania. Po managementGroups określeniu zasoby z pierwszych 10 000 subskrypcji w lub w ramach określonej hierarchii grup zarządzania są uwzględniane. managementGroups nie można używać w tym samym czasie co subscriptions.

Przykład: wykonaj zapytanie o wszystkie zasoby w hierarchii grupy zarządzania o nazwie My Management Group o identyfikatorze myMG.

  • Identyfikator URI interfejsu API REST

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • Treść żądania

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

Parametr AuthorizationScopeFilter umożliwia wyświetlanie listy przypisań usługi Azure Policy i przypisań ról opartych na rolach (RBAC) platformy Azure w AuthorizationResources tabeli, które są dziedziczone z górnych zakresów. Parametr AuthorizationScopeFilter akceptuje następujące wartości dla PolicyResources tabel i AuthorizationResources :

  • AtScopeAndBelow (wartość domyślna, jeśli nie została określona): zwraca przypisania dla danego zakresu i wszystkich zakresów podrzędnych.
  • AtScopeAndAbove: zwraca przypisania dla danego zakresu i wszystkich zakresów nadrzędnych, ale nie zakresów podrzędnych.
  • AtScopeAboveAndBelow: zwraca przypisania dla danego zakresu, wszystkich zakresów nadrzędnych i wszystkich zakresów podrzędnych.
  • AtScopeExact: zwraca przypisania tylko dla danego zakresu; nie są uwzględniane żadne zakresy nadrzędne ani podrzędne.

Uwaga

Aby użyć parametru, w żądaniach użyj wersji interfejsu AuthorizationScopeFilterAPI 2021-06-01-preview lub nowszej.

Przykład: pobierz wszystkie przypisania zasad w grupach zarządzania myMG i zakresach katalogu głównego dzierżawy (nadrzędnego).

  • Identyfikator URI interfejsu API REST

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Przykład treści żądania

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

Przykład: pobierz wszystkie przypisania zasad w subskrypcji mySubscriptionId , grupie zarządzania i zakresach katalogu głównego dzierżawy.

  • Identyfikator URI interfejsu API REST

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Przykład treści żądania

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

Znaki ucieczki

Niektóre nazwy właściwości, takie jak te, które zawierają element . lub $, muszą być opakowane lub uniknięte w kwerendzie lub nazwa właściwości jest interpretowana niepoprawnie i nie dostarcza oczekiwanych wyników.

  • Kropka (.): zawijaj nazwę ['propertyname.withaperiod'] właściwości przy użyciu nawiasów kwadratowych.

    Przykładowe zapytanie, które opakowuje właściwość odata.type:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • Znak dolara ($): uniknie znaku w nazwie właściwości. Użyty znak ucieczki zależy od powłoki, która uruchamia usługę Resource Graph.

    • Powłoka Bash: użyj ukośnika odwrotnego (\) jako znaku ucieczki.

      Przykładowe zapytanie, które unika $type właściwości w powłoce Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: nie należy unikać znaku dolara ($).

    • PowerShell: użyj backtick (`) jako znaku ucieczki.

      Przykładowe zapytanie, które unika $type właściwości w programie PowerShell:

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

Następne kroki