Menggunakan pemberitahuan untuk memicu runbook Azure Automation

Anda dapat menggunakan Azure Monitor untuk memantau metrik dan log tingkat dasar untuk sebagian besar layanan di Azure. Anda dapat memanggil runbook Azure Automation menggunakan grup tindakan untuk mengotomatiskan tugas berdasarkan peringatan. Artikel ini memperlihatkan cara mengonfigurasi dan menjalankan runbook dengan menggunakan peringatan.

Prasyarat

Jenis pemberitahuan

Anda dapat menggunakan runbook otomatisasi dengan tiga jenis pemberitahuan:

  • Pemberitahuan paling umum
  • Pemberitahuan log aktivitas
  • Pemberitahuan metrik yang mendekati real-time

Catatan

Skema pemberitahuan umum menstandarkan pengalaman konsumsi untuk notifikasi pemberitahuan di Azure. Secara historis, tiga jenis pemberitahuan di Azure (metrik, log, dan log aktivitas) telah memiliki templat emailnya sendiri, skema webhook, dll. Untuk mempelajari selengkapnya, lihat Skema pemberitahuan umum.

Saat pemberitahuan memanggil runbook, panggilan sebenarnya adalah permintaan HTTP POST ke webhook. Isi permintaan POST berisi objek berformat JSON yang memiliki sifat berguna yang terkait dengan pemberitahuan. Tabel berikut ini mencantumkan tautan ke skema muatan untuk setiap jenis peringatan:

Peringatan Deskripsi Skema payload
Pemberitahuan umum Skema pemberitahuan umum yang menstandarkan pengalaman penggunaan untuk notifikasi pemberitahuan di Azure saat ini. Skema payload pemberitahuan umum.
Pemberitahuan log aktivitas Mengirim pemberitahuan saat peristiwa baru di log aktivitas Azure cocok dengan kondisi tertentu. Misalnya, saat operasi Delete VM terjadi di myProductionResourceGroup atau saat acara Azure Service Health baru dengan status Aktif muncul. Skema payload pemberitahuan log aktivitas
Pemberitahuan metrik yang mendekati real-time Mengirim pemberitahuan lebih cepat daripada pemberitahuan metrik saat satu atau beberapa metrik tingkat platform memenuhi kondisi yang ditentukan. Misalnya, ketika nilai untuk CPU % pada VM lebih besar dari 90, dan nilai untuk Network In lebih besar dari 500 MB selama 5 menit terakhir. Skema payload pemberitahuan metrik mendekati real-time

Karena data yang disediakan oleh setiap jenis pemberitahuan berbeda, setiap jenis pemberitahuan juga ditangani secara berbeda. Di bagian berikutnya, Anda mempelajari cara membuat runbook untuk menangani berbagai jenis pemberitahuan.

Tetapkan izin untuk identitas terkelola

Tetapkan izin untuk identitas terkelola yang sesuai untuk memungkinkannya menghentikan mesin virtual. Runbook dapat menggunakan identitas terkelola yang ditetapkan sistem akun Automation atau identitas terkelola yang ditetapkan pengguna. Langkah-langkah disediakan untuk menetapkan izin untuk setiap identitas. Langkah-langkah di bawah ini menggunakan PowerShell. Jika Anda lebih suka menggunakan Portal, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure.

  1. Masuk ke Azure secara interaktif menggunakan cmdlet Connect-AzAccount dan ikuti instruksinya.

    # Sign in to your Azure subscription
    $sub = Get-AzSubscription -ErrorAction SilentlyContinue
    if(-not($sub))
    {
        Connect-AzAccount
    }
    
    # If you have multiple subscriptions, set the one to use
    # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
    
  2. Berikan nilai yang sesuai untuk variabel di bawah ini dan kemudian jalankan skrip.

    $resourceGroup = "resourceGroup"
    $automationAccount = "AutomationAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    
  3. Gunakan cmdlet PowerShell New-AzRoleAssignment untuk menetapkan peran ke identitas terkelola yang ditetapkan sistem.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  4. Menetapkan peran ke identitas terkelola yang ditetapkan pengguna.

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity)
    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  5. Untuk identitas terkelola yang ditetapkan sistem, tunjukkan ClientId dan catat nilai untuk penggunaan nanti.

    $UAMI.ClientId
    

Membuat runbook untuk menangani pemberitahuan

Untuk menggunakan Automation dengan peringatan, Anda memerlukan runbook yang mengelola payload JSON peringatan yang diteruskan ke runbook. Contoh runbook berikut harus dipanggil dari pemberitahuan Azure.

Seperti yang dijelaskan di bagian sebelumnya, setiap jenis pemberitahuan memiliki skema yang berbeda. Skrip mengambil data webhook dari pemberitahuan di parameter input runbook WebhookData. Kemudian, skrip mengevaluasi payload JSON untuk menentukan jenis pemberitahuan mana yang sedang digunakan.

Contoh ini menggunakan peringatan dari mesin virtual (VM) Azure. Ini mengambil data VM dari payload, lalu menggunakan informasi itu untuk menghentikan VM. Koneksi harus diatur di akun Automation tempat runbook dijalankan. Saat menggunakan pemberitahuan untuk memicu runbook, penting untuk memeriksa status pemberitahuan di runbook yang dipicu. Runbook memicu setiap kali pemberitahuan berubah status. Pemberitahuan memiliki beberapa status, dengan dua yang paling umum adalah Diaktifkan dan Diselesaikan. Periksa status dalam logika runbook Anda untuk memastikan runbook tidak berjalan lebih dari sekali. Contoh dalam artikel ini memperlihatkan cara mencari pemberitahuan dengan status Diaktifkan saja.

Runbook menggunakan akun Automation identitas terkelola yang ditetapkan sistem guna mengautentikasi dengan Azure untuk melakukan tindakan pengelolaan terhadap Mesin Virtual. Runbook dapat dengan mudah dimodifikasi untuk menggunakan identitas terkelola yang ditetapkan pengguna.

Catatan

Kami menyarankan agar Anda menggunakan akses jaringan publik karena tidak dimungkinkan untuk menggunakan pemberitahuan Azure (metrik, log, dan log aktivitas) untuk memicu webhook Automation saat akun Automation menggunakan tautan privat dan dikonfigurasi dengan Akses publik diatur ke Nonaktifkan.

Gunakan contoh ini untuk membuat runbook yang disebut Stop-AzureVmInResponsetoVMAlert. Anda dapat memodifikasi skrip PowerShell, dan menggunakannya dengan banyak sumber daya yang berbeda.

  1. Masuk ke portal Microsoft Azure, dan navigasikan ke akun Azure Automation Anda.

  2. Di Proses Automasi, pilih Runbook.

  3. Pilih Buat runbook.

    1. Beri nama runbook Stop-AzureVmInResponsetoVMAlert.
    2. Dari daftar menurun Jenis Runbook, pilih PowerShell.
    3. Pilih Buat.
  4. Di editor runbook, tempel kode berikut:

    [OutputType("PSAzureOperationResponse")]
    param
    (
        [Parameter (Mandatory=$false)]
        [object] $WebhookData
    )
    $ErrorActionPreference = "stop"
    
    if ($WebhookData)
    {
        # Get the data object from WebhookData
        $WebhookBody = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)
    
        # Get the info needed to identify the VM (depends on the payload schema)
        $schemaId = $WebhookBody.schemaId
        Write-Verbose "schemaId: $schemaId" -Verbose
        if ($schemaId -eq "azureMonitorCommonAlertSchema") {
            # This is the common Metric Alert schema (released March 2019)
            $Essentials = [object] ($WebhookBody.data).essentials
            # Get the first target only as this script doesn't handle multiple
            $alertTargetIdArray = (($Essentials.alertTargetIds)[0]).Split("/")
            $SubId = ($alertTargetIdArray)[2]
            $ResourceGroupName = ($alertTargetIdArray)[4]
            $ResourceType = ($alertTargetIdArray)[6] + "/" + ($alertTargetIdArray)[7]
            $ResourceName = ($alertTargetIdArray)[-1]
            $status = $Essentials.monitorCondition
        }
        elseif ($schemaId -eq "AzureMonitorMetricAlert") {
            # This is the near-real-time Metric Alert schema
            $AlertContext = [object] ($WebhookBody.data).context
            $SubId = $AlertContext.subscriptionId
            $ResourceGroupName = $AlertContext.resourceGroupName
            $ResourceType = $AlertContext.resourceType
            $ResourceName = $AlertContext.resourceName
            $status = ($WebhookBody.data).status
        }
        elseif ($schemaId -eq "Microsoft.Insights/activityLogs") {
            # This is the Activity Log Alert schema
            $AlertContext = [object] (($WebhookBody.data).context).activityLog
            $SubId = $AlertContext.subscriptionId
            $ResourceGroupName = $AlertContext.resourceGroupName
            $ResourceType = $AlertContext.resourceType
            $ResourceName = (($AlertContext.resourceId).Split("/"))[-1]
            $status = ($WebhookBody.data).status
        }
        elseif ($schemaId -eq $null) {
            # This is the original Metric Alert schema
            $AlertContext = [object] $WebhookBody.context
            $SubId = $AlertContext.subscriptionId
            $ResourceGroupName = $AlertContext.resourceGroupName
            $ResourceType = $AlertContext.resourceType
            $ResourceName = $AlertContext.resourceName
            $status = $WebhookBody.status
        }
        else {
            # Schema not supported
            Write-Error "The alert data schema - $schemaId - is not supported."
        }
    
        Write-Verbose "status: $status" -Verbose
        if (($status -eq "Activated") -or ($status -eq "Fired"))
        {
            Write-Verbose "resourceType: $ResourceType" -Verbose
            Write-Verbose "resourceName: $ResourceName" -Verbose
            Write-Verbose "resourceGroupName: $ResourceGroupName" -Verbose
            Write-Verbose "subscriptionId: $SubId" -Verbose
    
            # Determine code path depending on the resourceType
            if ($ResourceType -eq "Microsoft.Compute/virtualMachines")
            {
                # This is an Resource Manager VM
                Write-Verbose "This is an Resource Manager VM." -Verbose
    
                # Ensures you do not inherit an AzContext in your runbook
                Disable-AzContextAutosave -Scope Process
    
                # Connect to Azure with system-assigned managed identity
                $AzureContext = (Connect-AzAccount -Identity).context
    
                # set and store context
                $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
    
                # Stop the Resource Manager VM
                Write-Verbose "Stopping the VM - $ResourceName - in resource group - $ResourceGroupName -" -Verbose
                Stop-AzVM -Name $ResourceName -ResourceGroupName $ResourceGroupName -DefaultProfile $AzureContext -Force
                # [OutputType(PSAzureOperationResponse")]
            }
            else {
                # ResourceType not supported
                Write-Error "$ResourceType is not a supported resource type for this runbook."
            }
        }
        else {
            # The alert status was not 'Activated' or 'Fired' so no action taken
            Write-Verbose ("No action taken. Alert status: " + $status) -Verbose
        }
    }
    else {
        # Error
        Write-Error "This runbook is meant to be started from an Azure alert webhook only."
    }
    
  5. Jika Anda ingin runbook dijalankan dengan identitas terkelola yang ditetapkan sistem, jangan ubah kodenya. Jika Anda lebih suka menggunakan identitas terkelola yang ditetapkan pengguna:

    1. Dari baris 78, hapus $AzureContext = (Connect-AzAccount -Identity).context,
    2. Ganti dengan $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, dan
    3. Masukkan ID Klien yang Anda peroleh sebelumnya.
  6. Pilih Simpan, Publikasikan, lalu Ya saat diminta.

  7. Tutup halaman Runbook untuk kembali ke halaman Akun Automation.

