Przykłady zapytań usługi Resource Graph dla początkujących

Pierwszym krokiem do zrozumienia zapytań usługi Azure Resource Graph jest podstawowa wiedza na temat języka zapytań. Jeśli nie znasz jeszcze język zapytań Kusto (KQL), zalecamy zapoznanie się z samouczkiem języka KQL, aby dowiedzieć się, jak tworzyć żądania dotyczące zasobów, których szukasz.

W tym artykule są używane następujące zapytania początkowe:

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.

Liczba zasobów platformy Azure

To zapytanie zwraca liczbę zasobów platformy Azure, które istnieją w subskrypcjach, do których masz dostęp. Jest to również dobre zapytanie do weryfikowania, czy wybrana powłoka ma zainstalowane odpowiednie składniki usługi Azure Resource Graph w kolejności pracy.

Resources
| summarize count()

Domyślnie interfejs wiersza polecenia platformy Azure wykonuje zapytania dotyczące wszystkich dostępnych subskrypcji, ale można określić --subscriptions parametr, aby wykonywać zapytania dotyczące określonych subskrypcji.

az graph query -q "Resources | summarize count()"

W tym przykładzie użyto zmiennej dla identyfikatora subskrypcji.

subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid

Możesz również wykonywać zapytania według zakresów grupy zarządzania i dzierżawy. Zastąp <managementGroupId> wartości i <tenantId> wartościami.

az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'

Można również użyć zmiennej dla identyfikatora dzierżawy.

tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid

Liczba zasobów usługi Key Vault

To zapytanie używa count zamiast summarize do zliczenia zwracanych rekordów. Tylko magazyny kluczy są uwzględniane w liczbie.

Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"

Lista zasobów posortowana według nazwy

To zapytanie zwraca dowolny typ zasobu, ale tylko właściwości nazwa, typ i lokalizacja. Używa ono polecenia order by do sortowania właściwości według właściwości nazwa w kolejności rosnącej (asc).

Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"

Pokaż wszystkie maszyny wirtualne uporządkowane według nazwy w kolejności malejącej

Aby wyświetlić listę zawierającą tylko maszyny wirtualne (które są typu Microsoft.Compute/virtualMachines), możemy dopasować w wynikach właściwość typ. Podobnie jak w przypadku poprzedniego zapytania, element desc zmienia order by na kolejność malejącą. =~ w dopasowaniu typu nakazuje usłudze Resource Graph ignorowanie wielkości liter.

Resources
| project name, location, type
| where type =~ 'Microsoft.Compute/virtualMachines'
| order by name desc
az graph query -q "Resources | project name, location, type| where type =~ 'Microsoft.Compute/virtualMachines' | order by name desc"

Pokaż pierwsze pięć maszyn wirtualnych według nazwy i ich typu systemu operacyjnego

To zapytanie używa top metody do pobierania tylko pięciu pasujących rekordów uporządkowanych według nazwy. Typ zasobu platformy Azure to Microsoft.Compute/virtualMachines. project informuje usługę Azure Resource Graph, które właściwości mają być uwzględnione.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, properties.storageProfile.osDisk.osType
| top 5 by name desc
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project name, properties.storageProfile.osDisk.osType | top 5 by name desc"

Liczba maszyn wirtualnych według typu systemu operacyjnego

Opierając się na poprzednim zapytaniu, nadal ograniczamy wyniki według zasobów platformy Azure typu Microsoft.Compute/virtualMachines, ale nie ograniczamy już liczby zwracanych rekordów. Zamiast tego użyliśmy elementów summarize i count(), aby określić sposób grupowania i agregacji wartości według właściwości, którą w tym przykładzie jest properties.storageProfile.osDisk.osType. Aby zobaczyć przykład przedstawiający wygląd tego ciągu w pełnym obiekcie, zobacz badanie zasobów — odnajdywanie maszyn wirtualnych.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| summarize count() by tostring(properties.storageProfile.osDisk.osType)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by tostring(properties.storageProfile.osDisk.osType)"

