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:
- Count Azure resources
- Recuento de recursos de Key Vault
- List resources sorted by name
- Mostrar todas las máquinas virtuales ordenadas por nombre de forma descendente
- Show first five virtual machines by name and their OS type
- Count virtual machines by OS type
- Mostrar los recursos que contienen almacenamiento
- Enumeración de todas las subredes de red virtual de Azure
- List all public IP addresses
- Número de recursos que tienen direcciones IP configuradas por suscripción
- Enumerar los recursos con un valor de etiqueta específico
- Enumerar todas las cuentas de almacenamiento con un valor de etiqueta específico
- Enumerar todas las etiquetas y sus valores
- Mostrar grupos de seguridad de red no asociados
- Enumeración de alertas de Azure Monitor ordenadas por gravedad
- Enumeración de alertas de Azure Monitor ordenadas por gravedad y estado de alertas
- Enumerar alertas de Azure Monitor ordenadas por gravedad, servicio de supervisión y tipo de recurso de destino
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. Gracias a Saul Dolgin para la contribució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 según su 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
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
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
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
- Obtenga más información sobre el lenguaje de consulta.
- Obtenga más información sobre cómo explorar recursos.
- Consulte ejemplos de consultas avanzadas.