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:

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.

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

Essa consulta usa a alertsmanagementresources tabela para retornar 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
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"

Listar alertas do Azure Monitor ordenados por gravidade e estado de alerta

Essa consulta usa a alertsmanagementresources tabela para retornar 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
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"

Listar alertas do Azure Monitor ordenados por gravidade, serviço de monitoramento e tipo de recurso de destino

Essa consulta usa a alertsmanagementresources tabela para retornar 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
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"

Próximos passos