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:
- Liczba zasobów platformy Azure
- Liczba zasobów usługi Key Vault
- Lista zasobów posortowana według nazwy
- Pokaż wszystkie maszyny wirtualne uporządkowane według nazwy w kolejności malejącej
- Pokaż pierwsze pięć maszyn wirtualnych według nazwy i ich typu systemu operacyjnego
- Liczba maszyn wirtualnych według typu systemu operacyjnego
- Pokaż zasoby, które zawierają magazyn
- Wyświetlanie listy wszystkich podsieci sieci wirtualnej platformy Azure
- Lista wszystkich publicznych adresów IP
- Liczba zasobów ze skonfigurowanymi adresami IP według subskrypcji
- Lista zasobów z konkretną wartością tagu
- Lista wszystkich kont magazynu z konkretną wartością tagu
- Wyświetlanie listy wszystkich tagów i ich wartości
- Pokaż niezwiązane sieciowe grupy zabezpieczeń
- Wyświetlanie listy alertów usługi Azure Monitor uporządkowanych według ważności
- Wyświetlanie listy alertów usługi Azure Monitor uporządkowanych według ważności i stanu alertu
- Wyświetlanie listy alertów usługi Azure Monitor uporządkowanych według ważności, monitorowania usługi i docelowego typu zasobu
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. Dziękujemy Saulowi Dolginowi za wkład.
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 project
obiekcie i i mvexpand
extend
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
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
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
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