Získání změn prostředků

Prostředky se mění v průběhu denního používání, rekonfigurace a dokonce i opětovného nasazení. Většina změn je navržená, ale někdy to není. Můžete provádět následující akce:

  • Zjistit, kdy byly změny detekovány vlastností Azure Resource Manageru.
  • Umožňuje zobrazit podrobnosti o změně vlastnosti.
  • Dotazování změn ve velkém měřítku napříč předplatnými, skupinou pro správu nebo tenantem

V tomto článku se naučíte:

  • Jak vypadá JSON datové části.
  • Dotazování změn prostředků prostřednictvím Resource Graphu pomocí rozhraní příkazového řádku, PowerShellu nebo webu Azure Portal
  • Příklady dotazů a osvědčené postupy pro dotazování změn prostředků

Požadavky

Vysvětlení vlastností událostí změn

Když se prostředek vytvoří, aktualizuje nebo odstraní, vytvoří se nový prostředek změny (Microsoft.Resources/changes), který rozšíří upravený prostředek a představuje změněné vlastnosti. Záznamy změn by měly být dostupné za méně než pět minut. Následující příklad datové části JSON ukazuje vlastnosti změny prostředku:

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

Podívejte se na úplnou referenční příručku pro změnu vlastností prostředku.

Spuštění dotazu

Vyzkoušejte dotaz resourcechanges Resource Graphu na základě tenanta tabulky. Dotaz vrátí prvních pět posledních změn prostředků Azure s časem změny, typem změn, ID cílového prostředku, typem cílového prostředku a podrobnostmi o změnách jednotlivých záznamů změn.

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

Tento dotaz můžete aktualizovat tak, aby pro vlastnost časového razítka zadal uživatelsky přívětivější název sloupce.

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

Pokud chcete omezit výsledky dotazu na nejnovější změny, aktualizujte dotaz na order by vlastnost changeTime definovanou uživatelem.

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

Dotaz můžete také provést podle skupiny pro správu nebo předplatného -ManagementGroup s použitím parametrů nebo -Subscription parametrů.

Poznámka:

Pokud dotaz nevrací výsledky z předplatného, ke které už máte přístup, Search-AzGraph rutina PowerShellu se ve výchozím kontextu nastaví na předplatná.

Resource Graph Explorer také poskytuje čisté rozhraní pro převod výsledků některých dotazů na graf, který je možné připnout na řídicí panel Azure.

Dotazování změn prostředků

Pomocí Resource Graphu se můžete dotazovat buď na resourcechangestabulku , resourcecontainerchangesnebo healthresourcechanges na tabulku, která má filtrovat nebo řadit podle libovolné vlastnosti prostředku změny. Následující příklady se dotazuje na resourcechanges tabulku, ale můžete ji použít i u resourcecontainerchanges tabulky.healthresourcechanges

Poznámka:

Další informace o datech healthresourcechanges najdete v dokumentaci k Projectu Flash.

Příklady

Před dotazováním a analýzou změn ve vašich prostředcích si projděte následující osvědčené postupy.

  • Zadejte dotaz na události změn během určitého časového období a vyhodnoťte podrobnosti o změnách.
    • Tento dotaz funguje nejlépe během správy incidentů, aby porozuměl potenciálně souvisejícím změnám.
  • Udržujte aktuální databázi správy konfigurace (CMDB).
    • Místo aktualizace všech prostředků a jejich úplných sad vlastností v naplánované frekvenci obdržíte jenom jejich změny.
  • Seznamte se s dalšími vlastnostmi, které se mohly změnit, když prostředek změní stav dodržování předpisů.
    • Vyhodnocení těchto dodatečných vlastností může poskytnout přehled o dalších vlastnostech, které může být potřeba spravovat prostřednictvím definice služby Azure Policy.
  • Pořadí příkazů dotazu je důležité. V následujícíchpříkladch order bylimit
    • Příkaz order by vyřídí výsledky dotazu podle času změny.
    • Příkaz limit pak omezí seřazené výsledky, aby se zajistilo, že získáte pět nejnovějších výsledků.

Všechny změny za posledních 24 hodin

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

Prostředky odstraněné v konkrétní skupině prostředků

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

Změny konkrétní hodnoty vlastnosti

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

Nejnovější změny prostředků pro prostředky vytvořené za posledních 7 dnů

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

Změny velikosti virtuálního počítače

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

Počet změn podle typu změny a názvu předplatného

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  

Nejnovější změny prostředků pro prostředky vytvořené s určitou značkou

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

Další kroky