Compreender a linguagem de consulta do Azure Resource Graph
A linguagem de consulta para o Azure Resource Graph dá suporte a muitos operadores e funções. Cada um funciona e opera com base na Kusto Query Language (KQL). Para saber mais sobre a linguagem de consulta utilizada pelo Resource Graph, comece com o tutorial do KQL.
Este artigo aborda os componentes de linguagem suportados pelo Resource Graph:
- Compreender a linguagem de consulta do Azure Resource Graph
Tabelas do Gráfico de Recursos
O Gráfico de Recursos fornece várias tabelas para os dados que armazena sobre os tipos de recursos do Azure Resource Manager e suas propriedades. As tabelas do Gráfico de Recursos podem ser usadas com o join
operador para obter propriedades de tipos de recursos relacionados.
As tabelas do Resource Graph suportam os join
sabores:
Tabela do Gráfico de Recursos | Podem join outras tabelas? |
Description |
---|---|---|
AssessoramentoRecursos | Sim | Inclui recursos relacionados ao Microsoft.Advisor . |
AlertasGestãoRecursos | Sim | Inclui recursos relacionados ao Microsoft.AlertsManagement . |
AppServiceRecursos | Sim | Inclui recursos relacionados ao Microsoft.Web . |
AutorizaçãoRecursos | Sim | Inclui recursos relacionados ao Microsoft.Authorization . |
AWSResources | Sim | Inclui recursos relacionados ao Microsoft.AwsConnector . |
AzureBusinessContinuityRecursos | Sim | Inclui recursos relacionados ao Microsoft.AzureBusinessContinuity . |
CaosRecursos | Sim | Inclui recursos relacionados ao Microsoft.Chaos . |
ComunidadeGaleria de Recursos | Sim | Inclui recursos relacionados ao Microsoft.Compute . |
Recursos de computação | Sim | Inclui recursos relacionados a Conjuntos de Dimensionamento de Microsoft.Compute Máquinas Virtuais. |
DesktopVirtualizaçãoRecursos | Sim | Inclui recursos relacionados ao Microsoft.DesktopVirtualization . |
DnsRecursos | Sim | Inclui recursos relacionados ao Microsoft.Network . |
EdgeOrderResources | Sim | Inclui recursos relacionados ao Microsoft.EdgeOrder . |
ElasticsanResources | Sim | Inclui recursos relacionados ao Microsoft.ElasticSan . |
ExtendedLocationRecursos | Sim | Inclui recursos relacionados ao Microsoft.ExtendedLocation . |
RecursosRecurso | Sim | Inclui recursos relacionados ao Microsoft.Features . |
GuestConfigurationRecursos | Sim | Inclui recursos relacionados ao Microsoft.GuestConfiguration . |
HealthResourceChanges | Sim | Inclui recursos relacionados ao Microsoft.Resources . |
Recursos para a saúde | Sim | Inclui recursos relacionados ao Microsoft.ResourceHealth . |
InsightsRecursos | Sim | Inclui recursos relacionados ao Microsoft.Insights . |
IoTSecurityResources | Sim | Inclui recursos relacionados a Microsoft.IoTSecurity e Microsoft.IoTFirmwareDefense . |
KubernetesConfiguraçãoRecursos | Sim | Inclui recursos relacionados ao Microsoft.KubernetesConfiguration . |
KustoRecursos | Sim | Inclui recursos relacionados ao Microsoft.Kusto . |
ManutençãoRecursos | Sim | Inclui recursos relacionados ao Microsoft.Maintenance . |
Serviços gerenciadosRecursos | Sim | Inclui recursos relacionados ao Microsoft.ManagedServices . |
MigrarRecursos | Sim | Inclui recursos relacionados ao Microsoft.OffAzure . |
Recursos de rede | Sim | Inclui recursos relacionados ao Microsoft.Network . |
Recursos Orbitais | Sim | Inclui recursos relacionados ao Microsoft.Orbital . |
PatchAssessmentRecursos | Sim | Inclui recursos relacionados à avaliação Microsoft.Compute de patches das Máquinas Virtuais do Azure e Microsoft.HybridCompute ao . |
PatchInstallationResources | Sim | Inclui recursos relacionados à instalação Microsoft.Compute do patch de Máquinas Virtuais do Azure e Microsoft.HybridCompute ao . |
PolíticaRecursos | Sim | Inclui recursos relacionados ao Microsoft.PolicyInsights . |
RecuperaçãoServiçosRecursos | Sim | Inclui recursos relacionados a Microsoft.DataProtection e Microsoft.RecoveryServices . |
ResourceChanges | Sim | Inclui recursos relacionados ao Microsoft.Resources . |
ResourceContainerChanges | Sim | Inclui recursos relacionados ao Microsoft.Resources . |
ResourceContainers | Sim | Inclui tipos de recursos e dados do grupo de gerenciamento (Microsoft.Management/managementGroups ), da assinatura (Microsoft.Resources/subscriptions ) e do grupo de recursos (Microsoft.Resources/subscriptions/resourcegroups ). |
Recursos | Sim | A tabela padrão se uma tabela não estiver definida na consulta. A maioria dos tipos de recursos e propriedades do Resource Manager estão aqui. |
Recursos de Segurança | Sim | Inclui recursos relacionados ao Microsoft.Security . |
ServiceFabricRecursos | Sim | Inclui recursos relacionados ao Microsoft.ServiceFabric . |
ServiceHealthRecursos | Sim | Inclui recursos relacionados ao Microsoft.ResourceHealth/events . |
SpotResources | Sim | Inclui recursos relacionados ao Microsoft.Compute . |
SuporteRecursos | Sim | Inclui recursos relacionados ao Microsoft.Support . |
TagsRecursos | Sim | Inclui recursos relacionados ao Microsoft.Resources/tagnamespaces . |
Para obter uma lista de tabelas que inclui tipos de recursos, vá para Tabela do Gráfico de Recursos do Azure e referência de tipo de recurso.
Nota
Resources
é a tabela padrão. Ao consultar a Resources
tabela, não é necessário fornecer o nome da tabela, a menos que join
ou union
sejam usados. Mas a prática recomendada é sempre incluir a tabela inicial na consulta.
Para descobrir quais tipos de recursos estão disponíveis em cada tabela, use o Resource Graph Explorer no portal. Como alternativa, use uma consulta como <tableName> | distinct type
para obter uma lista de tipos de recursos suportados pela tabela do Gráfico de Recursos que existem em seu ambiente.
A consulta a seguir mostra um arquivo join
. O resultado da consulta combina as colunas e todos os nomes de colunas duplicados da tabela associada, ResourceContainers neste exemplo, são acrescentados com 1. Como a tabela ResourceContainers tem tipos para assinaturas e grupos de recursos, qualquer tipo pode ser usado para ingressar no recurso da Resources
tabela.
Resources
| join ResourceContainers on subscriptionId
| limit 1
A consulta a seguir mostra um uso mais complexo do join
. Primeiro, a consulta usa project
para obter os campos do tipo de recurso Cofre da Resources
Chave do Azure. A próxima etapa usa join
para mesclar os resultados com ResourceContainers onde o tipo é uma assinatura em uma propriedade que está tanto na primeira tabela project
quanto na tabela project
associada. A renomeação de join
campo evita adicioná-lo como nome1 , uma vez que a propriedade já está projetada a partir de Resources
. O resultado da consulta é um cofre de chave única exibindo o tipo, o nome, o local e o grupo de recursos do cofre de chaves, juntamente com o nome da assinatura em que ele está.
Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1
Nota
Ao limitar os join
resultados com project
, a propriedade usada por join
para relacionar as duas tabelas, subscriptionId no exemplo acima, deve ser incluída em project
.
Propriedades estendidas
Como um recurso de visualização , alguns dos tipos de recursos no Gráfico de Recursos têm mais propriedades relacionadas ao tipo disponíveis para consulta além das propriedades fornecidas pelo Gerenciador de Recursos do Azure. Esse conjunto de valores, conhecido como propriedades estendidas, existe em um tipo de recurso suportado no properties.extended
. Para mostrar tipos de recursos com propriedades estendidas, use a seguinte consulta:
Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc
Exemplo: Obter contagem de máquinas virtuais por instanceView.powerState.code
:
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
Elementos de linguagem personalizados do Gráfico de Recursos
Sintaxe de consulta compartilhada (visualização)
Como um recurso de visualização, uma consulta compartilhada pode ser acessada diretamente em uma consulta do Gráfico de Recursos. Esse cenário torna possível criar consultas padrão como consultas compartilhadas e reutilizá-las. Para chamar uma consulta compartilhada dentro de uma consulta do Gráfico de Recursos, use a {{shared-query-uri}}
sintaxe. O URI da consulta compartilhada é a ID do recurso da consulta compartilhada na página Configurações dessa consulta. Neste exemplo, nosso URI de consulta compartilhada é /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS
.
Esse URI aponta para a assinatura, o grupo de recursos e o nome completo da consulta compartilhada que queremos referenciar em outra consulta. Esta consulta é a mesma criada em Tutorial: Criar e partilhar uma consulta.
Nota
Não é possível salvar uma consulta que faça referência a uma consulta compartilhada como uma consulta compartilhada.
Exemplo 1: Use apenas a consulta compartilhada:
Os resultados desta consulta do Gráfico de Recursos são os mesmos que a consulta armazenada na consulta compartilhada.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
Exemplo 2: Inclua a consulta compartilhada como parte de uma consulta maior:
Essa consulta primeiro usa a consulta compartilhada e, em seguida, usa limit
para restringir ainda mais os resultados.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'
Elementos de linguagem KQL suportados
O Resource Graph suporta um subconjunto de tipos de dados KQL, funções escalares, operadores escalares e funções de agregação. Operadores tabulares específicos são suportados pelo Resource Graph, alguns dos quais têm comportamentos diferentes.
Operadores tabulares/de nível superior suportados
Aqui está a lista de operadores tabulares KQL suportados pelo Resource Graph com exemplos específicos:
KQL | Consulta de exemplo do Gráfico de Recursos | Notas |
---|---|---|
count | Contar cofres de chaves | |
distinto | Mostrar recursos que contêm armazenamento | |
estender | Contar máquinas virtuais por tipo de SO | |
aderir | Cofre de chaves com nome de subscrição | Junte-se aos sabores suportados: innerunique, inner, leftouter e fullouter. Limite de três join em uma única consulta, uma das quais pode ser uma tabela join cruzada. Se todo o uso de tabelas join cruzadas estiver entre Resource e ResourceContainers, três tabelas join cruzadas serão permitidas. Estratégias de associação personalizadas, como associação de transmissão, não são permitidas. Para quais tabelas podem usar join , vá para Tabelas do Gráfico de Recursos. |
limit | Listar todos os endereços IP públicos | Sinónimo de take . Não funciona com Skip. |
MVEXPAND | Operador legado, use mv-expand em vez disso. RowLimit máximo de 2.000. O padrão é 128. |
|
mv-expandir | Listar o Azure Cosmos DB com locais de gravação específicos | RowLimit máximo de 2.000. O padrão é 128. Limite de 3 mv-expand em uma única consulta. |
order | Listar recursos ordenados por nome | Sinónimo de sort |
analisar | Obter redes virtuais e sub-redes de interfaces de rede | É ideal acessar as propriedades diretamente se elas existirem, em vez de usar parse o . |
projeto | Listar recursos ordenados por nome | |
projeto-fora | Remover colunas dos resultados | |
sort | Listar recursos ordenados por nome | Sinónimo de order |
resumir | Contar recursos do Azure | Apenas primeira página simplificada |
tomar | Listar todos os endereços IP públicos | Sinónimo de limit . Não funciona com Skip. |
Início | Mostrar as primeiras cinco máquinas virtuais por nome e por tipo de SO | |
União | Combinar resultados de duas consultas em um único resultado | Mesa única permitida: | union [kind= inner|outer] [withsource=ColumnName] Table . Limite de três union pernas em uma única consulta. Não é permitida a resolução difusa de mesas de union perna. Pode ser usado dentro de uma única tabela ou entre as tabelas Resources e ResourceContainers . |
em que | Mostrar recursos que contêm armazenamento |
Há um limite padrão de três join
e três mv-expand
operadores em uma única consulta do SDK do Resource Graph. Pode solicitar um aumento destes limites para o seu inquilino através da Ajuda + suporte.
Para dar suporte à experiência do portal Open Query, o Azure Resource Graph Explorer tem um limite global mais alto do que o SDK do Resource Graph.
Nota
Não é possível fazer referência a uma tabela como tabela correta várias vezes, o que excede o limite de 1. Se você fizer isso, você receberá um erro com o código DisallowedMaxNumberOfRemoteTables.
Âmbito de consulta
O escopo das assinaturas ou grupos de gerenciamento dos quais os recursos são retornados por uma consulta assume como padrão uma lista de assinaturas com base no contexto do usuário autorizado. Se um grupo de gerenciamento ou uma lista de assinaturas não estiver definido, o escopo da consulta será todos os recursos e incluirá recursos delegados do Azure Lighthouse .
A lista de assinaturas ou grupos de gerenciamento a serem consultados pode ser definida manualmente para alterar o escopo dos resultados. Por exemplo, a propriedade REST API managementGroups
usa a ID do grupo de gerenciamento, que é diferente do nome do grupo de gerenciamento. Quando managementGroups
especificado, os recursos das primeiras 10.000 assinaturas na hierarquia de grupo de gerenciamento especificada ou sob ela são incluídos. managementGroups
não pode ser usado ao mesmo tempo que subscriptions
o .
Exemplo: Consultar todos os recursos dentro da hierarquia do grupo de gerenciamento nomeado My Management Group
com ID myMG
.
URI da API REST
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
Corpo do Pedido
{ "query": "Resources | summarize count()", "managementGroups": ["myMG"] }
O AuthorizationScopeFilter
parâmetro permite listar atribuições de Política do Azure e atribuições de função de controle de acesso baseado em função do Azure (Azure RBAC) na AuthorizationResources
tabela que são herdadas de escopos superiores. O AuthorizationScopeFilter
parâmetro aceita os seguintes valores para as PolicyResources
tabelas e AuthorizationResources
:
- AtScopeAndBelow (padrão, se não especificado): retorna atribuições para o escopo determinado e todos os escopos filho.
- AtScopeAndAbove: retorna atribuições para o escopo determinado e todos os escopos pai, mas não escopos filho.
- AtScopeAboveAndBelow: Retorna atribuições para o escopo determinado, todos os escopos pai e todos os escopos filho.
- AtScopeExact: Retorna atribuições apenas para o escopo determinado, nenhum escopo pai ou filho está incluído.
Nota
Para usar o AuthorizationScopeFilter
parâmetro, certifique-se de usar a versão 2021-06-01-preview ou posterior da API em suas solicitações.
Exemplo: Obtenha todas as atribuições de política no grupo de gerenciamento myMG e nos escopos Raiz do Locatário (pai).
URI da API REST
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
Solicitar amostra do corpo
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "managementGroups": ["myMG"] }
Exemplo: obtenha todas as atribuições de política nos escopos de assinatura, grupo de gerenciamento e raiz do locatário mySubscriptionId .
URI da API REST
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
Solicitar amostra do corpo
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "subscriptions": ["mySubscriptionId"] }
Carateres de escape
Alguns nomes de propriedade, como aqueles que incluem um .
ou $
, devem ser encapsulados ou escapados na consulta ou o nome da propriedade é interpretado incorretamente e não fornece os resultados esperados.
Ponto (
.
): Envolva o nome['propertyname.withaperiod']
da propriedade usando colchetes.Exemplo de consulta que encapsula a propriedade odata.type:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
Cifrão (
$
): Fuja do caractere no nome da propriedade. O caractere de escape usado depende do shell que executa o Resource Graph.Bash: Use uma barra invertida (
\
) como o caractere de fuga.Exemplo de consulta que escapa da propriedade $type em Bash:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
cmd: Não escape do caractere cifrão (
$
).PowerShell: Use um backtick (
`
) como o caractere de escape.Exemplo de consulta que escapa da propriedade $type no PowerShell:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
Próximos passos
- Linguagem de consulta do Azure Resource Graph: Consultas iniciais e consultas avançadas.
- Saiba mais sobre como explorar os recursos do Azure.