Obter alterações do recurso
Os recursos mudam ao longo do uso diário, reconfiguração e até mesmo reimplantação. A maioria das mudanças é por design, mas às vezes não é. Pode:
- Descubra quando as alterações foram detetadas numa propriedade do Azure Resource Manager.
- Veja os detalhes da alteração da propriedade.
- Consulte alterações em escala em suas assinaturas, grupo de gerenciamento ou locatário.
Neste artigo, vai aprender a:
- Qual é a aparência do JSON de carga útil.
- Como consultar alterações de recursos por meio do Gráfico de Recursos usando a CLI, o PowerShell ou o portal do Azure.
- Exemplos de consulta e práticas recomendadas para consultar alterações de recursos.
- A análise de alterações usa a funcionalidade Change Ator :
changedBy
: quem iniciou uma alteração no seu recurso, como um ID de aplicativo ou o endereço de e-mail de uma pessoa autorizada.clientType
: Qual cliente fez a alteração, como o portal do Azure.operation
: Qual operação foi chamada, comoMicrosoft.Compute/virtualmachines/write
.
Pré-requisitos
- Para habilitar o Azure PowerShell para consultar o Azure Resource Graph, adicione o módulo.
- Para habilitar a CLI do Azure para consultar o Azure Resource Graph, adicione a extensão.
Compreender as propriedades do evento de alteração
Quando um recurso é criado, atualizado ou excluído, um novo recurso de alteração (Microsoft.Resources/changes
) é criado para estender o recurso modificado e representar as propriedades alteradas. Os registros de alteração devem estar disponíveis em menos de cinco minutos. O exemplo de carga JSON a seguir demonstra as propriedades do recurso de alteração:
{
"targetResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/microsoft.compute/virtualmachines/myVM",
"targetResourceType": "microsoft.compute/virtualmachines",
"changeType": "Update",
"changeAttributes": {
"previousResourceSnapshotId": "11111111111111111111_22222222-3333-aaaa-bbbb-444444444444_5555555555_6666666666",
"newResourceSnapshotId": "33333333333333333333_44444444-5555-ffff-gggg-666666666666_7777777777_8888888888",
"correlationId": "11111111-1111-1111-1111-111111111111",
"changedByType": "User",
"changesCount": 2,
"clientType": "Azure Portal",
"changedBy": "john@contoso.com",
"operation": "microsoft.compute/virtualmachines/write",
"timestamp": "2024-06-12T13:26:17.347+00:00"
},
"changes": {
"properties.provisioningState": {
"newValue": "Succeeded",
"previousValue": "Updating",
"isTruncated": "true"
},
"tags.key1": {
"newValue": "NewTagValue",
"previousValue": "null",
}
}
}
Consulte o guia de referência completo para alterar as propriedades do recurso.
Executar uma consulta
Experimente uma consulta do Gráfico de Recursos baseada em locatário da resourcechanges
tabela. A consulta retorna as cinco primeiras alterações de recurso mais recentes do Azure com a hora de alteração, o tipo de alteração, a ID do recurso de destino, o tipo de recurso de destino e os detalhes da alteração de cada registro de alteração.
# Login first with az login if not using Cloud Shell
# Run Azure Resource Graph query
az graph query -q 'resourcechanges | project properties.changeAttributes.timestamp, properties.changeType, properties.targetResourceId, properties.targetResourceType, properties.changes | limit 5'
Você pode atualizar essa consulta para especificar um nome de coluna mais amigável para a propriedade timestamp .
# Run Azure Resource Graph query with 'extend'
az graph query -q 'resourcechanges | extend changeTime=todatetime(properties.changeAttributes.timestamp) | project changeTime, properties.changeType, properties.targetResourceId, properties.targetResourceType, properties.changes | limit 5'
Para limitar os resultados da consulta às alterações mais recentes, atualize a consulta para order by
a propriedade definida changeTime
pelo usuário.
# Run Azure Resource Graph query with 'order by'
az graph query -q 'resourcechanges | extend changeTime=todatetime(properties.changeAttributes.timestamp) | project changeTime, properties.changeType, properties.targetResourceId, properties.targetResourceType, properties.changes | order by changeTime desc | limit 5'
Você também pode consultar por grupo de gerenciamento ou assinatura com os -ManagementGroup
parâmetros ou -Subscription
, respectivamente.
Nota
Se a consulta não retornar resultados de uma assinatura à qual você já tem acesso, o Search-AzGraph
cmdlet do PowerShell assumirá como padrão assinaturas no contexto padrão.
O Resource Graph Explorer também fornece uma interface limpa para converter os resultados de algumas consultas em um gráfico que pode ser fixado em um painel do Azure.
Consultar alterações de recursos
Com o Gráfico de Recursos, você pode consultar as resourcechanges
tabelas , resourcecontainerchanges
ou healthresourcechanges
para filtrar ou classificar por qualquer uma das propriedades do recurso de alteração. Os exemplos a seguir consultam a resourcechanges
tabela, mas também podem ser aplicados à resourcecontainerchanges
tabela ou healthresourcechanges
.
Nota
Saiba mais sobre os healthresourcechanges
dados na documentação do Project Flash.
Exemplos
Antes de consultar e analisar as alterações em seus recursos, revise as seguintes práticas recomendadas.
- Consulte eventos de alteração durante uma janela de tempo específica e avalie os detalhes da alteração.
- Essa consulta funciona melhor durante o gerenciamento de incidentes para entender as alterações potencialmente relacionadas.
- Mantenha um banco de dados de gerenciamento de configuração (CMDB) atualizado.
- Em vez de atualizar todos os recursos e seus conjuntos de propriedades completos em uma frequência agendada, você recebe apenas as alterações.
- Entenda quais outras propriedades foram alteradas quando um recurso altera o estado de conformidade.
- A avaliação dessas propriedades extras pode fornecer informações sobre outras propriedades que talvez precisem ser gerenciadas por meio de uma definição de Política do Azure.
- A ordem dos comandos de consulta é importante. Nos exemplos a seguir, o
order by
deve vir antes dolimit
comando.- O
order by
comando ordena os resultados da consulta pelo tempo de alteração. - Em
limit
seguida, o comando limita os resultados ordenados para garantir que você obtenha os cinco resultados mais recentes.
- O
- O que significa Desconhecido ?
- Desconhecido é exibido quando a alteração aconteceu em um cliente que não é reconhecido. Os clientes são reconhecidos com base no agente do usuário e no ID do aplicativo cliente associados à solicitação de alteração original.
- O que significa Sistema ?
- O sistema é exibido como um
changedBy
valor quando ocorre uma alteração em segundo plano que não foi correlacionada com nenhuma ação direta do usuário.
- O sistema é exibido como um
Todas as alterações no último período de 24 horas
resourcechanges
| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),
changeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId,
changedProperties = properties.changes, changeCount = properties.changeAttributes.changesCount
| where changeTime > ago(1d)
| order by changeTime desc
| project changeTime, targetResourceId, changeType, correlationId, changeCount, changedProperties
Recursos excluídos em um grupo de recursos específico
resourcechanges
| where resourceGroup == "myResourceGroup"
| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),
changeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId
| where changeType == "Delete"
| order by changeTime desc
| project changeTime, resourceGroup, targetResourceId, changeType, correlationId
Alterações em um valor de propriedade específico
resourcechanges
| extend provisioningStateChange = properties.changes["properties.provisioningState"], changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType)
| where isnotempty(provisioningStateChange)and provisioningStateChange.newValue == "Succeeded"
| order by changeTime desc
| project changeTime, targetResourceId, changeType, provisioningStateChange.previousValue, provisioningStateChange.newValue
Alterações nos últimos sete dias por quem e qual cliente e encomendado por contagem
resourcechanges
| extend changeTime = todatetime(properties.changeAttributes.timestamp),
targetResourceId = tostring(properties.targetResourceId),
changeType = tostring(properties.changeType), changedBy = tostring(properties.changeAttributes.changedBy),
changedByType = properties.changeAttributes.changedByType,
clientType = tostring(properties.changeAttributes.clientType)
| where changeTime > ago(7d)
| project changeType, changedBy, changedByType, clientType
| summarize count() by changedBy, changeType, clientType
| order by count_ desc
Alterações no tamanho da máquina virtual
resourcechanges
| extend vmSize = properties.changes["properties.hardwareProfile.vmSize"], changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType)
| where isnotempty(vmSize)
| order by changeTime desc
| project changeTime, targetResourceId, changeType, properties.changes, previousSize = vmSize.previousValue, newSize = vmSize.newValue
Contagem de alterações por tipo de alteração e nome da subscrição
resourcechanges
| extend changeType = tostring(properties.changeType), changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceType=tostring(properties.targetResourceType)
| summarize count() by changeType, subscriptionId
| join (resourcecontainers | where type=='microsoft.resources/subscriptions' | project SubscriptionName=name, subscriptionId) on subscriptionId
| project-away subscriptionId, subscriptionId1
| order by count_ desc
Últimas alterações de recursos para recursos criados com uma determinada tag
resourcechanges
|extend targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType), createTime = todatetime(properties.changeAttributes.timestamp)
| where createTime > ago(7d) and changeType == "Create" or changeType == "Update" or changeType == "Delete"
| project targetResourceId, changeType, createTime
| join ( resources | extend targetResourceId=id) on targetResourceId
| where tags ['Environment'] =~ 'prod'
| order by createTime desc
| project createTime, id, resourceGroup, type