Menggunakan ekstensi Application Health dengan Virtual Machine Scale Sets

Memantau kesehatan aplikasi Anda adalah sinyal penting untuk mengelola dan meningkatkan penyebaran Anda. Azure Virtual Machine Scale Sets menyediakan dukungan untuk Peningkatan Bergulir termasuk Peningkatan Gambar OS Otomatis dan Patching Tamu VM Otomatis, yang mengandalkan pemantauan kesehatan instans individual untuk meningkatkan penyebaran Anda. Anda juga dapat menggunakan Ekstensi Kesehatan Aplikasi untuk memantau kesehatan aplikasi setiap instans dalam set skala Anda dan melakukan perbaikan instans menggunakan Perbaikan Instans Otomatis.

Artikel ini menjelaskan bagaimana Anda dapat menggunakan dua jenis ekstensi Application Health, Status Kesehatan Biner atau Status Kesehatan Kaya, untuk memantau kesehatan aplikasi Anda yang disebarkan pada Set Skala Komputer Virtual.

Prasyarat

Artikel ini mengasumsikan bahwa Anda tidak asing dengan:

Perhatian

Ekstensi Kesehatan Aplikasi mengharapkan untuk menerima respons pemeriksaan yang konsisten di port tcp yang dikonfigurasi atau jalur http/https permintaan untuk memberi label VM sebagai Sehat. Jika tidak ada aplikasi yang berjalan pada VM, atau Anda tidak dapat mengonfigurasi respons pemeriksaan, VM Anda akan muncul sebagai Tidak Sehat (Status Kesehatan Biner) atau Tidak Diketahui (Status Kesehatan Kaya).

Catatan

Hanya satu sumber pemantauan kesehatan yang dapat digunakan untuk Set Skala Komputer Virtual, baik Ekstensi Kesehatan Aplikasi atau Pemeriksaan Kesehatan. Jika Anda mengaktifkan kedua opsi, Anda harus menghapusnya sebelum menggunakan layanan orkestrasi seperti Perbaikan Instans atau Peningkatan OS Otomatis.

Kapan harus menggunakan ekstensi Application Health

Ekstensi Kesehatan Aplikasi disebarkan di dalam instans Set Skala Komputer Virtual dan melaporkan kesehatan aplikasi dari dalam instans set skala. Pemeriksaan ekstensi pada titik akhir aplikasi lokal dan akan memperbarui status kesehatan berdasarkan respons TCP/HTTP(S) yang diterima dari aplikasi. Status kesehatan ini digunakan oleh Azure untuk memulai perbaikan pada instans yang tidak sehat dan untuk menentukan apakah instans memenuhi syarat untuk operasi peningkatan.

Ekstensi melaporkan kesehatan dari dalam VM dan dapat digunakan dalam situasi di mana pemeriksaan eksternal seperti pemeriksaan kesehatan Azure Load Balancer tidak dapat digunakan.

Biner versus Status Kesehatan Kaya

Ekstensi Kesehatan Aplikasi memiliki dua opsi yang tersedia: Status Kesehatan Biner dan Status Kesehatan Kaya. Tabel berikut menyoroti beberapa perbedaan utama antara dua opsi. Lihat akhir bagian ini untuk rekomendasi umum.

