Beispiele für den Einstieg in Resource Graph-Abfragen
Der erste Schritt zum Verstehen von Abfragen mit Azure Resource Graph sind Grundkenntnisse der Abfragesprache. Falls Sie noch nicht mit Kusto Query Language (KQL) vertraut sind, sehen Sie sich das KQL-Tutorial an, um zu erfahren, wie Anforderungen für die gesuchten Ressourcen erstellt werden.
In diesem Artikel werden die folgenden einfachen Abfragen verwendet:
- Anzahl der Azure-Ressourcen
- Anzahl von Key Vault-Ressourcen
- Auflisten von Ressourcen nach Namen sortiert
- Anzeigen aller virtuellen Computer in absteigender Folge nach Namen sortiert
- Anzeigen der ersten fünf virtuellen Computer nach Name und BS-Typ
- Anzahl von virtuellen Computern nach Betriebssystemtyp
- Anzeigen von Ressourcen, die Speicher enthalten
- Auflisten aller Subnetze von virtuellen Azure-Netzwerken
- Liste der öffentlichen IP-Adressen
- Anzahl von Ressourcen, für die IP-Adressen konfiguriert sind, nach Abonnement
- Auflisten von Ressourcen mit einem bestimmten Tagwert
- Auflisten aller Speicherkonten mit einem bestimmten Tagwert
- Auflisten aller Tags und der zugehörigen Werte
- Anzeigen nicht zugeordneter Netzwerksicherheitsgruppen
- Auflisten von Azure Monitor-Warnungen nach Schweregrad
- Auflisten von Azure Monitor-Warnungen nach Schweregrad und Zielressourcentyp
- Auflisten von Warnungen nach Schweregrad, Überwachungsdienst und Zielressourcentyp
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Sprachunterstützung
Azure CLI (über eine Erweiterung) und Azure PowerShell (über ein Modul) unterstützen Azure Resource Graph. Überprüfen Sie vor dem Ausführen der folgenden Abfragen, ob Ihre Umgebung bereit ist. Unter Azure CLI und Azure PowerShell werden die Schritte zum Installieren und Überprüfen der Shellumgebung Ihrer Wahl beschrieben.
Zählen der Azure-Ressourcen
Diese Abfrage gibt die Anzahl der Azure-Ressourcen zurück, die in den Abonnements vorhanden sind, auf die Sie zugreifen können. Sie ist auch eine gute Abfrage, um sicherzustellen, dass für die Shell Ihrer Wahl die entsprechenden Azure Resource Graph-Komponenten installiert und in funktionsfähigem Zustand sind.
Resources
| summarize count()
Standardmäßig fragt die Azure CLI alle zugänglichen Abonnements ab, aber Sie können den --subscriptions
-Parameter angeben, um bestimmte Abonnements abzufragen.
az graph query -q "Resources | summarize count()"
In diesem Beispiel wird eine Variable für die Abonnement-ID verwendet.
subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid
Sie können auch nach den Bereichen für Verwaltungsgruppe und Mandant abfragen. Ersetzen Sie <managementGroupId>
und <tenantId>
durch Ihre eigenen Werte.
az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'
Sie können auch eine Variable für die Mandanten-ID verwenden.
tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid
Anzahl von Key Vault-Ressourcen
Diese Abfrage verwendet count
anstelle von summarize
, um die Anzahl der zurückgegebenen Datensätze zu zählen. In der Anzahl sind nur Schlüsseltresore enthalten.
Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"
Auflisten von Ressourcen, sortiert nach Name
Mit dieser Abfrage werden alle Ressourcentypen, aber nur die Eigenschaften name, type und location zurückgegeben. Sie nutzt order by
, um die Eigenschaften in aufsteigender Reihenfolge (asc
) nach der Eigenschaft name zu sortieren.
Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"
Anzeigen aller virtuellen Computer nach Name in absteigender Reihenfolge
Wenn Sie nur virtuelle Computer (Typ: Microsoft.Compute/virtualMachines
) auflisten möchten, können Sie die Eigenschaft Microsoft.Compute/virtualMachines
in den Ergebnissen zum Abgleich heranziehen. Ähnelt der vorherigen Abfrage, desc
ändert order by
in absteigend. =~
in der Typübereinstimmung weist Resource Graph an, die Groß-/Kleinschreibung nicht zu berücksichtigen.
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"
Anzeigen der ersten fünf virtuellen Computer nach Name und Betriebssystemtyp
Diese Abfrage verwendet top
, um nur fünf übereinstimmende Datensätze abzurufen, die nach Namen sortiert werden. Der Typ der Azure-Ressource ist Microsoft.Compute/virtualMachines
. project
teilt Azure Ressource Graph mit, welche Eigenschaften einbezogen werden sollen.
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"
Zählen von virtuellen Computern nach Betriebssystemtyp
Auf der vorherigen Abfrage aufbauend schränken wir immer noch nach Azure-Ressourcen vom Typ Microsoft.Compute/virtualMachines
ein, jedoch nicht mehr die Anzahl der zurückgegebenen Datensätze.
Stattdessen haben wir summarize
und count()
verwendet, um festzulegen, wie Werte nach Eigenschaft gruppiert und aggregiert werden sollen, in diesem Beispiel properties.storageProfile.osDisk.osType
. Ein Beispiel, wie diese Zeichenfolge im vollständigen Objekt aussieht, finden Sie unter Untersuchen virtueller Computer – VM-Ermittlung.
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)"
Eine andere Möglichkeit zum Schreiben derselben Abfrage ist, eine Eigenschaft zu erweitern (extend
) und ihr einen temporären Namen für die Verwendung in der Abfrage zu geben, in diesem Fall os. os wird dann wie im vorherigen Beispiel von summarize
und count()
verwendet.
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)"
Hinweis
Denken Sie daran, dass =~
zwar Übereinstimmungen ohne Berücksichtigung der Groß-/Kleinschreibung ermöglicht, die Verwendung von Eigenschaften (z.B. properties.storageProfile.osDisk.osType) in der Abfrage jedoch die richtige Groß-/Kleinschreibung erfordert. Wenn die Eigenschaft in falscher Groß-/Kleinschreibung vorliegt, wird NULL oder ein falscher Wert zurückgegeben, sodass die Gruppierung oder Zusammenfassung falsch ist.
Anzeigen von Ressourcen mit Speicher
Anstatt explizit den Typ zu definieren, mit dem eine Übereinstimmung vorliegen muss, findet diese Beispielabfrage jede Azure-Ressource, die das Wort storage enthält (contains
).
Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"
Auflisten aller Subnetze von virtuellen Azure-Netzwerken
Diese Abfrage gibt eine Liste der virtuellen Netzwerke (VNets) von Azure zurück, einschließlich der Subnetznamen und Adresspräfixe. Vielen Dank an Saul Dolgin für den Beitrag.
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"
Auflisten aller öffentlichen IP-Adressen
Ähnlich wie bei der vorherigen Abfrage wird jeder Typ mit dem Wort publicIPAddresses gefunden.
Diese Abfrage baut auf diesem Muster auf, um nur Ergebnisse mit properties.ipAddressisnotempty
einzuschließen, nur die properties.ipAddress zurückzugeben und die Ergebnisse auf die obersten 100 zu begrenzen (limit
). Je nach Ihrer ausgewählten Shell müssen Sie Anführungszeichen möglicherweise mit Escapezeichen versehen.
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"
Zählen von Ressourcen, für die IP-Adressen konfiguriert sind (nach Abonnement)
Mithilfe der vorherigen Beispielabfrage und Hinzufügen von summarize
und count()
können wir eine Liste nach Abonnement von Ressourcen mit konfigurierten IP-Adressen abrufen.
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"
Auflisten von Ressourcen mit einem bestimmten Tagwert
Wir können die Ergebnisse nach anderen Eigenschaften als dem Azure-Ressourcentyp einschränken, z.B. einem Tag. In diesem Beispiel filtern wir mit dem Tagnamen Environment mit dem Wert Internal nach Azure-Ressourcen.
Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"
Wenn Sie darüber hinaus die Tags der Ressource und ihre Werte zurückgeben möchten, fügen Sie dem Schlüsselwort project
die Eigenschaft tags hinzu.
Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"
Auflisten aller Speicherkonten mit einem bestimmten Tagwert
Kombinieren Sie die Filterfunktionen des vorherigen Beispiels, und filtern Sie den Azure-Ressourcentyp nach der Eigenschaft type. Diese Abfrage schränkt auch unsere Suche nach spezifischen Azure-Ressourcentypen mit einem bestimmten Tagnamen und -wert ein.
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'"
Hinweis
Dieses Beispiel verwendet ==
für den Abgleich statt der =~
-Bedingung. Bei ==
wird die Groß-/Kleinschreibung bei der Übereinstimmung beachtet.
Auflisten aller Tags und der zugehörigen Werte
Diese Abfrage listet Tags in Verwaltungsgruppen, Abonnements und Ressourcen sowie die zugehörigen Werte auf.
Die Abfrage wird zunächst auf Ressourcen mit nicht leeren Tags (isnotempty()
) beschränkt. Außerdem werden die einbezogenen Felder beschränkt, indem nur tags in project
und mvexpand
eingeschlossen wird, und es wird extend
verwendet, um die Datenpaare aus dem Eigenschaftenbehälter abzurufen. Anschließend wird union
verwendet, um die Ergebnisse aus ResourceContainers mit den gleichen Ergebnissen aus Resources zu kombinieren, wodurch eine umfassende Abdeckung der abgerufenen Tags erzielt wird. Abschließend werden die Ergebnisse auf individuelle (distinct
) Datenpaare beschränkt, und vom System ausgeblendete Tags werden ausgeschlossen.
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-""
Anzeigen nicht zugeordneter Netzwerksicherheitsgruppen
Diese Abfrage gibt Netzwerksicherheitsgruppen (Network Security Groups, NSGs) zurück, die keiner Netzwerkschnittstelle und keinem Subnetz zugeordnet sind.
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"
Auflisten von Azure Monitor-Warnungen nach Schweregrad
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
Auflisten von Azure Monitor-Warnungen nach Schweregrad und Zielressourcentyp
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
Auflisten von Warnungen nach Schweregrad, Überwachungsdienst und Zielressourcentyp
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
Nächste Schritte
- Erfahren Sie mehr über die Abfragesprache.
- Erfahren Sie mehr über das Erkunden von Ressourcen.
- Sehen Sie sich Beispiele für erweiterte Abfragen an.