Bagikan melalui


Mengonfigurasi pemberitahuan kesehatan sumber daya menggunakan templat Resource Manager

Artikel ini akan membahas cara membuat Pemberitahuan Log Aktivitas Resource Health secara terprogram menggunakan templat Azure Resource Manager dan Azure PowerShell.

Azure Resource Health senantiasa menginformasikan status kesehatan terkini maupun historis dari sumber daya Azure Anda. Pemberitahuan Azure Resource Health dapat memberi tahu Anda dalam waktu dekat secara real-time ketika sumber daya ini memiliki perubahan status kesehatannya. Dengan membuat pemberitahuan Resource Health secara terprogram, pengguna dapat membuat dan menyesuaikan pemberitahuan dalam jumlah yang banyak.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Prasyarat

Sebelum mengikuti petunjuk pada halaman ini, Anda perlu mempersiapkan beberapa hal:

  1. Anda perlu memasang modul Azure PowerShell
  2. Anda perlu membuat atau menggunakan kembali Grup Tindakan yang dikonfigurasi untuk memberi tahu Anda

Petunjuk

  1. Dengan menggunakan PowerShell, masuk ke Azure menggunakan akun Anda lalu pilih langganan yang ingin Anda ajak berinteraksi

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Anda bisa menggunakan Get-AzSubscription untuk mencantumkan daftar langganan yang dapat Anda akses.

  2. Cari dan simpan ID Azure Resource Manager untuk Grup Tindakan Anda

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Buat dan simpan templat Resource Manager untuk pemberitahuan Resource Health seperti resourcehealthalert.json (lihat detail di bawah)

  4. Buat penyebaran Azure Resource Manager baru menggunakan templat ini

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Anda akan diminta untuk mengetikkan Nama Pemberitahuan dan ID Sumber Daya Grup Tindakan yang Anda salin sebelumnya:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Jika semua langkah berhasil, Anda akan mendapat konfirmasi di PowerShell

    DeploymentName          : ExampleDeployment
    ResourceGroupName       : <resourceGroup>
    ProvisioningState       : Succeeded
    Timestamp               : 11/8/2017 2:32:00 AM
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                            Name                     Type       Value
                            ===============          =========  ==========
                            activityLogAlertName     String     <Alert Name>
                            activityLogAlertEnabled  Bool       True
                            actionGroupResourceId    String     /...
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

Perlu diperhatikan jika Anda berencana mengotomatiskan proses ini sepenuhnya, Anda hanya perlu mengedit templat Resource Manager agar tidak meminta nilai di Langkah 5.

Opsi templat Resource Manager untuk pemberitahuan Resource Health

Anda dapat menggunakan templat dasar ini sebagai permulaan untuk membuat pemberitahuan Resource Health. Templat ini akan bekerja seperti yang tertulis dan akan mendaftarkan Anda agar dapat menerima pemberitahuan dari semua kejadian kesehatan sumber daya yang baru diaktifkan di semua sumber daya dalam langganan.

Di bagian bawah artikel ini kami juga telah menyertakan templat pemberitahuan yang lebih kompleks dibandingkan templat ini yang dapat meningkatkan rasio sinyal terhadap kebisingan untuk pemberitahuan Resource Health.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "activityLogAlertName": {
      "type": "string",
      "metadata": {
        "description": "Unique name (within the Resource Group) for the Activity log alert."
      }
    },
    "actionGroupResourceId": {
      "type": "string",
      "metadata": {
        "description": "Resource Id for the Action group."
      }
    }
  },
  "resources": [   
    {
      "type": "Microsoft.Insights/activityLogAlerts",
      "apiVersion": "2017-04-01",
      "name": "[parameters('activityLogAlertName')]",      
      "location": "Global",
      "properties": {
        "enabled": true,
        "scopes": [
            "[subscription().id]"
        ],        
        "condition": {
          "allOf": [
            {
              "field": "category",
              "equals": "ResourceHealth"
            },
            {
              "field": "status",
              "equals": "Active"
            }
          ]
        },
        "actions": {
          "actionGroups":
          [
            {
              "actionGroupId": "[parameters('actionGroupResourceId')]"
            }
          ]
        }
      }
    }
  ]
}