Fitur Status Kesehatan Biner Status Kesehatan Kaya
Status Kesehatan yang Tersedia Dua status yang tersedia: Sehat, Tidak Sehat Empat status yang tersedia: Sehat, Tidak Sehat, Inisialisasi, Tidak Diketahui1
Mengirim Sinyal Kesehatan Sinyal kesehatan dikirim melalui kode respons HTTP/HTTPS atau koneksi TCP. Sinyal kesehatan pada protokol HTTP/HTTPS dikirim melalui kode respons probe dan isi respons. Sinyal kesehatan melalui protokol TCP tetap tidak berubah dari Status Kesehatan Biner.
Mengidentifikasi Instans Tidak Sehat Instans akan secara otomatis jatuh ke status Tidak Sehat jika sinyal Sehat tidak diterima dari aplikasi. Instans yang tidak sehat dapat menunjukkan masalah dengan konfigurasi ekstensi (misalnya, titik akhir yang tidak dapat dijangkau) atau masalah dengan aplikasi (misalnya, kode status non-200). Instans hanya akan masuk ke status Tidak Sehat jika aplikasi memancarkan respons pemeriksaan Tidak Sehat . Pengguna bertanggung jawab untuk menerapkan logika kustom untuk mengidentifikasi dan menandai instans dengan aplikasiTidak Sehat 2. Instans dengan pengaturan ekstensi yang salah (misalnya, titik akhir yang tidak dapat dijangkau) atau respons pemeriksaan kesehatan yang tidak valid akan berada di bawah statusTidak Diketahui 2.
Menginisialisasi status untuk instans yang baru dibuat Status inisialisasi tidak tersedia. Instans yang baru dibuat mungkin memakan waktu sebelum ditetapkan ke status stabil. Status inisialisasi memungkinkan instans yang baru dibuat untuk diselesaikan ke Status Kesehatan yang stabil sebelum membuat instans memenuhi syarat untuk peningkatan bergulir atau operasi perbaikan instans.
Protokol HTTP/HTTPS Didukung Didukung
Protokol TCP Didukung Dukungan Terbatas – Status tidak diketahui tidak tersedia pada protokol TCP. Lihat tabel protokol Status Kesehatan Kaya untuk perilaku Status Kesehatan di TCP.

1 Status Tidak Diketahui tidak tersedia pada protokol TCP. 2 Hanya berlaku untuk protokol HTTP/HTTPS. Protokol TCP akan mengikuti proses yang sama untuk mengidentifikasi instans Tidak Sehat seperti di Status Kesehatan Biner.

Secara umum, Anda harus menggunakan Status Kesehatan Biner jika:

  • Anda tidak tertarik untuk mengonfigurasi logika kustom untuk mengidentifikasi dan menandai instans yang tidak sehat
  • Anda tidak memerlukan masa tenggang inisialisasi untuk instans yang baru dibuat

Anda harus menggunakan Status Kesehatan Kaya jika:

  • Anda mengirim sinyal kesehatan melalui protokol HTTP/HTTPS dan dapat mengirimkan informasi kesehatan melalui isi respons probe
  • Anda ingin menggunakan logika kustom untuk mengidentifikasi dan menandai instans yang tidak sehat
  • Anda ingin mengatur masa tenggang inisialisasi untuk instans yang baru dibuat, sehingga mereka menetap ke Status Kesehatan yang stabil sebelum membuat instans memenuhi syarat untuk peningkatan bergulir atau perbaikan instans

Status Kesehatan Biner

Pelaporan Status Kesehatan Biner berisi dua Status Kesehatan, Sehat dan Tidak Sehat. Tabel berikut ini memberikan deskripsi singkat tentang bagaimana Status Kesehatan dikonfigurasi.

Protokol HTTP/HTTPS

Protokol Negara Kesehatan Deskripsi
http/https Sehat Untuk mengirim sinyal Sehat , aplikasi diharapkan mengembalikan kode respons 200.
http/https Tidak sehat Instans akan ditandai sebagai Tidak Sehat jika kode respons 200 tidak diterima dari aplikasi.

Protokol TCP

Protokol Negara Kesehatan Deskripsi
TCP Sehat Untuk mengirim sinyal Sehat , jabat tangan yang berhasil harus dilakukan dengan titik akhir aplikasi yang disediakan.
TCP Tidak sehat Instans akan ditandai sebagai Tidak Sehat jika jabat tangan yang gagal atau tidak lengkap terjadi dengan titik akhir aplikasi yang disediakan.