Innym sposobem na napisanie tego samego zapytania jest extend właściwość i nadanie jej tymczasowej nazwy do użycia w zapytaniu, w tym przypadku systemu operacyjnego. system operacyjny jest następnie używany przez summarize element i count() tak jak w poprzednim przykładzie.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| extend os = properties.storageProfile.osDisk.osType
| summarize count() by tostring(os)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | extend os = properties.storageProfile.osDisk.osType | summarize count() by tostring(os)"

Uwaga

Pamiętaj, że o ile =~ zezwala na dopasowanie bez uwzględniania wielkości liter, to użycie właściwości (takich jak properties.storageProfile.osDisk.osType) w zapytaniu wymaga prawidłowej wielkości liter. Jeśli właściwość jest niepoprawnym przypadkiem, zwracana jest wartość null lub niepoprawna, a grupowanie lub podsumowywanie będzie niepoprawne.

Pokaż zasoby, które zawierają magazyn

Zamiast jawnie definiować typ do dopasowania, to przykładowe zapytanie znajduje dowolny zasób platformy Azure, który contains jest magazynem słów.

Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"

Wyświetlanie listy wszystkich podsieci sieci wirtualnej platformy Azure

To zapytanie zwraca listę sieci wirtualnych platformy Azure, w tym nazwy podsieci i prefiksy adresów.

Resources
| where type == 'microsoft.network/virtualnetworks'
| extend subnets = properties.subnets
| mv-expand subnets
| project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId
az graph query -q "Resources | where type == 'microsoft.network/virtualnetworks' | extend subnets = properties.subnets | mv-expand subnets | project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId"

Lista wszystkich publicznych adresów IP

Podobnie jak poprzednie zapytanie, znajduje wszystko, co jest typem zawierającym słowo publicIPAddresses. To zapytanie rozszerza ten wzorzec, aby uwzględnić tylko wyniki, w których właściwości.ipAddress, aby zwrócić tylko właściwości.ipAddressisnotempty i wyniki limit według pierwszych 100. Może być konieczne ucieczka cudzysłowów w zależności od wybranej powłoki.

Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| project properties.ipAddress
| limit 100
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | project properties.ipAddress | limit 100"

Liczba zasobów ze skonfigurowanymi adresami IP według subskrypcji

Używając poprzedniego przykładowego zapytania i dodając elementy summarize i count(), możemy pobrać listę zasobów ze skonfigurowanymi adresami IP według subskrypcji.

Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| summarize count () by subscriptionId
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId"

Lista zasobów z konkretną wartością tagu

Możemy ograniczyć wyniki za pomocą właściwości innych niż typ zasobu platformy Azure, takich jak tag. W tym przykładzie filtrujemy zasoby platformy Azure za pomocą nazwy tagu Środowisko o wartości Wewnętrzne.

Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"

Aby uzyskać także nazwy i wartości tagów w zasobie, dodaj właściwość tagi do słowa kluczowego project.

Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"

Lista wszystkich kont magazynu z konkretną wartością tagu

Połącz funkcję filtrowania z poprzedniego przykładu i przefiltruj typ zasobów platformy Azure według właściwości typ. To zapytanie ogranicza także nasze wyszukiwanie do określonych typów zasobów platformy Azure o określonej nazwie i wartości tagu.

Resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where tags['tag with a space']=='Custom value'
az graph query -q "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where tags['tag with a space']=='Custom value'"

Uwaga

W tym przykładzie użyto == do dopasowania zamiast warunkowego =~. == jest dopasowaniem uwzględniającym wielkość liter.

Wyświetlanie listy wszystkich tagów i ich wartości

To zapytanie zawiera listę tagów grup zarządzania, subskrypcji i zasobów wraz z ich wartościami. Zapytanie najpierw ogranicza zasoby, w których tagi isnotempty(), ogranicza uwzględnione pola tylko przez uwzględnienie tagów w projectobiekcie i i mvexpandextend pobranie sparowanych danych z torby właściwości. Następnie używa union metody , aby połączyć wyniki z usługi ResourceContainers z tymi samymi wynikami z zasobów, co daje szeroki zakres, do którego są pobierane tagi. Na koniec ogranicza wyniki do distinct sparowanych danych i wyklucza tagi ukryte przez system.