Namun, pemberitahuan luas seperti ini umumnya tidak disarankan. Pelajari cara kami dapat mencakup pemberitahuan ini untuk berfokus pada kejadian yang kami bahas di bawah ini.

Menyesuaikan cakupan pemberitahuan

Pemberitahuan Resource Health dapat dikonfigurasi untuk memantau kejadian pada tiga cakupan yang berbeda:

  • Tingkat langganan
  • Tingkat Grup Sumber Daya
  • Tingkat Sumber Daya

Templat pemberitahuan dikonfigurasi pada tingkat langganan, tetapi jika Anda ingin mengonfigurasi pemberitahuan hanya untuk memberi tahu Anda tentang sumber daya tertentu atau sumber daya dalam grup sumber daya tertentu, Anda hanya perlu memodifikasi bagian scopes pada templat di atas.

Untuk cakupan tingkat grup sumber daya, bagian cakupan akan terlihat seperti berikut:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>"
],

Dan untuk cakupan tingkat sumber daya, bagian cakupan akan terlihat seperti:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/<resource>"
],

Misalnya: "/subscriptions/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

Anda dapat mengunjungi Portal Azure dan melihat URL saat melihat sumber daya Azure Anda untuk mendapatkan string ini.

Menyesuaikan jenis sumber daya yang memberikan pemberitahuan

Pemberitahuan pada tingkat grup langganan atau sumber daya bisa saja memiliki jenis sumber daya yang berbeda. Jika Anda ingin membatasi pemberitahuan agar hanya berasal dari subkumpulan jenis sumber daya tertentu, Anda bisa menentukannya di bagian condition templat tersebut:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.COMPUTE/VIRTUALMACHINES",
                    "containsAny": null
                },
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.STORAGE/STORAGEACCOUNTS",
                    "containsAny": null
                },
                ...
            ]
        }
    ]
},

Di sini kami menggunakan pembungkus anyOf agar pemberitahuan kesehatan sumber daya dapat mencocokkan berbagai kondisi yang kami tentukan dan memungkinkan pemberitahuan yang menargetkan jenis sumber daya tertentu.

Menyesuaikan kejadian Resource Health yang memberikan pemberitahuan

Ketika sumber daya mengalami suatu kejadian kesehatan, sumber daya dapat melalui serangkaian tahapan yang mewakili kondisi dari kejadian kesehatan: Active, In Progress, Updated, dan Resolved.

Anda mungkin hanya ingin diberitahu saat sumber daya sedang tidak sehat, dalam hal ini Anda ingin mengonfigurasi pemberitahuan Anda untuk hanya memberitahu Anda saat status menjadi Active. Namun, jika Anda juga ingin diberi tahu pada tahap lain, Anda dapat menambahkan detail-detail seperti:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "status",
                    "equals": "Active"
                },
                {
                    "field": "status",
                    "equals": "In Progress"
                },
                {
                    "field": "status",
                    "equals": "Resolved"
                },
                {
                    "field": "status",
                    "equals": "Updated"
                }
            ]
        }
    ]
}

Jika Anda ingin menerima pemberitahuan untuk keempat tahap kejadian kesehatan, Anda dapat menghapus syarat ini secara bersamaan dan pemberitahuan akan memberi tahu Anda terlepas dari properti status.

Catatan

Setiap bagian "anyOf" hanya boleh berisi satu nilai jenis bidang.

Menyesuaikan pemberitahuan Resource Health untuk menghindari kejadian yang "Tidak Diketahui"

Azure Resource Health dapat memberikan laporan kesehatan sumber daya terbaru kepada Anda dengan terus memantaunya menggunakan runner pengujian. Status laporan kesehatan yang relevan antara lain: "Tersedia", "Tidak Tersedia", dan "Menurun". Namun, dalam situasi saat runner dan sumber daya Azure tak dapat berkomunikasi, status kesehatan "Tidak Diketahui" dilaporkan untuk sumber daya, dan hal ini dianggap sebagai kejadian kesehatan "Aktif".