Membuat pemberitahuan

Pemberitahuan menggunakan grup tindakan, yang merupakan kumpulan tindakan yang dipicu oleh pemberitahuan. Runbook hanyalah salah satu dari banyak tindakan yang dapat Anda gunakan dengan grup tindakan.

  1. Di akun Automation Anda, di bagian Pemantauan, pilih Peringatan.

  2. Pilih + Aturan Peringatan Baru untuk membuka halaman Buat aturan peringatan.

    The create alert rule page and subsections.

  3. Di bagian Cakupan, pilih Edit sumber daya.

  4. Pada laman Pilih sumber daya, dari daftar menurun Filter menurut jenis sumber daya, pilih Mesin virtual.

  5. Centang kotak di samping mesin virtual yang ingin Anda pantau. Kemudian pilih Selesai untuk kembali ke halaman Buat aturan peringatan.

  6. Di bawah Kondisi, pilih Tambahkan kondisi.

  7. Pada halaman Pilih sinyal, masukkan Percentage CPU dalam kotak teks pencarian, lalu pilih Persentase CPU dari hasil.

  8. Pada halaman Konfigurasikan logika sinyal, di bawah Nilai ambang batas masukkan nilai awal yang rendah untuk tujuan pengujian, seperti 5. Anda dapat kembali dan memperbarui nilai ini setelah mengonfirmasi bahwa peringatan berfungsi seperti yang diharapkan. Kemudian pilih Selesai untuk kembali ke halaman Buat aturan peringatan.

    Entering CPU percentage threshold value.

  9. Di bagian Tindakan,pilih Tambahkan grup tindakan, lalu +Buat grup tindakan.

    The create action group page with Basics tab open.

  10. Pada halaman Buat grup tindakan:

    1. Pada tab Dasar, masukkan Nama grup tindakan dan Nama tampilan.

    2. Pada tab Tindakan, di kotak teks Nama, masukkan nama. Kemudian dari daftar menurun Jenis tindakan, pilih Runbook Automation untuk membuka halaman Konfigurasikan Runbook.

      1. Untuk item sumber Runbook, pilih Pengguna.

      2. Dari daftar menurun Langganan, pilih langganan Anda.

      3. Dari daftar menurun akun Automation, pilih akun Automation Anda.

      4. Dari daftar menurun Runbook, pilih Stop-AzureVmInResponsetoVMAlert.

      5. Untuk item Aktifkan skema peringatan umum, pilih Ya.

      6. Pilih OK untuk kembali ke halaman Buat grup tindakan.

        Configure runbook page with values.

    3. Pilih Tinjau + buat lalu Buat untuk kembali ke halaman Buat aturan peringatan.

  11. Di bawah Detail aturan Peringatan, untuk kotak teks nama aturan Peringatan.

  12. Pilih Buat aturan pemberitahuan. Anda dapat menggunakan grup tindakan ini di pemberitahuan log aktivitas dan pemberitahuan mendekati real-time yang Anda buat.

