Exemplos de consulta do Starter Resource Graph
O primeiro passo para compreender as consultas com Azure Resource Graph é obter uma compreensão básica da Linguagem de Consulta. Se você ainda não está familiarizado com a Kusto Query Language (KQL), é recomendável revisar o tutorial do KQL para entender como compor solicitações para os recursos que você está procurando.
Este artigo usa as seguintes consultas iniciais:
- Contar recursos do Azure
- Contar recursos do Cofre da Chave
- Listar recursos ordenados por nome
- Mostrar todas as máquinas virtuais ordenadas por nome em ordem descendente
- Mostrar as primeiras cinco máquinas virtuais por nome e por tipo de SO
- Contar máquinas virtuais por tipo de SO
- Mostrar recursos que contêm armazenamento
- Listar todas as sub-redes de rede virtual do Azure
- Listar todos os endereços IP públicos
- Contar recursos que tenham endereços IP configurados por subscrição
- Listar recursos com um valor de etiqueta específico
- Listar todas as contas de armazenamento com um valor de etiqueta específico
- Listar todas as tags e seus valores
- Mostrar grupos de segurança de rede não associados
- Listar alertas do Azure Monitor ordenados por gravidade
- Listar alertas do Azure Monitor ordenados por gravidade e estado de alerta
- Listar alertas do Azure Monitor ordenados por gravidade, serviço de monitoramento e tipo de recurso de destino
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Suporte de idiomas
A CLI do Azure (por meio de uma extensão) e o Azure PowerShell (por meio de um módulo) suportam o Azure Resource Graph. Antes de executar qualquer uma das seguintes consultas, verifique se o ambiente está pronto. Veja CLI do Azure e Azure PowerShell para obter os passos para instalar e validar o seu ambiente shell escolhido.
Contar recursos do Azure
Esta consulta devolve o número de recursos do Azure que existem nas subscrições às quais tem acesso. Também é uma boa consulta para confirmar que a shell escolhida tem os componentes apropriados do Azure Resource Graph instalados e em condições de funcionamento.
Resources
| summarize count()
Por padrão, a CLI do Azure consulta todas as assinaturas acessíveis, mas você pode especificar o --subscriptions
parâmetro para consultar assinaturas específicas.
az graph query -q "Resources | summarize count()"
Este exemplo usa uma variável para a ID da assinatura.
subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid
Você também pode consultar pelos escopos para grupo de gerenciamento e locatário. Substitua <managementGroupId>
e <tenantId>
pelos seus valores.
az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'
Você também pode usar uma variável para o ID do locatário.
tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid
Contar recursos do Cofre da Chave
Esta consulta usa count
em vez de summarize
contar o número de registros retornados. Apenas os cofres de chaves estão incluídos na contagem.
Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"
Listar recursos ordenados por nome
Esta consulta devolve qualquer tipo de recurso, mas apenas as propriedades nome, tipo e localização. Ela utiliza order by
para ordenar as propriedades pela propriedade nome por ordem ascendente (asc
).
Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"
Mostrar todas as máquinas virtuais ordenadas por nome em ordem descendente
Para listar apenas as máquinas virtuais (que são do tipo Microsoft.Compute/virtualMachines
), podemos corresponder a propriedade tipo nos resultados. À semelhança da consulta anterior, desc
altera order by
para ser descendente. O =~
na correspondência de tipo informa o Resource Graph para não ser sensível a maiúsculas e 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"
Mostrar as primeiras cinco máquinas virtuais por nome e por tipo de SO
Essa consulta é usada top
para recuperar apenas cinco registros correspondentes ordenados por nome. O tipo do recurso do Azure é Microsoft.Compute/virtualMachines
. project
informa o Azure Resource Graph quais as propriedades a incluir.
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"
Contar máquinas virtuais por tipo de SO
Aproveitando a consulta anterior, estamos ainda limitados pelos recursos do Azure do tipo Microsoft.Compute/virtualMachines
, mas já não há limite sobre o número de registros devolvidos.
Em vez disso, utilizamos summarize
e count()
para definir como agrupar e agregar os valores pela propriedade, que, neste exemplo, é properties.storageProfile.osDisk.osType
. Para obter um exemplo do aspeto desta cadeia de caracteres no objeto completo, veja explorar recursos – deteção de máquinas virtuais.
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)"
Uma maneira diferente de escrever a mesma consulta é para extend
uma propriedade e dar-lhe um nome temporário para uso dentro da consulta, neste caso os. os é então usado por summarize
e count()
como no exemplo 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
Esteja ciente de que, embora =~
permita a correspondência não sensível a maiúsculas e minúsculas, a utilização de propriedades (como properties.storageProfile.osDisk.osType) na consulta requer que a utilização de maiúsculas/minúsculas esteja correta. Se a propriedade for o caso incorreto, um valor nulo ou incorreto será retornado e o agrupamento ou resumo estará incorreto.
Mostrar recursos que contêm armazenamento
Em vez de definir explicitamente o tipo a ser correspondido, esta consulta de exemplo localiza qualquer recurso do Azure que contains
o armazenamento de palavras.
Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"
Listar todas as sub-redes de rede virtual do Azure
Esta consulta retorna uma lista de redes virtuais do Azure (VNets), incluindo nomes de sub-rede e prefixos de endereço. Obrigado a Saul Dolgin pela contribuição.
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"
Listar todos os endereços IP públicos
À semelhança da consulta anterior, encontra tudo o que era de um tipo com a palavra publicIPAddresses.
Esta consulta expande esse padrão para incluir apenas resultados onde properties.ipAddressisnotempty
, para retornar apenas o properties.ipAddress e para limit
os resultados pelos 100 principais. Você pode precisar escapar das cotações, dependendo do shell escolhido.
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"
Contar recursos que tenham endereços IP configurados por subscrição
Com a consulta do exemplo anterior e ao adicionar summarize
e count()
, podemos obter uma lista por subscrição dos recursos com endereços IP configurados.
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"
Listar recursos com um valor de etiqueta específico
Podemos limitar os resultados por propriedades que não sejam do tipo de recurso do Azure, como uma etiqueta. Neste exemplo, está a filtrar recursos do Azure com um nome de etiqueta de Ambiente que têm um valor de Interno.
Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"
Também indica as etiquetas que o recurso tem e os seus valores, adicione a propriedade etiquetas à palavra-chave project
.
Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"
Listar todas as contas de armazenamento com um valor de etiqueta específico
Combine a funcionalidade de filtro do exemplo anterior e filtre o tipo de recurso do Azure por tipo de propriedade. Esta consulta também limita a nossa pesquisa para tipos específicos de recursos do Azure com um nome e valor específicos de etiqueta.
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 exemplo utiliza ==
para a correspondência em vez do =~
condicional. ==
é uma correspondência sensível a maiúsculas e minúsculas.
Listar todas as tags e seus valores
Essa consulta lista marcas em grupos de gerenciamento, assinaturas e recursos, juntamente com seus valores.
A consulta primeiro limita a recursos onde tags isnotempty()
, limita os campos incluídos incluindo apenas tags no project
, e mvexpand
extend
para obter os dados emparelhados do pacote de propriedades. Em seguida, ele usa union
para combinar os resultados de ResourceContainers com os mesmos resultados de Resources, dando ampla cobertura para quais tags são buscadas. Por último, limita os resultados a distinct
dados emparelhados e exclui etiquetas ocultas do 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-""
Mostrar grupos de segurança de rede não associados
Essa consulta retorna NSGs (Grupos de Segurança de Rede) que não estão associados a uma interface de rede ou sub-rede.
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"
Listar alertas do Azure Monitor ordenados por gravidade
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
Listar alertas do Azure Monitor ordenados por gravidade e estado de 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
Listar alertas do Azure Monitor ordenados por gravidade, serviço de monitoramento e 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
Próximos passos
- Saiba mais sobre a linguagem de consulta.
- Saiba mais sobre como explorar recursos.
- Veja exemplos de consultas avançadas.