Beberapa skenario yang dapat mengakibatkan status Tidak Sehat meliputi:

  • Saat titik akhir aplikasi mengembalikan kode status non-200
  • Ketika tidak ada titik akhir aplikasi yang dikonfigurasi di dalam instans komputer virtual untuk memberikan status kesehatan aplikasi
  • Saat titik akhir aplikasi salah dikonfigurasi
  • Ketika titik akhir aplikasi tidak dapat dijangkau

Status Kesehatan Kaya

Pelaporan Rich Health States berisi empat Status Kesehatan, Inisialisasi, Sehat, Tidak Sehat, dan Tidak Diketahui. Tabel berikut ini memberikan deskripsi singkat tentang bagaimana setiap Status Kesehatan dikonfigurasi.

Protokol HTTP/HTTPS

Protokol Negara Kesehatan Deskripsi
http/https Sehat Untuk mengirim sinyal Sehat , aplikasi diharapkan mengembalikan respons pemeriksaan dengan: Kode Respons Probe: Status 2xx, Isi Respons Probe: {"ApplicationHealthState": "Healthy"}
http/https Tidak sehat Untuk mengirim sinyal Tidak Sehat , aplikasi diharapkan untuk mengembalikan respons pemeriksaan dengan: Kode Respons Probe: Status 2xx, Isi Respons Probe: {"ApplicationHealthState": "Unhealthy"}
http/https Menginisialisasi Instans secara otomatis memasukkan status Inisialisasi pada waktu mulai ekstensi. Untuk informasi selengkapnya, lihat Menginisialisasi status.
http/https Tidak dikenal Status Tidak Diketahui dapat terjadi dalam skenario berikut: ketika kode status non-2xx dikembalikan oleh aplikasi, ketika waktu permintaan pemeriksaan habis, ketika titik akhir aplikasi tidak dapat dijangkau atau salah dikonfigurasi, ketika nilai yang hilang atau tidak valid disediakan untuk ApplicationHealthState dalam isi respons, atau ketika masa tenggang berakhir. Untuk informasi selengkapnya, lihat Status tidak diketahui.

Protokol TCP

Protokol Negara Kesehatan Deskripsi
TCP Sehat Untuk mengirim sinyal Sehat , jabat tangan yang berhasil harus dilakukan dengan titik akhir aplikasi yang disediakan.
TCP Tidak sehat Instans akan ditandai sebagai Tidak Sehat jika jabat tangan yang gagal atau tidak lengkap terjadi dengan titik akhir aplikasi yang disediakan.
TCP Menginisialisasi Instans secara otomatis memasukkan status Inisialisasi pada waktu mulai ekstensi. Untuk informasi selengkapnya, lihat Menginisialisasi status.

Menginisialisasi status

Status ini hanya berlaku untuk Rich Health States. Status Inisialisasi hanya terjadi sekali pada waktu mulai ekstensi dan dapat dikonfigurasi oleh pengaturan gracePeriod ekstensi dan numberOfProbes.

Pada permulaan ekstensi, kesehatan aplikasi akan tetap dalam status Inisialisasi hingga salah satu dari dua skenario terjadi:

  • Status Kesehatan yang sama (Sehat atau Tidak Sehat) dilaporkan beberapa kali berturut-turut seperti yang dikonfigurasi melalui numberOfProbes
  • Kedaluwarsa gracePeriod

Jika Status Kesehatan yang sama (Sehat atau Tidak Sehat) dilaporkan secara berturut-turut, kesehatan aplikasi akan beralih keluar dari status Inisialisasi dan ke Status Kesehatan yang dilaporkan (Sehat atau Tidak Sehat).

Contoh

Jika numberOfProbes = 3, itu berarti:

  • Untuk transisi dari Menginisialisasi ke status Sehat: Ekstensi kesehatan aplikasi harus menerima tiga sinyal Sehat berturut-turut melalui protokol HTTP/HTTPS atau TCP
  • Untuk beralih dari Menginisialisasi ke Status tidak sehat: Ekstensi kesehatan aplikasi harus menerima tiga sinyal Tidak Sehat berturut-turut melalui protokol HTTP/HTTPS atau TCP