Verifikasi

Pastikan VM Anda berjalan. Navigasikan ke runbook Stop-AzureVmInResponsetoVMAlert dan perhatikan daftar Pekerjaan Terbaru untuk diisi. Setelah pekerjaan selesai muncul, pilih pekerjaan dan tinjau output-nya. Periksa juga untuk melihat apakah VM Anda berhenti.

Showing output from job.

Operasi manajemen Azure VM umum

Azure Automation menyediakan skrip untuk operasi manajemen Azure VM umum seperti menghidupkan ulang VM, menghentikan VM, menghapus VM, meningkatkan dan menurunkan skala skenario di galeri Runbook. Skrip juga dapat ditemukan di repositori GitHub Azure Automation Anda juga dapat menggunakan skrip ini seperti yang disebutkan dalam langkah-langkah di atas.

Operasi manajemen Azure VM Detail
Stop-Azure-VM-On-Alert Runbook ini akan menghentikan VM Azure Resource Manager sebagai respons terhadap pemicu pemberitahuan Azure.

Input adalah data pemberitahuan dengan informasi yang diperlukan untuk mengidentifikasi VM mana yang akan dihentikan.

Runbook harus dipanggil dari pemberitahuan Azure melalui webhook.

Versi terbaru modul Az harus ditambahkan ke akun automation.

Identitas Terkelola harus diaktifkan dan akses kontributor ke akun otomatisasi harus diberikan.
Mulai ulang-Azure-VM-On-Alert Runbook ini akan menghentikan VM Azure Resource Manager sebagai respons terhadap pemicu pemberitahuan Azure.

Input adalah data pemberitahuan dengan informasi yang diperlukan untuk mengidentifikasi VM mana yang akan dihentikan.

Runbook harus dipanggil dari pemberitahuan Azure melalui webhook.

Versi terbaru modul Az harus ditambahkan ke akun automation.

Identitas Terkelola harus diaktifkan dan akses kontributor ke akun otomatisasi harus diberikan.
Delete-Azure-VM-On-Alert Runbook ini akan menghentikan VM Azure Resource Manager sebagai respons terhadap pemicu pemberitahuan Azure.

Input adalah data pemberitahuan dengan informasi yang diperlukan untuk mengidentifikasi VM mana yang akan dihentikan.

Runbook harus dipanggil dari pemberitahuan Azure melalui webhook.

Versi terbaru modul Az harus ditambahkan ke akun automation.

Identitas Terkelola harus diaktifkan dan akses kontributor ke akun otomatisasi harus diberikan.
ScaleDown-Azure-VM-On-Alert Runbook ini akan menghentikan VM Azure Resource Manager sebagai respons terhadap pemicu pemberitahuan Azure.

Input adalah data pemberitahuan dengan informasi yang diperlukan untuk mengidentifikasi VM mana yang akan dihentikan.

Runbook harus dipanggil dari pemberitahuan Azure melalui webhook.

Versi terbaru modul Az harus ditambahkan ke akun automation.

Identitas Terkelola harus diaktifkan dan akses kontributor ke akun otomatisasi harus diberikan.
ScaleUp-Azure-VM-On-Alert Runbook ini akan menghentikan VM Azure Resource Manager sebagai respons terhadap pemicu pemberitahuan Azure.

Input adalah data pemberitahuan dengan informasi yang diperlukan untuk mengidentifikasi VM mana yang akan dihentikan.

Runbook harus dipanggil dari pemberitahuan Azure melalui webhook.

Versi terbaru modul Az harus ditambahkan ke akun automation.

Identitas Terkelola harus diaktifkan dan akses kontributor ke akun otomatisasi harus diberikan.

Langkah berikutnya