Pierwszym krokiem do zrozumienia zapytań usługi Azure Resource Graph jest podstawowa wiedza na temat języka zapytań. Jeśli nie znasz jeszcze usługi Azure Data Explorer, zalecane jest zapoznanie się z podstawami, aby zrozumieć sposób tworzenia żądań dotyczących zasobów, których szukasz.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Obsługa języków
Interfejs wiersza polecenia platformy Azure (za pośrednictwem rozszerzenia) i program Azure PowerShell (za pośrednictwem modułu) obsługują usługę Azure Resource Graph. Przed uruchomieniem dowolnego z poniższych zapytań sprawdź, czy Twoje środowisko jest gotowe. Zobacz Interfejs wiersza polecenia platformy Azure i Program Azure PowerShell, gdzie znajdziesz kroki instalacji i weryfikacji wybranego środowiska powłoki.
Pokaż wersję interfejsu API dla każdego typu zasobu
Usługa Resource Graph używa przede wszystkim najnowszej wersji interfejsu API dostawcy zasobów do GET właściwości zasobów podczas aktualizacji. W niektórych przypadkach używana wersja interfejsu API została zastąpiona w celu zapewnienia bardziej aktualnych lub powszechnie używanych właściwości w wynikach. Następujące zapytanie zawiera szczegółowe informacje o wersji interfejsu API używanej do zbierania właściwości dla każdego typu zasobu:
Resources
| distinct type, apiVersion
| where isnotnull(apiVersion)
| order by type asc
Platforma Microsoft Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Uzyskiwanie pojemności zestawu skalowania i rozmiaru maszyny wirtualnej
To zapytanie szuka zasobów zestawu skalowania maszyn wirtualnych i pobiera różne szczegółowe informacje, takie jak rozmiar maszyny wirtualnej i pojemność zestawu skalowania. To zapytanie używa funkcji toint(), aby rzutować pojemność na liczbę, co pozwala na sortowanie. Na koniec następuje zmiana nazw kolumn na właściwości o niestandardowej nazwie.
Resources
| where type=~ 'microsoft.compute/virtualmachinescalesets'
| where name contains 'contoso'
| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name
| order by Capacity desc
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Usuwanie kolumn z wyników
Poniższe zapytanie używa summarize metody do zliczenia zasobów według subskrypcji, join aby połączyć je ze szczegółami subskrypcji z tabeli ResourceContainers , a następnie project-away usunąć niektóre kolumny.
Resources
| summarize resourceCount=count() by subscriptionId
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project-away subscriptionId, subscriptionId1
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Wyświetlanie maszyn wirtualnych dopasowanych przez wyrażenie regularne
To zapytanie szuka maszyn wirtualnych, które odpowiadają wyrażeniu regularnemu (nazywanemu regex). Polecenie matches regex @ pozwala na określenie wyrażenia regularnego do dopasowania, czyli ^Contoso(.*)[0-9]+$.
Definicja tego wyrażenia regularnego jest wyjaśniona jako:
^ - Dopasowanie musi zaczynać się od początku ciągu.
Contoso - Ciąg z uwzględnieniem wielkości liter.
(.*) - Dopasowanie podwyrażu:
. - Dopasowuje dowolny pojedynczy znak (z wyjątkiem nowego wiersza).
* - Dopasowuje poprzedni element zero lub więcej razy.
[0-9] - Dopasowanie grupy znaków dla cyfry od 0 do 9.
+ - Dopasowuje poprzedni element co najmniej raz.
$ - Dopasowanie poprzedniego elementu musi wystąpić na końcu ciągu.
Po dopasowaniu według nazwy zapytanie rzutuje nazwę i porządkuje rosnąco według nazwy.
Resources
| where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$'
| project name
| order by name asc
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+\$' | project name | order by name asc"
Search-AzGraph -Query "Resources | where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$' | project name | order by name asc"
Wypróbuj to zapytanie w Eksploratorze usługi Azure Resource Graph:
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Wyświetlanie listy usługi Azure Cosmos DB z określonymi lokalizacjami zapisu
Następujące limity zapytań do zasobów usługi Azure Cosmos DB są używane mv-expand do rozszerzania torby właściwości dla właściwości properties.writeLocations, a następnie projektują określone pola i ograniczają wyniki dalej do wartości properties.writeLocations.locationName pasujących do wartości "Wschodnie stany USA" lub "Zachodnie stany USA".
Resources
| where type =~ 'microsoft.documentdb/databaseaccounts'
| project id, name, writeLocations = (properties.writeLocations)
| mv-expand writeLocations
| project id, name, writeLocation = tostring(writeLocations.locationName)
| where writeLocation in ('East US', 'West US')
| summarize by id, name
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Magazyny kluczy o nazwie subskrypcji
Poniższe zapytanie przedstawia złożone użycie typu join z typemleftouter. Zapytanie ogranicza tabelę przyłączoną do zasobów subskrypcji i zawiera project tylko oryginalne pole subscriptionId inazwę pola zmieniono na SubName. Zmiana nazwy pola pozwala uniknąć join dodawania go jako nazwy1 , ponieważ pole już istnieje w zasobach. Oryginalna tabela jest filtrowana za pomocą where elementu , a poniżej project znajdują się kolumny z obu tabel. Wynik zapytania to wszystkie magazyny kluczy, które wyświetlają typ, nazwę magazynu kluczy i nazwę subskrypcji, w którym się znajduje.
Resources
| join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| where type == 'microsoft.keyvault/vaults'
| project type, name, SubName
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Wyświetlanie listy maszyn wirtualnych przy użyciu interfejsu sieciowego i publicznego adresu IP
To zapytanie używa dwóch poleceń po lewej stroniejoin do łączenia maszyn wirtualnych utworzonych za pomocą modelu wdrażania usługi Resource Manager, powiązanych interfejsów sieciowych i dowolnego publicznego adresu IP powiązanego z tymi interfejsami sieciowymi.
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend nics=array_length(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic)
| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id)
| join kind=leftouter (
Resources
| where type =~ 'microsoft.network/networkinterfaces'
| extend ipConfigsCount=array_length(properties.ipConfigurations)
| mv-expand ipconfig=properties.ipConfigurations
| where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true'
| project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id))
on nicId
| project-away nicId1
| summarize by vmId, vmName, vmSize, nicId, publicIpId
| join kind=leftouter (
Resources
| where type =~ 'microsoft.network/publicipaddresses'
| project publicIpId = id, publicIpAddress = properties.ipAddress)
on publicIpId
| project-away publicIpId1
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Wyświetlanie listy wszystkich rozszerzeń zainstalowanych na maszynie wirtualnej
Najpierw to zapytanie używa extend typu zasobu maszyn wirtualnych, aby uzyskać identyfikator w wielkiej literze (toupper()) identyfikator, uzyskać nazwę i typ systemu operacyjnego oraz uzyskać rozmiar maszyny wirtualnej.
Uzyskanie identyfikatora zasobu w wielkim przypadku jest dobrym sposobem przygotowania do dołączenia do innej właściwości. Następnie zapytanie używa join typu z typemleftouter , aby uzyskać rozszerzenia maszyny wirtualnej, pasując do górnego litery substring identyfikatora rozszerzenia. Część identyfikatora przed wartością "/extensions/<ExtensionName>" jest taka sama jak identyfikator maszyn wirtualnych, dlatego używamy tej właściwości dla joinelementu . summarize Parametr jest następnie używany make_list z nazwą rozszerzenia maszyny wirtualnej, aby połączyć nazwę każdego rozszerzenia, w którym id, OSName, OSType i VMSize są takie same w jednej właściwości tablicy. Na koniec order by mamy dolną literę OSName z asc. Domyślnie order by jest malejąco.
Resources
| where type == 'microsoft.compute/virtualmachines'
| extend
JoinID = toupper(id),
OSName = tostring(properties.osProfile.computerName),
OSType = tostring(properties.storageProfile.osDisk.osType),
VMSize = tostring(properties.hardwareProfile.vmSize)
| join kind=leftouter(
Resources
| where type == 'microsoft.compute/virtualmachines/extensions'
| extend
VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
ExtensionName = name
) on $left.JoinID == $right.VMId
| summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize
| order by tolower(OSName) asc
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Znajdowanie kont magazynu z określonym tagiem w grupie zasobów
Poniższe zapytanie używa wewnętrznego join konta magazynu z grupami zasobów, które mają określoną nazwę tagu z uwzględnieniem wielkości liter i wartość tagu.
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| where tags['Key1'] =~ 'Value1'
| project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Jeśli konieczne jest wyszukanie nazwy tagu bez uwzględniania wielkości liter i wartości tagu, użyj parametru mv-expandbagexpansion . To zapytanie używa większego limitu przydziału niż poprzednie zapytanie, więc użyj mv-expand tylko w razie potrzeby.
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| mv-expand bagexpansion=array tags
| where isnotempty(tags)
| where tags[0] =~ 'key1' and tags[1] =~ 'value1'
| project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5 | union (Resources | project name, type | limit 5)"
Search-AzGraph -Query "ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5 | union (Resources | project name, type | limit 5)"
Wypróbuj to zapytanie w Eksploratorze usługi Azure Resource Graph:
Platforma Azure obsługiwana przez portal 21Vianet: portal.azure.cn
Pobieranie sieci wirtualnych i podsieci interfejsów sieciowych
Użyj wyrażenia parse regularnego, aby uzyskać nazwy sieci wirtualnej i podsieci z właściwości identyfikatora zasobu. Chociaż parse umożliwia pobieranie danych ze złożonego pola, optymalne jest uzyskiwanie dostępu do właściwości bezpośrednio, jeśli istnieją zamiast używać polecenia parse.
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"
Search-AzGraph -Query "Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"
Wypróbuj to zapytanie w Eksploratorze usługi Azure Resource Graph:
Pisanie zapytań dzienników w celu uzyskania wglądu w działalność biznesową, operacje IT i wydajność. Wyodrębnianie danych dziennika w usłudze Azure Monitor Log Analytics za pomocą język zapytań Kusto (KQL).
Przy użyciu usługi Azure Resource Graph uruchom kilka zapytań dla początkujących, obejmujących zliczanie i porządkowanie zasobów lub grupowanie według określonego tagu.
W tym artykule opisano tabele usługi Resource Graph oraz dostępne typy danych, operatory i funkcje usługi Kusto, których można używać za pomocą usługi Azure Resource Graph.
W tym przewodniku Szybki start uruchomisz zapytanie usługi Azure Resource Graph w witrynie Azure Portal przy użyciu Eksploratora usługi Azure Resource Graph.
Dowiedz się, w jaki sposób usługa Azure Resource Graph umożliwia złożone wykonywanie zapytań dotyczących zasobów na dużą skalę w subskrypcjach i dzierżawach.