Jika kedaluwarsa gracePeriod sebelum status kesehatan berturut-turut dilaporkan oleh aplikasi, kesehatan instans akan ditentukan sebagai berikut:

  • Protokol HTTP/HTTPS: Kesehatan aplikasi akan beralih dari Inisialisasi ke Tidak Diketahui
  • Protokol TCP: Kesehatan aplikasi akan beralih dari Inisialisasi ke Tidak Sehat

Status tidak diketahui

Status ini hanya berlaku untuk Rich Health States. Status Tidak Diketahui hanya dilaporkan untuk pemeriksaan "http" atau "https" dan terjadi dalam skenario berikut:

  • Ketika kode status non-2xx dikembalikan oleh aplikasi
  • Ketika waktu permintaan pemeriksaan habis
  • Ketika titik akhir aplikasi tidak dapat dijangkau atau dikonfigurasi dengan salah
  • Ketika nilai yang hilang atau tidak valid disediakan dalam ApplicationHealthState isi respons
  • Ketika masa tenggang berakhir

Instans dalam status Tidak Diketahui diperlakukan mirip dengan instans Tidak Sehat . Jika diaktifkan, perbaikan instans akan dilakukan pada instans Tidak Diketahui saat peningkatan bergulir akan dijeda hingga instans kembali ke status Sehat .

Tabel berikut menunjukkan interpretasi status kesehatan untuk Peningkatan Bergulir dan Perbaikan Instans:

Negara Kesehatan Interpretasi Peningkatan Bergulir Pemicu Perbaikan Instans
Menginisialisasi Tunggu status dalam Kondisi Sehat, Tidak Sehat, atau Tidak Diketahui No
Sehat Sehat No
Tidak sehat Tidak sehat Ya
Tidak dikenal Tidak sehat Ya

Skema ekstensi untuk Status Kesehatan Biner

JSON berikut menunjukkan skema untuk ekstensi Health Application. Ekstensi memerlukan minimum permintaan "tcp", "http" atau "https" dengan port terkait atau jalur permintaan masing-masing.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "1.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1
          }
        }
      }
    ]
  }
} 

Nilai properti

Nama Nilai / Contoh Jenis Data
apiVersion 2018-10-01 date
penerbit Microsoft.ManagedServices string
jenis ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

Pengaturan

Nama Nilai / Contoh Jenis Data
protokol http atau https atau tcp string
pelabuhan Opsional jika protokol adalah http atau https, wajib jika protokol adalah tcp int
requestPath Wajib jika protokol adalah http atau https, tidak diizinkan jika protokol adalah tcp string
intervalInSeconds Opsional, defaultnya adalah 5 detik. Ini adalah interval antara setiap pemeriksaan kesehatan. Misalnya, jika intervalInSeconds == 5, pemeriksaan akan dikirim ke titik akhir aplikasi lokal setiap 5 detik sekali. int
numberOfProbes Opsional, defaultnya adalah 1. Ini adalah jumlah pemeriksaan berturut-turut yang diperlukan agar status kesehatan berubah. Misalnya, jika numberOfProbles == 3, Anda akan memerlukan 3 sinyal "Sehat" berturut-turut untuk mengubah status kesehatan dari "Tidak Sehat" menjadi status "Sehat". Persyaratan yang sama berlaku untuk mengubah status kesehatan menjadi status "Tidak Sehat". int

Skema ekstensi untuk Status Kesehatan Kaya

JSON berikut menunjukkan skema untuk ekstensi Rich Health States. Ekstensi ini memerlukan minimal permintaan "http" atau "https" dengan port terkait atau jalur permintaan masing-masing. Pemeriksaan TCP juga didukung, tetapi tidak akan dapat mengatur ApplicationHealthState melalui isi respons probe dan tidak akan memiliki akses ke status Tidak Diketahui .

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "2.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1,
            "gracePeriod": 600
          }
        }
      }
    ]
  }
} 

Nilai properti

