Exemples de requêtes Resource Graph de démarrage

Pour comprendre comment fonctionnent les requêtes dans Azure Resource Graph, vous devez au préalable vous familiariser avec le langage de requête. Si vous ne connaissez pas bien le langage de requête Kusto (KQL), nous vous recommandons de consulter le tutoriel KQL pour comprendre comment composer des requêtes pour les ressources qui vous intéressent.

Cet article utilise les requêtes de démarrage suivantes :

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Support multilingue

Azure CLI (par le biais d’une extension) et Azure PowerShell (par le biais d’un module) prennent en charge Azure Resource Graph. Avant d’exécuter les requêtes suivantes, vérifiez que votre environnement est prêt. Consultez Azure CLI et Azure PowerShell pour savoir comment installer et valider l’environnement de votre interpréteur de commandes.

Compter les ressources Azure

Cette requête retourne le nombre de ressources Azure présentes dans les abonnements auxquels vous avez accès. Elle permet également de valider que votre interpréteur de commandes dispose des composants Azure Resource Graph appropriés et en état de fonctionnement.

Resources
| summarize count()

Par défaut, Azure CLI interroge tous les abonnements accessibles, mais vous pouvez spécifier le paramètre --subscriptions pour interroger des abonnements spécifiques.

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

Cet exemple utilise une variable pour l’ID d’abonnement.

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

Vous pouvez également effectuer une requête selon les étendues du groupe d’administration et du tenant (locataire). Remplacez <managementGroupId> et <tenantId> par vos valeurs.

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

Vous pouvez également utiliser une variable pour l’ID du locataire.

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

Compter les ressources Key Vault

Cette requête utilise count au lieu de summarize pour compter le nombre d’enregistrements retournés. Seuls les coffres de clés sont inclus dans le décompte.

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

Lister les ressources triées par nom

Cette requête renvoie n’importe quel type de ressource, mais uniquement les propriétés de nom, de type, et d’emplacement. Elle utilise order by pour trier les propriétés par nom dans l’ordre croissant (asc).

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

Afficher toutes les machines virtuelles classées par nom dans l’ordre décroissant

Pour répertorier uniquement les machines virtuelles (qui sont de type Microsoft.Compute/virtualMachines), vous pouvez utiliser la propriété type dans les résultats. Comme dans la requête précédente, order by indique l’ordre de tri (desc spécifie un ordre décroissant). Lors de la mise en correspondance du type, =~ indique à Resource Graph de ne pas respecter la casse.

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"

Afficher les cinq premières machines virtuelles par nom et le type de leur système d’exploitation

Cette requête utilise top pour récupérer uniquement cinq enregistrements correspondants classés par nom. Le type de ressource Azure est Microsoft.Compute/virtualMachines. project indique à Azure Resource Graph les propriétés à inclure.

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"

Compter les machines virtuelles par type de système d’exploitation

Partons de la requête précédente. Nous limitons toujours les ressources Azure à celles de type Microsoft.Compute/virtualMachines, mais nous ne limitons plus le nombre d’enregistrements retournés. Au lieu de cela, nous utilisons summarize et count() pour définir comment regrouper et agréger les valeurs par propriété (properties.storageProfile.osDisk.osType dans cet exemple). Pour voir à quoi ressemble cette chaîne dans l’objet complet, consultez Explorer les ressources - Découverte de machines virtuelles.

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)"

Une autre façon d’écrire la même requête est de extend une propriété et de lui donner un nom temporaire pour une utilisation au sein de la requête (os dans ce cas). os est ensuite utilisé par summarize et count(), comme dans l’exemple précédent.

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)"

Remarque

Même si =~ autorise la mise en correspondance sans respect de la casse, sachez que l’utilisation de propriétés comme properties.storageProfile.osDisk.osType dans la requête nécessite le respect de la casse. Si la casse de la propriété est incorrecte, une valeur null ou incorrecte est retournée et la totalisation ou le regroupement est erroné.

Afficher les ressources contenant du stockage

Au lieu de définir explicitement le type auquel correspondre, cet exemple de requête recherche toute ressource Azure portant contains le mot stockage.

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

Répertorier tous les sous-réseaux de réseau virtuel Azure

Cette requête retourne une liste de réseaux virtuels (VNets) Azure, incluant les noms et les préfixes d’adresses de sous-réseau.

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"

Lister toutes les adresses IP publiques

Comme dans la requête précédente, nous recherchons toutes les ressources dont le type contient un mot (ici, publicIPAddresses). Cette requête va plus loin en incluant uniquement les résultats où properties.ipAddressisnotempty, en retournant uniquement properties.ipAddress et en limitant (limit) les résultats aux 100 premiers. Vous devrez probablement placer les guillemets dans une séquence d’échappement en fonction de votre interpréteur de commandes.

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"

Compter les ressources avec des adresses IP configurées pour chaque abonnement

Reprenons l’exemple de requête précédent et ajoutons summarize et count() pour obtenir une liste par abonnement des ressources avec des adresses IP configurées.

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"

Lister les ressources avec une valeur d’étiquette spécifique

Nous pouvons limiter les résultats en fonction d’autres propriétés que le type de ressource Azure, notamment une étiquette. Dans cet exemple, nous filtrons les ressources Azure ayant une étiquette nommée environment avec pour valeur internal.

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

Pour savoir également les étiquettes dont dispose la ressource et leurs valeurs, ajoutez la propriété étiquettes au mot-clé project.

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

Lister tous les comptes de stockage avec une valeur d’étiquette spécifique

Combinez la fonctionnalité de filtre de l’exemple précédent, et filtrez le type de ressource Azure en utilisant la propriété type. Cette requête limite également notre recherche à certains types de ressources Azure, qui disposent d’un nom d’étiquette et d’une valeur spécifiques.

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'"

Remarque

Cet exemple utilise une condition == pour la mise en correspondance au lieu de =~. == indique que la mise en correspondance respecte la casse.

Lister toutes les étiquettes et leurs valeurs

Cette requête liste les étiquettes sur les groupes d’administration, les abonnements et les ressources ainsi que leurs valeurs. La requête limite d’abord les résultats aux ressources où les étiquettes sont non vides (isnotempty()), puis limite les champs inclus en incluant uniquement tags dans project, mvexpand et extend pour obtenir les données associées à partir du jeu de propriétés. Elle utilise ensuite union pour combiner les résultats de ResourceContainers aux mêmes résultats de Resources, couvrant largement les étiquettes effectivement extraites. Enfin, elle limite les résultats aux données associées distinct et exclut les étiquettes cachées par le système.

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-""

Afficher les groupes de sécurité réseau qui ne sont pas associés

Cette requête retourne les groupes de sécurité réseau (NSG) qui ne sont pas associés à une interface réseau ou à un sous-réseau.

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"

Lister les alertes Azure Monitor par gravité

Cette requête utilise la table alertsmanagementresources pour retourner les alertes Azure Monitor classées par gravité.

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"

Lister les alertes Azure Monitor par gravité et par état d’alerte

Cette requête utilise la table alertsmanagementresources pour retourner les alertes Azure Monitor classées par gravité et état d’alerte.

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"

Lister les alertes Azure Monitor par gravité, service de monitoring et type de ressource cible

Cette requête utilise la table alertsmanagementresources pour retourner les alertes Azure Monitor classées par gravité, service de monitoring et type de ressource cible.

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"

Étapes suivantes