Ejemplos de consultas de inicio de Resource Graph

El primer paso para entender las consultas con Azure Resource Graph es el reconocimiento básico del lenguaje de consultas. Si aún no está familiarizado con el lenguaje de consulta kusto (KQL),se recomienda revisar el tutorial de KQL para comprender cómo redactar solicitudes para los recursos que busca.

En este artículo se usan las siguientes consultas de inicio:

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Compatibilidad con idiomas

La CLI de Azure (mediante una extensión) y Azure PowerShell (mediante un módulo) admiten Azure Resource Graph. Antes de ejecutar cualquiera de las siguientes consultas, compruebe que el entorno está listo. Consulte la CLI de Azure y Azure PowerShell para conocer los pasos para instalar y validar el entorno de shell que prefiera.

Count Azure resources

Esta consulta devuelve el número de recursos de Azure que existen en las suscripciones a las que tiene acceso. También es una buena consulta para validar que el shell elegido tiene los componentes apropiados de Azure Resource Graph instalados y en funcionamiento.

Resources
| summarize count()

De forma predeterminada, la CLI de Azure consulta todas las suscripciones accesibles, pero puede especificar el --subscriptions parámetro para consultar suscripciones específicas.

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

En este ejemplo se usa una variable para el identificador de suscripción.

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

También puede consultar por los ámbitos del grupo de administración y del inquilino. Reemplace <managementGroupId> y <tenantId> con sus valores.

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

También puede usar una variable para el id. del inquilino.

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

Recuento de recursos de Key Vault

Esta consulta utiliza count en lugar de summarize para contar el número de registros devueltos. Solo se incluyen los almacenes de claves en el recuento.

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

List resources sorted by name

Esta consulta devuelve cualquier tipo de recurso, pero solo las propiedades name (nombre), type (tipo) y location (ubicación). Usa order by para ordenar las propiedades por la propiedad order by en orden ascendente (asc).

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

Show all virtual machines ordered by name in descending order

Para enumerar solo las máquinas virtuales (que son de tipo Microsoft.Compute/virtualMachines), podemos hacer coincidir la propiedad Microsoft.Compute/virtualMachines en los resultados. De forma similar a la consulta anterior, desc cambia el order by a descendente. =~ en el tipo de coincidencia indica a Resource Graph que distinga mayúsculas de minúsculas.

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"

Show first five virtual machines by name and their OS type

En esta consulta se usa top para recuperar solo cinco registros coincidentes que se ordenan por nombre. El tipo de recurso de Azure es Microsoft.Compute/virtualMachines. project indica a Azure Resource Graph qué propiedades se incluirán.

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"

Count virtual machines by OS type

Basado en la consulta anterior, todavía se limita por los recursos de Azure de tipo Microsoft.Compute/virtualMachines, pero ya no se limita el número de registros devueltos. En su lugar, hemos usado summarize y count() para definir cómo agrupar y agregar los valores por propiedad, que en este ejemplo es properties.storageProfile.osDisk.osType. Para un ejemplo del aspecto de esta cadena en el objeto completo, vea explorar recursos: detección de máquinas virtuales.

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

Otra forma de escribir la misma consulta consiste en aplicar extend a una propiedad y asignarle un nombre temporal para su uso dentro de la consulta, en este caso os. Después os se usa en summarize y count() como en el ejemplo anterior.

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

Nota:

Tenga en cuenta que mientras =~ permite el uso de búsqueda de coincidencias sin distinguir mayúsculas de minúsculas, el uso de las propiedades (como properties.storageProfile.osDisk.osType) en la consulta distingue mayúsculas de minúsculas. Si la propiedad es el caso incorrecto, se devuelve un valor Null o incorrecto y la agrupación o el resumen serían incorrectos.

Show resources that contain storage

En lugar de definir explícitamente el tipo de coincidencia, esta consulta de ejemplo encontrará cualquier recurso de Azure que contains la palabra storage.

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

Enumeración de todas las subredes de red virtual de Azure

Esta consulta devuelve una lista de redes virtuales (VNet) de Azure, incluidos los nombres de subred y los prefijos de dirección.

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"

List all public IP addresses

De forma similar a la consulta anterior, encontrará todos los tipos que contienen la palabra publicIPAddresses. Esta consulta amplía ese patrón para incluir solo los resultados donde properties.ipAddressisnotempty, para devolver solo properties.ipAddress y para definir limit a fin de limitar los resultados a los 100 primeros. Es posible que sea necesario escapar las comillas en función del shell elegido.

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"

Count resources that have IP addresses configured by subscription

Con la consulta de ejemplo anterior y agregando summarize y count(), podemos obtener una lista por suscripción de recursos con direcciones IP configuradas.

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"

List resources with a specific tag value

Podemos limitar los resultados por propiedades que no sean del tipo de recurso de Azure, como una etiqueta. En este ejemplo, se filtran los recursos de Azure con el nombre de etiqueta Environment que tienen un valor de Internal.

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

Para proporcionar también las etiquetas del recurso y sus valores, agregue la propiedad tags a la palabra clave project.

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

List all storage accounts with specific tag value

Combina la funcionalidad de filtro del ejemplo anterior y filtra el tipo de recurso de Azure por la propiedad type. Esta consulta también limita la búsqueda para determinados tipos de recursos de Azure con un valor y nombre de etiqueta específicos.

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

Nota:

Este ejemplo utiliza == para buscar coincidencias en lugar del condicional =~. == es una coincidencia que distingue mayúsculas de minúsculas.

Enumerar todas las etiquetas y sus valores

En esta consulta se enumeran las etiquetas de los grupos de administración, las suscripciones y los recursos, junto con sus valores. En primer lugar, la consulta se limita a los recursos con etiquetas isnotempty() y restringe los campos incluidos mediante el uso de las isnotempty() en project, mvexpand y extend para obtener los datos emparejados del contenedor de propiedades. A continuación, usa union para combinar los resultados de union con los mismos resultados de Resources, lo que proporciona una amplia cobertura para captura de etiquetas. Por último, limita los resultados a datos emparejados de distinct y excluye las etiquetas ocultas por el sistema.

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

Visualización de los grupos de seguridad de red sin asociar

Esta consulta devuelve los grupos de seguridad de red que no están asociados a una interfaz de red o subred.

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"

Enumeración de alertas de Azure Monitor ordenadas por gravedad

Esta consulta usa la tabla alertsmanagementresources para devolver alertas de Azure Monitor ordenadas por gravedad.

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"

Enumeración de alertas de Azure Monitor ordenadas por gravedad y estado de alertas

Esta consulta usa la tabla alertsmanagementresources para devolver alertas de Azure Monitor ordenadas por gravedad y el estado de la alerta.

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"

Enumerar alertas de Azure Monitor ordenadas por gravedad, servicio de supervisión y tipo de recurso de destino

Esta consulta usa la tabla alertsmanagementresources para devolver alertas de Azure Monitor ordenadas por gravedad, servicio de supervisión y tipo de recurso de destino.

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"

Pasos siguientes