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 :
- Compter les ressources Azure
- Compter les ressources Key Vault
- Lister les ressources triées par nom
- Afficher toutes les machines virtuelles classées par nom dans l’ordre décroissant
- Afficher les cinq premières machines virtuelles par nom et leur type de système d’exploitation
- Compter les machines virtuelles par type de système d’exploitation
- Afficher les ressources contenant storage
- Répertorier tous les sous-réseaux de réseau virtuel Azure
- Lister toutes les adresses IP publiques
- Compter les ressources avec des adresses IP configurées par abonnement
- Lister les ressources avec une valeur d’étiquette spécifique
- Lister tous les comptes de stockage avec une valeur d’étiquette spécifique
- Lister toutes les étiquettes et leurs valeurs
- Afficher les groupes de sécurité réseau qui ne sont pas associés
- Lister les alertes Azure Monitor par gravité
- Lister les alertes Azure Monitor par gravité et par état d’alerte
- Lister les alertes Azure Monitor par gravité, service de monitoring et type de ressource cible
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. Merci à Saul Dolgin pour sa contribution.
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 se développe sur ce modèle pour inclure uniquement les résultats où properties.ipAddressisnotempty
, en retournant uniquement properties.ipAddress, et en limit
les résultats aux 100 premiers. Vous devrez peut-être 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é
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
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
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
- Découvrez plus en détails le langage de requête.
- Découvrez plus en détails comment explorer des ressources.
- Consulter des exemples de requêtes avancées.