Namun, ketika sebuah sumber daya membuat laporan "Tidak Diketahui", kemungkinan status kesehatannya tidak berubah sejak laporan akurat terakhir. Jika Anda ingin menghilangkan pemberitahuan kejadian "Tidak Diketahui", Anda dapat menentukan logika tersebut dalam templat:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
        {
            "anyOf": [
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
    ]
},

Dalam contoh ini, kami hanya memberi tahu tentang kejadian saat status kesehatan saat ini dan sebelumnya tidak memiliki laporan "Tidak Diketahui". Perubahan ini mungkin bisa menjadi tambahan yang berguna jika pemberitahuan dikirim langsung ke ponsel atau surel Anda.

Perhatikan bahwa mungkin saja properti currentHealthStatus dan previousHealthStatus bernilai null dalam sejumlah kejadian. Misalnya, ketika kejadian Yang Diperbarui terjadi, kemungkinan status kesehatan sumber daya tidak berubah sejak laporan terakhir, hanya apabila informasi kejadian tambahan bisa tersedia (misalnya penyebab). Oleh karena itu, menggunakan klausul di atas dapat berakibat tidak terpicunya beberapa pemberitahuan karena nilai properties.currentHealthStatus dan properties.previousHealthStatus akan diatur ke null.

Menyesuaikan pemberitahuan untuk menghindari kejadian yang Dimulai Pengguna

Kejadian Resource Health dapat dipicu oleh kejadian yang dimulai oleh platform dan pengguna. Sebaiknya hanya mengirim pemberitahuan tertentu ketika ada kejadian kesehatan yang disebabkan oleh platform Azure.

Mudah untuk mengonfigurasi pemberitahuan Anda agar memfilter hanya jenis kejadian seperti ini:

"condition": {
    "allOf": [
        ...,
        {
            "field": "properties.cause",
            "equals": "PlatformInitiated",
            "containsAny": null
        }
    ]
}

Perhatikan bahwa ada kemungkinan bidang penyebab bernilai null dalam beberapa kejadian. Artinya, transisi kesehatan terjadi (misalnya tersedia ke tidak tersedia) dan kejadian segera dicatat untuk mencegah penundaan pemberitahuan. Oleh karena itu, menggunakan klausul di atas dapat berakibat tidak terpicunya pemberitahuan karena nilai properti properties.clause akan disetel ke null.

Melengkapi templat pemberitahuan Resource Health

Dengan menggunakan beragam penyesuaian yang telah dijelaskan di bagian sebelumnya, berikut adalah contoh templat yang dikonfigurasi untuk memaksimalkan rasio sinyal terhadap kebisingan. Perlu diingat bahwa pemberitahuan yang disebutkan di atas di mana nilai currentHealthStatus, previousHealthStatus, dan properti penyebab mungkin null di sejumlah kejadian.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "activityLogAlertName": {
            "type": "string",
            "metadata": {
                "description": "Unique name (within the Resource Group) for the Activity log alert."
            }
        },
        "actionGroupResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource Id for the Action group."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Insights/activityLogAlerts",
            "apiVersion": "2017-04-01",
            "name": "[parameters('activityLogAlertName')]",
            "location": "Global",
            "properties": {
                "enabled": true,
                "scopes": [
                    "[subscription().id]"
                ],
                "condition": {
                    "allOf": [
                        {
                            "field": "category",
                            "equals": "ResourceHealth",
                            "containsAny": null
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.cause",
                                    "equals": "PlatformInitiated",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "status",
                                    "equals": "Active",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Resolved",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "In Progress",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Updated",
                                    "containsAny": null
                                }
                            ]
                        }
                    ]
                },
                "actions": {
                    "actionGroups": [
                        {
                            "actionGroupId": "[parameters('actionGroupResourceId')]"
                        }
                    ]
                }
            }
        }
    ]
}

Namun, Anda akan mengetahui konfigurasi terbaik yang efektif untuk Anda, jadi gunakan alat sebagaimana yang diajarkan kepada Anda dalam dokumentasi ini untuk membuat penyesuaian Anda sendiri.

Langkah berikutnya

Pelajari Resource Health lebih lanjut:

Membuat pemberitahuan Service Health: