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:

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.

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, um nur 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

Diese Abfrage verwendet die alertsmanagementresources-Tabelle, um Azure Monitor-Warnungen zurückzugeben, die nach Schweregrad sortiert sind.

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"

Auflisten von Azure Monitor-Warnungen nach Schweregrad und Zielressourcentyp

Diese Abfrage verwendet die alertsmanagementresources-Tabelle, um Azure Monitor-Warnungen zurückzugeben, die nach Schweregrad und Warnungszustand sortiert sind.

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"

Auflisten von Warnungen nach Schweregrad, Überwachungsdienst und Zielressourcentyp

Diese Abfrage verwendet die alertsmanagementresources-Tabelle, um Azure Monitor-Warnungen zurückzugeben, die nach Schweregrad, Überwachungsdienst und Zielressourcentyp sortiert sind.

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"

Nächste Schritte