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 resourcechangestabel , , resourcecontainerchangesatau 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 sebelum limit 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.

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

Langkah berikutnya