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.

Förutsättningar

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/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/microsoft.compute/virtualmachines/myVM",
  "targetResourceType": "microsoft.compute/virtualmachines",
  "changeType": "Update",
  "changeAttributes": {
    "previousResourceSnapshotId": "08584889383111245807_37592049-3996-ece7-c583-3008aef9e0e1_4043682982_1712668574",
    "newResourceSnapshotId": "08584889377081305807_38788020-eeee-ffff-028f-6121bdac9cfe_4213468768_1712669177",
    "correlationId": "04ff69b3-e162-4583-9cd7-1a14a1ec2c61",
    "changedByType": "User",
    "changesCount": 2,
    "clientType": "ARM Template",
    "changedBy": "john@contoso.com",
    "operation": "microsoft.compute/virtualmachines/write",
    "timestamp": "2024-04-09T13:26:17.347+00:00"
  },
  "changes": {
    "properties.provisioningState": {
      "newValue": "Succeeded",
      "previousValue": "Updating",
      "changeCategory": "System",
      "propertyChangeType": "Update",
      "isTruncated": "true"
    },
    "tags.key1": {
      "newValue": "NewTagValue",
      "previousValue": "null",
      "changeCategory": "User",
      "propertyChangeType": "Insert"
    }
  }
}

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ågeresultat till de senaste ändringarna uppdaterar du frågan till order by den användardefinierade egenskapen changeTime .

# 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, resourcecontainerchangeseller 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 kan ha ändrats när en resurs ändrar "efterlevnadstillstånd".
    • 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öre limit 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.

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

Senaste resursändringarna för resurser som skapats under de senaste sju dagarna

resourcechanges
| extend targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType), changeTime = todatetime(properties.changeAttributes.timestamp)
| where changeTime > ago(7d) and changeType == "Create"
| project  targetResourceId, changeType, changeTime
| join ( Resources | extend targetResourceId=id) on targetResourceId
| order by changeTime desc
| project changeTime, changeType, id, resourceGroup, type, properties

Ä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

Nästa steg