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ů
- Analýza změn používá funkci objektu Change Actor :
changedBy
: Kdo inicioval změnu ve vašem prostředku, například ID aplikace nebo e-mailovou adresu autorizované osoby.clientType
: Který klient provedl změnu, jako je Azure Portal.operation
: Která operace byla volána, napříkladMicrosoft.Compute/virtualmachines/write
.
Požadavky
- Pokud chcete azure PowerShellu povolit dotazování Azure Resource Graphu, přidejte modul.
- Pokud chcete azure CLI povolit dotazování Azure Resource Graphu, přidejte rozšíření.
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/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",
}
}
}
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 definovanou changeTime
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 resourcechanges
tabulku , resourcecontainerchanges
nebo 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 pouze jejich změny.
- Zjistěte, které další vlastnosti se změnily, 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 by
limit
- 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ů.
- Příkaz
- Co znamená Neznámý ?
- Neznámá se zobrazí, když došlo ke změně v klientovi, který není rozpoznán. Klienti se rozpoznají na základě uživatelského agenta a ID klientské aplikace přidružené k původní žádosti o změnu.
- Co znamená systém ?
- Systém se zobrazí jako
changedBy
hodnota, když došlo ke změně na pozadí, která nebyla korelována s žádnou přímou akcí uživatele.
- Systém se zobrazí jako
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
Změny za posledních 7 dnů podle toho, kdo a který klient a seřazený podle počtu
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
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