Mendapatkan perubahan sumber daya

Sumber daya berubah melalui penggunaan sehari-hari, konfigurasi ulang, dan bahkan penyebaran ulang. Perubahan dapat berasal dari individu atau akibat proses otomatis. Sebagian besar perubahan adalah berdasarkan desain, tetapi kadang-kadang tidak. Dengan riwayat perubahan selama 14 hari terakhir, Azure Resource Graph memungkinkan Anda untuk:

  • Mengetahui kapan perubahan terdeteksi pada properti Azure Resource Manager
  • Untuk setiap perubahan sumber daya, lihat detail perubahan properti
  • Lihat perbandingan penuh sumber daya sebelum dan sesudah perubahan yang terdeteksi

Deteksi dan detail perubahan sangat berharga untuk contoh skenario berikut:

  • Selama manajemen insiden untuk memahami perubahan yang berpotensi terkait. Buat kueri untuk aktivitas perubahan selama jendela waktu tertentu dan evaluasi detail perubahan.
  • Pastikan Database Manajemen Konfigurasi, yang dikenal sebagai CMDB, selalu terbaru. Alih-alih merefresh semua sumber daya dan set properti lengkap pada frekuensi terjadwal, hanya dapatkan apa yang berubah.
  • Memahami properti lain apa yang mungkin telah diubah ketika sumber daya mengubah status kepatuhan. Evaluasi properti tambahan ini dapat memberikan wawasan tentang properti lain yang mungkin perlu dikelola melalui definisi Azure Policy.

Artikel ini menunjukkan cara mengumpulkan informasi ini melalui SDK Resource Graph. Untuk melihat informasi ini di portal Microsoft Azure, lihat Riwayat perubahan Azure Policy atau Riwayat perubahan Log Aktivitas Azure. Untuk detail tentang perubahan pada aplikasi Anda dari lapisan infrastruktur hingga penyebaran aplikasi, lihat Menggunakan Analisis Perubahan Aplikasi (pratinjau) di Azure Monitor.

Catatan

Detail perubahan di Resource Graph untuk properti Resource Manager. Untuk melacak perubahan di dalam komputer virtual, lihat Pelacakan perubahan Azure Automation atau Konfigurasi Tamu untuk VM Azure Policy.

Penting

Riwayat perubahan di Azure Resource Graph ada di Pratinjau Publik.

Menemukan aktivitas perubahan yang terdeteksi dan menampilkan detail perubahan

Langkah pertama dalam melihat apa yang berubah pada sumber daya adalah menemukan aktivitas perubahan yang terkait dengan sumber daya tersebut dalam jendela waktu. Setiap aktivitas perubahan juga menyertakan detail tentang apa yang berubah pada sumber daya. Langkah ini dilakukan melalui titik akhir REST resourceChanges.

Titik akhir resourceChanges menerima parameter berikut dalam isi permintaan:

  • resourceId [diperlukan]: Sumber daya Azure untuk mencari perubahan.
  • interval [diperlukan]: Properti dengan tanggal mulai dan berakhir kapan harus memeriksa aktivitas perubahan menggunakan Zona Waktu Zulu (Z) .
  • fetchPropertyChanges (opsional): Properti Boolean yang diatur jika objek respons menyertakan perubahan properti.

Contoh isi permintaan:

{
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
    "interval": {
        "start": "2019-09-28T00:00:00.000Z",
        "end": "2019-09-29T00:00:00.000Z"
    },
    "fetchPropertyChanges": true
}

Dengan badan permintaan di atas, URI REST API untuk resourceChanges adalah:

POST https://management.azure.com/providers/Microsoft.ResourceGraph/resourceChanges?api-version=2018-09-01-preview

Responsnya terlihat mirip dengan contoh berikut:

