Erőforrás-módosítások lekérése
Az erőforrások a napi használat, az újrakonfigurálás és az újbóli üzembe helyezés során változnak. A legtöbb változás a tervezés, de néha nem. A következőket teheti:
- Megtudhatja, mikor történtek módosítások az Azure Resource Manager-tulajdonságokban.
- A tulajdonságmódosítás részleteinek megtekintése.
- Az előfizetések, felügyeleti csoportok vagy bérlők nagy léptékű változásainak lekérdezése.
Ebben a cikkben a következőt ismerheti meg:
- Így néz ki a hasznos adat JSON-ja.
- Erőforrásváltozások lekérdezése a Resource Graphon keresztül a parancssori felület, a PowerShell vagy az Azure Portal használatával.
- Lekérdezési példák és ajánlott eljárások az erőforrás-módosítások lekérdezéséhez.
- A változáselemzés a Change Actor funkciót használja:
changedBy
: Ki kezdeményezte az erőforrás módosítását, például egy alkalmazásazonosítót vagy egy jogosult személy e-mail-címét.clientType
: Melyik ügyfél hajtotta végre a módosítást, például az Azure Portalon.operation
: Melyik műveletet hívták, példáulMicrosoft.Compute/virtualmachines/write
.
Előfeltételek
- Ha engedélyezni szeretné az Azure PowerShell számára az Azure Resource Graph lekérdezését, adja hozzá a modult.
- Ha engedélyezni szeretné, hogy az Azure CLI lekérdezhesse az Azure Resource Graphot, adja hozzá a bővítményt.
Az esemény tulajdonságainak módosítása
Amikor létrehoz, frissít vagy töröl egy erőforrást, létrejön egy új változáserőforrás (Microsoft.Resources/changes
) a módosított erőforrás kibővítéséhez és a módosított tulajdonságok megjelenítéséhez. A módosítási rekordoknak öt percnél rövidebben kell elérhetőnek lenniük. Az alábbi JSON-példa hasznos adatai a változáserőforrás-tulajdonságokat mutatják be:
{
"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",
}
}
}
Az erőforrás tulajdonságainak módosításához tekintse meg a teljes referencia-útmutatót.
Lekérdezés futtatása
Próbálja ki a tábla bérlőalapú Resource Graph-lekérdezését resourcechanges
. A lekérdezés a változási idő, a módosítás típusa, a célerőforrás-azonosító, a célerőforrás-típus és az egyes változásrekordok módosítási részleteinek az első öt legutóbbi Azure-erőforrás-módosítást adja vissza.
# 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'
Ezt a lekérdezést úgy frissítheti, hogy felhasználóbarátabb oszlopnevet adjon meg az időbélyeg tulajdonsághoz.
# 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'
Ha a lekérdezés eredményeit a legutóbbi módosításokra szeretné korlátozni, frissítse a lekérdezést a felhasználó által megadott changeTime
tulajdonságraorder by
.
# 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'
A felügyeleti csoport vagy előfizetés alapján is lekérdezheti a paramétereket vagy -Subscription
a -ManagementGroup
paramétereket.
Feljegyzés
Ha a lekérdezés nem ad vissza eredményeket olyan előfizetésből, amelyhez már rendelkezik hozzáféréssel, akkor a Search-AzGraph
PowerShell-parancsmag alapértelmezés szerint az alapértelmezett környezetben lévő előfizetésekre vonatkozik.
A Resource Graph Explorer egy tiszta felületet is biztosít, amellyel egyes lekérdezések eredményeit egy Azure-irányítópultra rögzíthető diagrammá alakíthatja.
Erőforrás-módosítások lekérdezése
A Resource Graph segítségével lekérdezheti a , vagy resourcecontainerchanges
healthresourcechanges
a resourcechanges
táblákat a módosítási erőforrás tulajdonságai alapján történő szűréshez vagy rendezéshez. Az alábbi példák lekérdezik a táblátresourcechanges
, de a táblára vagy healthresourcechanges
a resourcecontainerchanges
táblára is alkalmazhatók.
Feljegyzés
További információ a healthresourcechanges
Project Flash dokumentációjában szereplő adatokról.
Példák
Az erőforrások változásainak lekérdezése és elemzése előtt tekintse át az alábbi ajánlott eljárásokat.
- Lekérdezés a változási eseményekről egy adott időszak alatt, és értékelje ki a módosítás részleteit.
- Ez a lekérdezés az incidenskezelés során a legjobban működik a potenciálisan kapcsolódó változások megértéséhez.
- Naprakész konfigurációkezelési adatbázis (CMDB) megőrzése.
- Ahelyett, hogy az összes erőforrást és a teljes tulajdonságkészletet ütemezett gyakorisággal frissítenék, csak a módosításokat kapja meg.
- Megtudhatja, hogy mely egyéb tulajdonságok módosultak az erőforrás megfelelőségi állapotának módosításakor.
- Ezeknek az extra tulajdonságoknak a kiértékelése betekintést nyújthat más tulajdonságokba, amelyeket azure policy-definícióval kell felügyelni.
- A lekérdezési parancsok sorrendje fontos. Az alábbi példákban a
order by
parancs előttlimit
kell lennie.- A
order by
parancs a módosítási idő szerint rendeli meg a lekérdezés eredményeit. - A
limit
parancs ezután korlátozza a rendezett eredményeket, hogy biztosan megkapja az öt legutóbbi eredményt.
- A
- Mit jelent az Ismeretlen ?
- Ismeretlen jelenik meg, amikor a módosítás ismeretlen ügyfélen történt. Az ügyfelek az eredeti változáskéréshez társított felhasználói ügynök és ügyfélalkalmazás-azonosító alapján lesznek felismerve.
- Mit jelent a System ?
- A rendszer akkor jelenik meg értékként
changedBy
, ha olyan háttérváltozás történt, amely nem volt összefüggésben közvetlen felhasználói műveletekkel.
- A rendszer akkor jelenik meg értékként
Az elmúlt 24 órás időszak összes változása
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
Adott erőforráscsoportban törölt erőforrások
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
Adott tulajdonságérték módosítása
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
Az elmúlt hét nap változásai a ki és melyik ügyfél szerint, és a darabszám szerint rendezve
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
A virtuális gép méretének változásai
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
Változások száma változástípus és előfizetés neve szerint
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
Egy adott címkével létrehozott erőforrások legújabb erőforrás-változásai
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