Nama Nilai / Contoh Jenis Data
apiVersion 2018-10-01 date
penerbit Microsoft.ManagedServices string
jenis ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

Pengaturan

Nama Nilai / Contoh Jenis Data
protokol http atau https atau tcp string
pelabuhan Opsional jika protokol adalah http atau https, wajib jika protokol adalah tcp int
requestPath Wajib jika protokol adalah http atau https, tidak diizinkan jika protokol adalah tcp string
intervalInSeconds Opsional, defaultnya adalah 5 detik. Ini adalah interval antara setiap pemeriksaan kesehatan. Misalnya, jika intervalInSeconds == 5, pemeriksaan akan dikirim ke titik akhir aplikasi lokal setiap 5 detik sekali. int
numberOfProbes Opsional, defaultnya adalah 1. Ini adalah jumlah pemeriksaan berturut-turut yang diperlukan agar status kesehatan berubah. Misalnya, jika numberOfProbles == 3, Anda akan memerlukan 3 sinyal "Sehat" berturut-turut untuk mengubah status kesehatan dari "Tidak Sehat"/"Tidak Diketahui" menjadi status "Sehat". Persyaratan yang sama berlaku untuk mengubah status kesehatan menjadi status "Tidak Sehat" atau "Tidak Diketahui". int
gracePeriod Opsional, default = intervalInSeconds * numberOfProbes; masa tenggang maksimum adalah 7200 detik int

Menyebarkan ekstensi Application Health

Ada beberapa cara untuk menyebarkan ekstensi Application Health ke set skala Anda seperti yang dirinci dalam contoh berikut.

Status Kesehatan Biner

Contoh berikut menambahkan ekstensi Application Health (dengan nama myHealthExtension) ke extensionProfile dengan model set skala dari set skala berbasis Windows.

Anda juga dapat menggunakan contoh ini untuk mengubah ekstensi yang ada dari Status Kesehatan Kaya ke Kesehatan Biner dengan melakukan panggilan PATCH alih-alih PUT.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>", 
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "1.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>"
    }
  }
}

Gunakan PATCH untuk mengedit ekstensi yang sudah disebarkan.

Tingkatkan VM untuk menginstal ekstensi.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Status Kesehatan Kaya

Contoh berikut menambahkan ekstensi Application Health - Rich States (dengan nama myHealthExtension) ke extensionProfile dalam model set skala dari set skala berbasis Windows.

Anda juga dapat menggunakan contoh ini untuk meningkatkan ekstensi yang ada dari Biner ke Rich Health States dengan melakukan panggilan PATCH alih-alih PUT.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>",
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "2.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>",
      "intervalInSeconds": <intervalInSeconds>,
      "numberOfProbes": <numberOfProbes>,
      "gracePeriod": <gracePeriod>
    }
  }
}

Gunakan PATCH untuk mengedit ekstensi yang sudah disebarkan.

Tingkatkan VM untuk menginstal ekstensi.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Pemecahan masalah

Lihat VMHealth - instans tunggal

Get-AzVmssVM 
  -InstanceView `
  -ResourceGroupName <rgName> `
  -VMScaleSetName <vmssName> `
  -InstanceId <instanceId> 

Lihat VMHealth – panggilan batch

Ini hanya tersedia untuk Virtual Machine Scale Sets dengan orkestrasi Uniform.

GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`

Status Kesehatan tidak muncul

Jika Status Kesehatan tidak muncul di portal Azure atau melalui panggilan GET, periksa untuk memastikan bahwa VM ditingkatkan ke model terbaru. Jika VM tidak ada pada model terbaru, tingkatkan VM dan status kesehatan akan muncul.

Log output eksekusi ekstensi

Output eksekusi ekstensi dicatat di log ke file yang ditemukan dalam direktori berikut:

C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension

Log juga menangkap status kesehatan aplikasi secara berkala.

Langkah berikutnya

Pelajari cara menyebarkan aplikasi Anda di Virtual Machine Scale Sets.