{
    "changes": [
        {
            "changeId": "{\"beforeId\":\"3262e382-9f73-4866-a2e9-9d9dbee6a796\",\"beforeTime\":\"2019-09-28T00:45:35.012Z\",\"afterId\":\"6178968e-981e-4dac-ac37-340ee73eb577\",\"afterTime\":\"2019-09-28T00:52:53.371Z\"}",
            "beforeSnapshot": {
                "snapshotId": "3262e382-9f73-4866-a2e9-9d9dbee6a796",
                "timestamp": "2019-09-28T00:45:35.012Z"
            },
            "afterSnapshot": {
                "snapshotId": "6178968e-981e-4dac-ac37-340ee73eb577",
                "timestamp": "2019-09-28T00:52:53.371Z"
            },
            "changeType": "Create"
        },
        {
            "changeId": "{\"beforeId\":\"a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c\",\"beforeTime\":\"2019-09-28T00:43:38.366Z\",\"afterId\":\"3262e382-9f73-4866-a2e9-9d9dbee6a796\",\"afterTime\":\"2019-09-28T00:45:35.012Z\"}",
            "beforeSnapshot": {
                "snapshotId": "a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c",
                "timestamp": "2019-09-28T00:43:38.366Z"
            },
            "afterSnapshot": {
                "snapshotId": "3262e382-9f73-4866-a2e9-9d9dbee6a796",
                "timestamp": "2019-09-28T00:45:35.012Z"
            },
            "changeType": "Delete"
        },
        {
            "changeId": "{\"beforeId\":\"b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c\",\"beforeTime\":\"2019-09-28T00:43:15.518Z\",\"afterId\":\"a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c\",\"afterTime\":\"2019-09-28T00:43:38.366Z\"}",
            "beforeSnapshot": {
                "snapshotId": "b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c",
                "timestamp": "2019-09-28T00:43:15.518Z"
            },
            "afterSnapshot": {
                "snapshotId": "a00f5dac-86a1-4d86-a1c5-a9f7c8147b7c",
                "timestamp": "2019-09-28T00:43:38.366Z"
            },
            "propertyChanges": [
                {
                    "propertyName": "tags.org",
                    "afterValue": "compute",
                    "changeCategory": "User",
                    "changeType": "Insert"
                },
                {
                    "propertyName": "tags.team",
                    "afterValue": "ARG",
                    "changeCategory": "User",
                    "changeType": "Insert"
                }
            ],
            "changeType": "Update"
        },
        {
            "changeId": "{\"beforeId\":\"19d12ab1-6ac6-4cd7-a2fe-d453a8e5b268\",\"beforeTime\":\"2019-09-28T00:42:46.839Z\",\"afterId\":\"b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c\",\"afterTime\":\"2019-09-28T00:43:15.518Z\"}",
            "beforeSnapshot": {
                "snapshotId": "19d12ab1-6ac6-4cd7-a2fe-d453a8e5b268",
                "timestamp": "2019-09-28T00:42:46.839Z"
            },
            "afterSnapshot": {
                "snapshotId": "b37a90d1-7ebf-41cd-8766-eb95e7ee4f1c",
                "timestamp": "2019-09-28T00:43:15.518Z"
            },
            "propertyChanges": [{
                "propertyName": "tags.cgtest",
                "afterValue": "hello",
                "changeCategory": "User",
                "changeType": "Insert"
            }],
            "changeType": "Update"
        }
    ]
}

Setiap aktivitas perubahan yang terdeteksi untuk resourceId memiliki properti berikut:

  • changeId - Nilai ini unik untuk sumber daya tersebut. Meskipun string changeId terkadang berisi properti lain, itu hanya dijamin unik.

  • beforeSnapshot - Berisi snapshotId dan tanda waktu snapshot sumber daya yang diambil sebelum perubahan terdeteksi.

  • afterSnapshot - Berisi snapshotId dan tanda waktu snapshot sumber daya yang diambil setelah perubahan terdeteksi.

  • changeType - Menjelaskan jenis perubahan yang terdeteksi untuk seluruh rekaman perubahan antara beforeSnapshot dan afterSnapshot. Nilainya adalah: Buat, Perbarui, dan Hapus. Array properti propertyChanges hanya disertakan saat changeType adalah Pembaruan.

    Penting

    Buat hanya tersedia pada sumber daya yang sebelumnya ada dan dihapus dalam 14 hari terakhir.

  • propertiChanges - Array properti ini merinci semua properti sumber daya yang diperbarui antara beforeSnapshot dan afterSnapshot:

    • propertyName - Nama properti sumber daya yang diubah.
    • changeCategory - Menjelaskan apa yang membuat perubahan. Nilainya adalah: Sistem dan Pengguna.
    • changeType - Menjelaskan jenis perubahan yang terdeteksi untuk properti sumber daya individual. Nilainya adalah: Sisipkan, Perbarui, Hapus.
    • beforeValue - Nilai properti sumber daya di beforeSnapshot. Tidak ditampilkan saat changeType adalah Insert.
    • afterValue - Nilai properti sumber daya dalam afterSnapshot. Tidak ditampilkan saat changeType adalah Remove.

Membandingkan perubahan sumber daya

Dengan changeId dari titik akhir resourceChanges, titik akhir REST resourceChangeDetails kemudian digunakan untuk mendapatkan snapshot sebelum dan sesudah sumber daya yang diubah.

