Hämta resursändringar
Resurser ändras genom daglig användning, omkonfiguration och till och med omdistribution. De flesta ändringar sker avsiktligt, men ibland är det inte det. Du kan:
- se när ändringar har identifierats på en Azure Resource Manager-egenskap
- Visa information om egenskapsändring.
- Fråga efter ändringar i stor skala i dina prenumerationer, hanteringsgrupp eller klientorganisation.
I den här artikel får du lära dig om:
- Hur nyttolastens JSON ser ut.
- Så här frågar du resursändringar via Resource Graph med hjälp av antingen CLI, PowerShell eller Azure-portalen.
- Frågeexempel och metodtips för att fråga efter resursändringar.
- Ändringsanalys använder funktionen Ändra aktör :
changedBy
: Vem som initierade en ändring i resursen, till exempel ett app-ID eller en behörig persons e-postadress.clientType
: Vilken klient som gjorde ändringen, till exempel Azure-portalen.operation
: Vilken åtgärd anropades, till exempelMicrosoft.Compute/virtualmachines/write
.
Förutsättningar
- Om du vill aktivera Azure PowerShell för att fråga Azure Resource Graph lägger du till modulen.
- Om du vill göra så att Azure CLI kan köra frågor mot Azure Resource Graph lägger du till tillägget.
Förstå egenskaper för ändringshändelser
När en resurs skapas, uppdateras eller tas bort skapas en ny ändringsresurs (Microsoft.Resources/changes
) för att utöka den ändrade resursen och representera de ändrade egenskaperna. Ändringsposter ska vara tillgängliga på mindre än fem minuter. I följande exempel visar JSON-nyttolasten egenskaperna för ändringsresursen:
{
"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",
}
}
}
Se den fullständiga referensguiden för att ändra resursegenskaper.
Köra en fråga
Prova en klientbaserad Resource Graph-fråga i resourcechanges
tabellen. Frågan returnerar de första fem senaste Azure-resursändringarna med ändringstid, ändringstyp, målresurs-ID, målresurstyp och ändringsinformation för varje ändringspost.
# 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'
Du kan uppdatera den här frågan för att ange ett mer användarvänligt kolumnnamn för tidsstämpelegenskapen.
# 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'
Om du vill begränsa frågeresultatet till de senaste ändringarna uppdaterar du frågan till order by
den användardefinierade changeTime
egenskapen.
# 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'
Du kan också fråga efter hanteringsgrupp eller prenumeration med parametrarna -ManagementGroup
eller -Subscription
.
Kommentar
Om frågan inte returnerar resultat från en prenumeration som du redan har åtkomst till, är PowerShell-cmdleten Search-AzGraph
standard för prenumerationer i standardkontexten.
Resource Graph Explorer innehåller också ett rent gränssnitt för att konvertera resultatet av vissa frågor till ett diagram som kan fästas på en Azure-instrumentpanel.
Fråga efter resursändringar
Med Resource Graph kan du fråga antingen tabellerna resourcechanges
, resourcecontainerchanges
eller healthresourcechanges
för att filtrera eller sortera efter någon av egenskaperna för ändringsresursen. Följande exempel kör frågor mot resourcechanges
tabellen, men kan också tillämpas på resourcecontainerchanges
tabellen eller healthresourcechanges
.
Kommentar
Läs mer om healthresourcechanges
data i Project Flash-dokumentationen.
Exempel
Granska följande metodtips innan du frågar efter och analyserar ändringar i dina resurser.
- Fråga efter ändringshändelser under en viss tidsperiod och utvärdera ändringsinformationen.
- Den här frågan fungerar bäst under incidenthantering för att förstå potentiellt relaterade ändringar.
- Behåll en uppdaterad konfigurationshanteringsdatabas (CMDB).
- I stället för att uppdatera alla resurser och deras fullständiga egenskapsuppsättningar på en schemalagd frekvens får du bara ändringarna.
- Förstå vilka andra egenskaper som har ändrats när en resurs ändrar efterlevnadstillståndet.
- Utvärdering av dessa extra egenskaper kan ge insikter om andra egenskaper som kan behöva hanteras via en Azure Policy-definition.
- Ordningen på frågekommandon är viktig. I följande exempel
order by
måste komma förelimit
kommandot.- Kommandot
order by
beställer frågeresultatet efter ändringstiden. - Kommandot
limit
begränsar sedan de ordnade resultaten så att du får de fem senaste resultaten.
- Kommandot
- Vad betyder Okänd ?
- Okänt visas när ändringen skedde på en klient som inte är känd. Klienter identifieras baserat på användaragenten och klientprogram-ID:t som är associerat med den ursprungliga ändringsbegäran.
- Vad betyder system ?
- Systemet visas som ett
changedBy
värde när en bakgrundsändring inträffade som inte korrelerades med någon direkt användaråtgärd.
- Systemet visas som ett
Alla ändringar under den senaste 24-timmarsperioden
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
Resurser som tagits bort i en specifik resursgrupp
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
Ändringar i ett specifikt egenskapsvärde
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
Ändringar under de senaste sju dagarna efter vem och vilken klient och sorterad efter antal
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
Ändringar i storlek på virtuella datorer
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
Antal ändringar efter ändringstyp och prenumerationsnamn
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
Senaste resursändringarna för resurser som skapats med en viss tagg
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