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 . |
InsightsResources | 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/managementGroups Microsoft.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 join
polecenie . 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 Resources
elementu . 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ą project
wł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 zapytania udostępnionego 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 | |
odmienny | 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 join Resource 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 maksymalny 2000. Wartość domyślna to 128. |
|
mv-expand | Wyświetlanie listy usługi Azure Cosmos DB z określonymi lokalizacjami zapisu | WierszLimit maksymalny 2000. 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 . |
projekt | 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 |
brać | 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 | |
unia | Łą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 AuthorizationScopeFilter
API 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
- Zapytania początkowe języka zapytań usługi Azure Resource Graph i zapytania zaawansowane.
- Dowiedz się więcej o sposobie eksplorowania zasobów platformy Azure.