Delen via


Resourcewijzigingen ophalen

Resources veranderen in de loop van het dagelijks gebruik, herconfiguratie en zelfs opnieuw implementeren. De meeste verandering is standaard, maar soms niet. U kunt:

  • Zien wanneer wijzigingen in een Azure Resource Manager-eigenschap zijn gedetecteerd.
  • Details van eigenschapswijziging weergeven.
  • Query's uitvoeren op wijzigingen op schaal in uw abonnementen, beheergroep of tenant.

In dit artikel leert u het volgende:

  • Hoe de JSON van de nettolading eruitziet.
  • Resourcewijzigingen opvragen via Resource Graph met behulp van de CLI, PowerShell of Azure Portal.
  • Queryvoorbeelden en aanbevolen procedures voor het uitvoeren van query's op resourcewijzigingen.
  • Wijzigingsanalyse maakt gebruik van de functie Change Actor :
    • changedBy: Wie een wijziging heeft gestart in uw resource, zoals een app-id of het e-mailadres van een geautoriseerde persoon.
    • clientType: Welke client heeft de wijziging aangebracht, zoals Azure Portal.
    • operation: Welke bewerking werd aangeroepen, zoals Microsoft.Compute/virtualmachines/write.

Vereisten

  • Als u Azure PowerShell wilt inschakelen om een query uit te voeren op Azure Resource Graph, voegt u de module toe.
  • Als u wilt dat Azure CLI query's uitvoert op Azure Resource Graph, voegt u de extensie toe.

Inzicht in eigenschappen van wijzigingsevenementen

Wanneer een resource wordt gemaakt, bijgewerkt of verwijderd, wordt er een nieuwe wijzigingsresource (Microsoft.Resources/changes) gemaakt om de gewijzigde resource uit te breiden en de gewijzigde eigenschappen weer te geven. Wijzigingsrecords moeten binnen vijf minuten beschikbaar zijn. In het volgende voorbeeld van de JSON-nettolading ziet u de eigenschappen van de wijzigingsresource:

{
  "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",
    }
  }
}

Zie de volledige referentiehandleiding voor het wijzigen van resource-eigenschappen.

Een query uitvoeren

Probeer een resourcegrafiekquery op basis van een tenant uit van de resourcechanges tabel. De query retourneert de eerste vijf meest recente Azure-resourcewijzigingen met de wijzigingstijd, het wijzigingstype, de doelresource-id, het doelresourcetype en de details van elke wijzigingsrecord.

# 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'

U kunt deze query bijwerken om een gebruiksvriendelijkere kolomnaam op te geven voor de tijdstempeleigenschap .

# 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'

Als u de queryresultaten wilt beperken tot de meest recente wijzigingen, werkt u de query bij naar order by de door de gebruiker gedefinieerde changeTime eigenschap.

# 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'

U kunt ook query's uitvoeren op beheergroep of abonnement met respectievelijk de -ManagementGroup of -Subscription parameters.

Notitie

Als de query geen resultaten retourneert van een abonnement waartoe u al toegang hebt, wordt de Search-AzGraph PowerShell-cmdlet standaard ingesteld op abonnementen in de standaardcontext.

Resource Graph Explorer biedt ook een schone interface voor het converteren van de resultaten van sommige query's naar een grafiek die kan worden vastgemaakt aan een Azure-dashboard.

Wijzigingen in queryresources

Met Resource Graph kunt u query's uitvoeren op de resourcechanges, resourcecontainerchangesof healthresourcechanges tabellen om te filteren of te sorteren op een van de eigenschappen van de wijzigingsresource. In de volgende voorbeelden wordt een query uitgevoerd op de resourcechanges tabel, maar kan ook worden toegepast op de resourcecontainerchanges tabel of healthresourcechanges tabel.

Notitie

Meer informatie over de healthresourcechanges gegevens in de Project Flash-documentatie.

Voorbeelden

Bekijk de volgende aanbevolen procedures voordat u query's uitvoert op wijzigingen in uw resources en deze analyseert.

  • Voer een query uit voor wijzigingsevenementen tijdens een specifiek tijdvenster en evalueer de wijzigingsgegevens.
    • Deze query werkt het beste tijdens incidentbeheer om inzicht te krijgen in mogelijk gerelateerde wijzigingen.
  • Houd een up-to-date CONFIGURATION Management Database (CMDB) bij.
    • In plaats van alle resources en hun volledige eigenschappensets op een geplande frequentie te vernieuwen, ontvangt u alleen hun wijzigingen.
  • Begrijpen welke andere eigenschappen zijn gewijzigd wanneer een resource de nalevingsstatus wijzigt.
    • Evaluatie van deze extra eigenschappen kan inzicht bieden in andere eigenschappen die mogelijk moeten worden beheerd via een Azure Policy-definitie.
  • De volgorde van queryopdrachten is belangrijk. In de volgende voorbeelden moet de order by opdracht vóór de limit opdracht komen.
    • Met order by de opdracht worden de queryresultaten gesorteerd op basis van de wijzigingstijd.
    • De limit opdracht beperkt vervolgens de geordende resultaten om ervoor te zorgen dat u de vijf meest recente resultaten krijgt.
  • Wat betekent Onbekend? 
    • Onbekend wordt weergegeven wanneer de wijziging is uitgevoerd op een client die niet wordt herkend. Clients worden herkend op basis van de gebruikersagent en clienttoepassings-id die is gekoppeld aan de oorspronkelijke wijzigingsaanvraag.
  • Wat betekent Het systeem?
    • Het systeem wordt weergegeven als een changedBy waarde wanneer er een achtergrondwijziging is opgetreden die niet is gecorreleerd met een directe gebruikersactie.

Alle wijzigingen in de afgelopen periode van 24 uur

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

Resources die zijn verwijderd in een specifieke resourcegroep

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

Wijzigingen in een specifieke eigenschapswaarde

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

Wijzigingen in de afgelopen zeven dagen door wie en welke klant en welke besteld op aantal

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 

Wijzigingen in de grootte van de virtuele machine

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

Aantal wijzigingen per wijzigingstype en abonnementsnaam

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  

Meest recente resourcewijzigingen voor resources die zijn gemaakt met een bepaalde 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

Volgende stappen