ResourceContainers
| where isnotempty(tags)
| project tags
| mvexpand tags
| extend tagKey = tostring(bag_keys(tags)[0])
| extend tagValue = tostring(tags[tagKey])
| union (
    resources
    | where isnotempty(tags)
    | project tags
    | mvexpand tags
    | extend tagKey = tostring(bag_keys(tags)[0])
    | extend tagValue = tostring(tags[tagKey])
)
| distinct tagKey, tagValue
| where tagKey !startswith "hidden-"
az graph query -q "ResourceContainers | where isnotempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) | union (resources | where notempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) ) | distinct tagKey, tagValue | where tagKey !startswith "hidden-""

Pokaż niezwiązane sieciowe grupy zabezpieczeń

To zapytanie zwraca sieciowe grupy zabezpieczeń, które nie są skojarzone z interfejsem sieciowym ani podsiecią.

Resources
| where type =~ "microsoft.network/networksecuritygroups" and isnull(properties.networkInterfaces) and isnull(properties.subnets)
| project name, resourceGroup
| sort by name asc
az graph query -q "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc"

Wyświetlanie listy alertów usługi Azure Monitor uporządkowanych według ważności

To zapytanie używa alertsmanagementresources tabeli do zwracania alertów usługi Azure Monitor uporządkowanych według ważności.

alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity)
| summarize AlertsCount = count() by Severity
az graph query -q "alertsmanagementresources | where type =~ 'microsoft.alertsmanagement/alerts' | where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now() | project Severity = tostring(properties.essentials.severity) | summarize AlertsCount = count() by Severity"

Wyświetlanie listy alertów usługi Azure Monitor uporządkowanych według ważności i stanu alertu

To zapytanie używa alertsmanagementresources tabeli do zwracania alertów usługi Azure Monitor uporządkowanych według ważności i stanu alertu.

alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity), AlertState = tostring(properties.essentials.alertState)
| summarize AlertsCount = count() by Severity, AlertState
az graph query -q "alertsmanagementresources | where type =~ 'microsoft.alertsmanagement/alerts' | where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now() | project Severity = tostring(properties.essentials.severity), AlertState = tostring(properties.essentials.alertState) | summarize AlertsCount = count() by Severity, AlertState"

Wyświetlanie listy alertów usługi Azure Monitor uporządkowanych według ważności, monitorowania usługi i docelowego typu zasobu

To zapytanie używa alertsmanagementresources tabeli do zwracania alertów usługi Azure Monitor uporządkowanych według ważności, monitorowania usługi i docelowego typu zasobu.

alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity),
MonitorCondition = tostring(properties.essentials.monitorCondition),
ObjectState = tostring(properties.essentials.alertState),
MonitorService = tostring(properties.essentials.monitorService),
AlertRuleId = tostring(properties.essentials.alertRule),
SignalType = tostring(properties.essentials.signalType),
TargetResource = tostring(properties.essentials.targetResourceName),
TargetResourceType = tostring(properties.essentials.targetResourceName), id
| summarize AlertsCount = count() by Severity, MonitorService , TargetResourceType
az graph query -q "alertsmanagementresources | where type =~ 'microsoft.alertsmanagement/alerts' | where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now() | project Severity = tostring(properties.essentials.severity), MonitorCondition = tostring(properties.essentials.monitorCondition), ObjectState = tostring(properties.essentials.alertState), MonitorService = tostring(properties.essentials.monitorService), AlertRuleId = tostring(properties.essentials.alertRule), SignalType = tostring(properties.essentials.signalType), TargetResource = tostring(properties.essentials.targetResourceName), TargetResourceType = tostring(properties.essentials.targetResourceName), id | summarize AlertsCount = count() by Severity, MonitorService , TargetResourceType"

Następne kroki

  • Dowiedz się więcej o języku zapytań.
  • Dowiedz się więcej o sposobie eksplorowania zasobów.
  • Zobacz przykłady zapytań zaawansowanych.