Titik akhir resourceChangeDetails memerlukan dua parameter dalam isi permintaan:

  • resourceId: Sumber daya Azure untuk membandingkan perubahan.
  • changeId: Peristiwa perubahan unik untuk resourceId yang dikumpulkan dari resourceChanges.

Contoh isi permintaan:

{
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
    "changeId": "{\"beforeId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"beforeTime\":'2019-05-09T00:00:00.000Z\",\"afterId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"afterTime\":'2019-05-10T00:00:00.000Z\"}"
}

Dengan badan permintaan di atas, URI REST API untuk resourceChangeDetails adalah:

POST https://management.azure.com/providers/Microsoft.ResourceGraph/resourceChangeDetails?api-version=2018-09-01-preview

Responsnya terlihat mirip dengan contoh berikut:

{
    "changeId": "{\"beforeId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"beforeTime\":'2019-05-09T00:00:00.000Z\",\"afterId\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"beforeTime\":'2019-05-10T00:00:00.000Z\"}",
    "beforeSnapshot": {
        "timestamp": "2019-03-29T01:32:05.993Z",
        "content": {
            "sku": {
                "name": "Standard_LRS",
                "tier": "Standard"
            },
            "kind": "Storage",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
            "name": "mystorageaccount",
            "type": "Microsoft.Storage/storageAccounts",
            "location": "westus",
            "tags": {},
            "properties": {
                "networkAcls": {
                    "bypass": "AzureServices",
                    "virtualNetworkRules": [],
                    "ipRules": [],
                    "defaultAction": "Allow"
                },
                "supportsHttpsTrafficOnly": false,
                "encryption": {
                    "services": {
                        "file": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        },
                        "blob": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        }
                    },
                    "keySource": "Microsoft.Storage"
                },
                "provisioningState": "Succeeded",
                "creationTime": "2018-07-27T18:37:21.7708872Z",
                "primaryEndpoints": {
                    "blob": "https://mystorageaccount.blob.core.windows.net/",
                    "queue": "https://mystorageaccount.queue.core.windows.net/",
                    "table": "https://mystorageaccount.table.core.windows.net/",
                    "file": "https://mystorageaccount.file.core.windows.net/"
                },
                "primaryLocation": "westus",
                "statusOfPrimary": "available"
            }
        }
    },
    "afterSnapshot": {
        "timestamp": "2019-03-29T01:54:24.42Z",
        "content": {
            "sku": {
                "name": "Standard_LRS",
                "tier": "Standard"
            },
            "kind": "Storage",
            "id": "/subscriptions/{subscriptionId}/resourceGroups/MyResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
            "name": "mystorageaccount",
            "type": "Microsoft.Storage/storageAccounts",
            "location": "westus",
            "tags": {},
            "properties": {
                "networkAcls": {
                    "bypass": "AzureServices",
                    "virtualNetworkRules": [],
                    "ipRules": [],
                    "defaultAction": "Allow"
                },
                "supportsHttpsTrafficOnly": true,
                "encryption": {
                    "services": {
                        "file": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        },
                        "blob": {
                            "enabled": true,
                            "lastEnabledTime": "2018-07-27T18:37:21.8333895Z"
                        }
                    },
                    "keySource": "Microsoft.Storage"
                },
                "provisioningState": "Succeeded",
                "creationTime": "2018-07-27T18:37:21.7708872Z",
                "primaryEndpoints": {
                    "blob": "https://mystorageaccount.blob.core.windows.net/",
                    "queue": "https://mystorageaccount.queue.core.windows.net/",
                    "table": "https://mystorageaccount.table.core.windows.net/",
                    "file": "https://mystorageaccount.file.core.windows.net/"
                },
                "primaryLocation": "westus",
                "statusOfPrimary": "available"
            }
        }
    }
}

beforeSnapshot dan afterSnapshot masing-masing memberikan waktu snapshot diambil dan properti pada saat itu. Perubahan terjadi di beberapa titik antara snapshot ini. Melihat contoh sebelumnya, kita bisa melihat bahwa properti yang berubah adalah supportsHttpsTrafficOnly.

Untuk membandingkan hasilnya, gunakan properti perubahan di resourceChanges atau mengevaluasi bagian konten dari setiap snapshot di resourceChangeDetails untuk menentukan perbedaannya. Jika Anda membandingkan snapshot, tanda waktu selalu menunjukkan sebagaimana perbedaan meskipun diharapkan.

Langkah berikutnya