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:
- Anda perlu memasang modul Azure PowerShell
- Anda perlu membuat atau menggunakan kembali Grup Tindakan yang dikonfigurasi untuk memberi tahu Anda
Petunjuk
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.Cari dan simpan ID Azure Resource Manager untuk Grup Tindakan Anda
(Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
Buat dan simpan templat Resource Manager untuk pemberitahuan Resource Health seperti
resourcehealthalert.json
(lihat detail di bawah)Buat penyebaran Azure Resource Manager baru menggunakan templat ini
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
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>
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:
- Gambaran umum dari Azure Resource Health
- Jenis sumber daya dan pemeriksaan kesehatan yang tersedia melalui Azure Resource Health
Membuat pemberitahuan Service Health: