Udostępnij przez


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ć? Description
AdvisorResources Yes Zawiera zasoby związane z .Microsoft.Advisor
AlertsManagementResources Yes Zawiera zasoby związane z .Microsoft.AlertsManagement
AppServiceResources Yes Zawiera zasoby związane z .Microsoft.Web
AuthorizationResources Yes Zawiera zasoby związane z .Microsoft.Authorization
AWSResources Yes Zawiera zasoby związane z .Microsoft.AwsConnector
AzureBusinessContinuityResources Yes Zawiera zasoby związane z .Microsoft.AzureBusinessContinuity
ChaosResources Yes Zawiera zasoby związane z .Microsoft.Chaos
CommunityGalleryResources Yes Zawiera zasoby związane z .Microsoft.Compute
ComputeResources Yes Obejmuje zasoby związane z zestawami Microsoft.Compute skalowania maszyn wirtualnych.
DesktopVirtualizationResources Yes Zawiera zasoby związane z .Microsoft.DesktopVirtualization
DnsResources Yes Zawiera zasoby związane z .Microsoft.Network
EdgeOrderResources Yes Zawiera zasoby związane z .Microsoft.EdgeOrder
ElasticsanResources Yes Zawiera zasoby związane z .Microsoft.ElasticSan
ExtendedLocationResources Yes Zawiera zasoby związane z .Microsoft.ExtendedLocation
FeatureResources Yes Zawiera zasoby związane z .Microsoft.Features
GuestConfigurationResources Yes Zawiera zasoby związane z .Microsoft.GuestConfiguration
HealthResourceChanges Yes Zawiera zasoby związane z .Microsoft.Resources
HealthResources Yes Zawiera zasoby związane z .Microsoft.ResourceHealth
InsightsResources Yes Zawiera zasoby związane z .Microsoft.Insights
IoTSecurityResources Yes Zawiera zasoby związane z Microsoft.IoTSecurity i Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Yes Zawiera zasoby związane z .Microsoft.KubernetesConfiguration
KustoResources Yes Zawiera zasoby związane z .Microsoft.Kusto
MaintenanceResources Yes Zawiera zasoby związane z .Microsoft.Maintenance
ManagedServicesResources Yes Zawiera zasoby związane z .Microsoft.ManagedServices
MigrateResources Yes Zawiera zasoby związane z .Microsoft.OffAzure
NetworkResources Yes Zawiera zasoby związane z .Microsoft.Network
PatchAssessmentResources Yes Zawiera zasoby związane z oceną Microsoft.Compute poprawek Azure Virtual Machines oraz Microsoft.HybridCompute.
PatchInstallationResources Yes Zawiera zasoby związane z instalacją Microsoft.Compute poprawek Azure Virtual Machines oraz Microsoft.HybridCompute.
PolicyResources Yes Zawiera zasoby związane z .Microsoft.PolicyInsights
RecoveryServicesResources Yes Zawiera zasoby związane z Microsoft.DataProtection i Microsoft.RecoveryServices.
ResourceChanges Yes Zawiera zasoby związane z .Microsoft.Resources
ResourceContainerChanges Yes Zawiera zasoby związane z .Microsoft.Resources
ResourceContainers Yes Obejmuje grupy zarządzania (), subskrypcji (Microsoft.Management/managementGroupsMicrosoft.Resources/subscriptions) i grupy zasobów (Microsoft.Resources/subscriptions/resourcegroups) oraz typy zasobów i dane.
Resources Yes 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 Yes Zawiera zasoby związane z .Microsoft.Security
ServiceFabricResources Yes Zawiera zasoby związane z .Microsoft.ServiceFabric
ServiceHealthResources Yes Zawiera zasoby związane z .Microsoft.ResourceHealth/events
SpotResources Yes Zawiera zasoby związane z .Microsoft.Compute
SupportResources Yes Zawiera zasoby związane z .Microsoft.Support
TagsResources Yes Zawiera zasoby związane z .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.

Note

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, a wszelkie zduplikowane nazwy kolumn z połączonej tabeli, w tym przykładzie ResourceContainers , są dodawane przez 1. Ponieważ tabela ResourceContainers zawiera typy zarówno dla subskrypcji, jak i grup zasobów, każdy z tych typów może być używany do łączenia z 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. Następnym krokiem join jest połączenie wyników z ResourceContainers , gdzie typem jest subskrypcja na właściwości, która znajduje się zarówno w pierwszej tabeli project , jak i w połączonej tabeli project. Przemianowanie pola unika join dodawania go jako nazwy1, ponieważ właściwość jest już rzutowana z Resources. 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

Note

Ograniczając join wyniki przez project, właściwość użyta przez join do powiązania obu tabel, subscriptionId w powyższym przykładzie, musi być uwzględniona w project.

Właściwości rozszerzone

Jako funkcja podglądowa , niektóre typy zasobów w Resource Graph mają więcej właściwości związanych z typem do zapytań poza właściwościami oferowanymi przez Azure Resource Manager. Ten zbiór wartości, znany jako rozszerzone właściwości, istnieje na obsługiwanym typie zasobu w .properties.extended Aby pokazać typy zasobów o rozszerzonych właściwościach, 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 podglądowa, współdzielone zapytanie jest dostępne bezpośrednio w zapytaniu 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 . URI współdzielonego zapytania to Resource ID współdzielonego 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.

Note

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

Resource Graph obsługuje podzbiór typów danych KQL, funkcji skalarnych, operatorów skalarnych oraz funkcji agregacji. Specyficzne operatory tabelaryczne są obsługiwane przez 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 Notes
count Liczba magazynów kluczy
distinct Pokaż zasoby, które zawierają magazyn
extend Liczba maszyn wirtualnych według typu systemu operacyjnego
join Magazyn kluczy o nazwie subskrypcji Dołącz obsługiwane smaki: innerunique, inner,leftouter i fullouter. Limit trzech operacji join lub union (lub ich kombinacji) w jednym zapytaniu, liczone razem, z których jedna może być sprzężeniem między tabelami. Jeśli całe użycie przez tabele join krzyżowe odbywa się między Resource aResourceContainers, dozwolone są trzy cross-table (pomiędzy tabelami join ). Niestandardowe strategie sprzężenia, takie jak dołączanie do emisji, nie są dozwolone. Dla których tabel można używać , przejdź do join usługi Resource Graph.
limit Lista wszystkich publicznych adresów IP Synonim .take Nie działa ze Skipem.
mvexpand Zamiast tego użyj starszego mv-expand operatora. Limit rzędu to maksymalnie 2 000. Wartość domyślna to 128.
mv-expand Wyświetlanie listy usługi Azure Cosmos DB z określonymi lokalizacjami zapisu Limit rzędu to maksymalnie 2 000. Wartość domyślna to 128. Limit 3 mv-expand w jednym zapytaniu.
order Lista zasobów posortowana według nazwy Synonim sort
parse 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.
project Lista zasobów posortowana według nazwy
project-away Usuwanie kolumn z wyników
sort Lista zasobów posortowana według nazwy Synonim order
summarize Liczba zasobów platformy Azure Uproszczona tylko pierwsza strona
take Lista wszystkich publicznych adresów IP Synonim .limit Nie działa ze Skipem.
top Pokaż pierwsze pięć maszyn wirtualnych według nazwy i ich typu systemu operacyjnego
union Łą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 pomiędzy tabelami Resources a ResourceContainers .
where 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 wspierać doświadczenie portalu Open Query , Azure Resource Graph Explorer ma wyższy globalny limit niż Resource Graph SDK.

Note

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 za pomocą zapytania, domyślnie opiera się na liście subskrypcji opartej na kontekście użytkownika upoważnionego. Jeśli grupa zarządzania lub lista subskrypcji nie jest zdefiniowana, zakres zapytań obejmuje wszystkie zasoby i zawiera zasoby delegowane przez 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 (domyślne, jeśli nie jest określone): Zwraca przypisania dla danego zakresu oraz wszystkich zakresów potomnych.
  • AtScopeAndAbove: Zwraca przypisania dla danego zakresu oraz wszystkich zakresów nadrzędnych, ale nie dla zakresów potomnych.
  • AtScopeAboveAndBelow: Zwraca przypisania do danego zakresu, wszystkich zakresów nadrzędnych oraz wszystkich zakresów potomnych.
  • AtScopeExact: Zwraca przypisania tylko dla danego zakresu; Nie ma w zestawie zakresów rodziców ani dziecka.

Note

Aby użyć parametru AuthorizationScopeFilter , upewnij się, że w swoich żądaniach używasz wersji API z wersji 2021-06-01-01 lub nowzej.

Przykład: Pobierz wszystkie przypisania polityk w grupie zarządzania myMG oraz w zakresach Tenant Root (nadrzędnych).

  • 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 polityk w zakresie subskrypcji mySubscriptionId , grupy zarządzania oraz Tenant Root.

  • 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 owija 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.

    • Bash: Użyj backslash (\) jako postaci do ucieczki.

      Przykładowe zapytanie, które wychodzi z właściwości $type w Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • CMD: Nie unikaj znaku dolara ($).

    • PowerShell: Użyj backticku (`) jako znaku ucieczki.

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

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

Dalsze kroki