Mendapatkan perubahan sumber daya
Sumber daya berubah melalui penggunaan harian, konfigurasi ulang, dan bahkan penyebaran ulang. Sebagian besar perubahan adalah berdasarkan desain, tetapi kadang-kadang tidak. Anda dapat:
- Temukan kapan perubahan terdeteksi pada properti Azure Resource Manager.
- Lihat detail perubahan properti.
- Perubahan kueri dalam skala besar di seluruh langganan, grup manajemen, atau penyewa Anda.
Dalam artikel ini, Anda belajar tentang:
- Seperti apa payload JSON.
- Cara mengkueri perubahan sumber daya melalui Resource Graph menggunakan CLI, PowerShell, atau portal Azure.
- Contoh kueri dan praktik terbaik untuk mengkueri perubahan sumber daya.
Prasyarat
- Untuk mengaktifkan Azure PowerShell untuk mengkueri Azure Resource Graph, tambahkan modul.
- Untuk mengaktifkan Azure CLI untuk mengkueri Azure Resource Graph, tambahkan ekstensi.
Memahami properti peristiwa perubahan
Saat sumber daya dibuat, diperbarui, atau dihapus, sumber daya perubahan baru (Microsoft.Resources/changes) dibuat untuk memperluas sumber daya yang dimodifikasi dan mewakili properti yang diubah. Rekaman perubahan harus tersedia dalam waktu kurang dari lima menit. Contoh payload JSON berikut menunjukkan properti sumber daya perubahan:
{
"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"
}
}
}
Lihat panduan referensi lengkap untuk mengubah properti sumber daya.
Menjalankan kueri
Cobalah kueri Resource Graph berbasis penyewa dari resourcechanges
tabel. Kueri menampilkan lima perubahan sumber daya Azure terbaru dengan waktu perubahan, jenis perubahan, ID sumber daya target, jenis sumber daya target, dan detail perubahan dari setiap data perubahan.
# 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'
Anda dapat memperbarui kueri ini untuk menentukan nama kolom yang lebih mudah digunakan untuk properti tanda waktu.
# 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'
Untuk membatasi hasil kueri ke perubahan terbaru, perbarui kueri ke order by
properti changeTime yang ditentukan pengguna.
# 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'
Anda juga dapat mengkueri menurut grup manajemen atau langganan dengan -ManagementGroup
parameter atau -Subscription
.
Catatan
Jika kueri tidak mengembalikan hasil dari langganan yang sudah Anda akses, maka Search-AzGraph
cmdlet PowerShell default ke langganan dalam konteks default.
Resource Graph Explorer juga menyediakan antarmuka yang bersih untuk mengubah hasil beberapa kueri menjadi bagan yang dapat disematkan ke dasbor Azure.
Perubahan sumber daya kueri
Dengan Resource Graph, Anda bisa mengkueri resourcechanges
tabel , , resourcecontainerchanges
atau healthresourcechanges
untuk memfilter atau mengurutkan menurut salah satu properti sumber daya perubahan. Contoh berikut mengkueri resourcechanges
tabel, tetapi juga dapat diterapkan ke resourcecontainerchanges
tabel atau healthresourcechanges
.
Catatan
Pelajari selengkapnya tentang healthresourcechanges
data dalam dokumentasi Project Flash.
Contoh
Sebelum mengkueri dan menganalisis perubahan dalam sumber daya Anda, tinjau praktik terbaik berikut.
- Buat kueri untuk aktivitas perubahan selama jendela waktu tertentu dan evaluasi detail perubahan.
- Kueri ini berfungsi paling baik selama manajemen insiden untuk memahami perubahan yang berpotensi terkait.
- Pertahankan Database Manajemen Konfigurasi (CMDB) terbaru.
- Alih-alih me-refresh semua sumber daya dan kumpulan properti lengkapnya pada frekuensi terjadwal, Anda hanya akan menerima perubahannya.
- Pahami properti lain apa yang mungkin telah diubah ketika sumber daya mengubah "status kepatuhan".
- Evaluasi properti ekstra ini dapat memberikan insight tentang properti lain yang mungkin perlu dikelola melalui definisi Azure Policy.
- Urutan perintah kueri penting. Dalam contoh berikut,
order by
harus datang sebelumlimit
perintah.- Perintah
order by
mengurutkan hasil kueri berdasarkan waktu perubahan. limit
Perintah kemudian membatasi hasil yang diurutkan untuk memastikan bahwa Anda mendapatkan lima hasil terbaru.
- Perintah
Semua perubahan dalam periode 24 jam terakhir
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
Sumber daya yang dihapus dalam grup sumber daya tertentu
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
Perubahan pada nilai properti tertentu
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
Perubahan sumber daya terbaru untuk sumber daya yang dibuat dalam tujuh hari terakhir
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
Perubahan ukuran komputer virtual
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
Jumlah perubahan menurut jenis perubahan dan nama langganan
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
Perubahan sumber daya terbaru untuk sumber daya yang dibuat dengan tag tertentu
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