Skip to content

WebSocket Event Hub & Skalabilitas Telemetri ​

Cockpit menggunakan hub distribusi peristiwa real-time untuk mengalirkan peristiwa operasional dan pembaruan telemetri ke browser klien. Arsitektur ini memungkinkan sinkronisasi antarmuka pengguna secara instan tanpa memerlukan pemungutan suara (polling) dari sisi klien.


Arsitektur Perutean Peristiwa ​

Hub peristiwa menggunakan WebSocket untuk koneksi klien dan notifikasi advisory PostgreSQL untuk komunikasi antar-node:

  • Aliran WebSocket Upstream: Klien membangun koneksi WebSocket persisten ke endpoint /api/v1/events. Saluran ini tetap terbuka, memungkinkan server untuk mengirimkan peristiwa secara langsung ke browser.
  • Perutean Antar-Node (pg_notify): Dalam penerapan Cockpit multi-instance, klien mungkin terhubung ke node yang berbeda. Ketika perubahan status terjadi pada host Vapor yang terhubung ke Cockpit Instans A, instans tersebut menulis peristiwa ke database dan memanggil saluran pg_notify PostgreSQL. Cockpit Instans B, yang mendengarkan pada saluran yang sama, menerima pemberitahuan tersebut dan meneruskannya ke klien WebSocket yang terhubung secara lokal.
┌──────────────┐    WebSocket   ┌──────────────┐   pg_notify    ┌──────────────┐    WebSocket   ┌──────────┐
│  Vapor Host  │───────────────►│  Cockpit #1  │───────────────►│  Cockpit #2  │───────────────►│ Browser  │
│  (Physical   │                │ (Node Aktif) │                │ (Node Aktif) │                │  Klien   │
│   Server)    │                └──────────────┘                └──────────────┘                └──────────┘
└──────────────┘

Struktur Frame Pesan ​

Semua peristiwa yang dipertukarkan melalui antarmuka WebSocket dibingkai menggunakan skema JSON standar:

json
{
  "type": "<message_type>",
  "payload": {
    "kind": "<channel_name>",
    "data": { ... }
  }
}

Jenis Permintaan Klien ​

  • auth: Mengirimkan kredensial JSON Web Token (JWT) untuk mengautentikasi sesi.
  • subscribe: Mendaftarkan sesi klien untuk menerima pembaruan dari saluran peristiwa tertentu.
  • unsubscribe: Membatalkan pendaftaran sesi klien dari saluran peristiwa.

Jenis Respons Server ​

  • auth: Mengonfirmasi status autentikasi.
  • event: Mengirimkan payload yang terkait dengan saluran peristiwa yang diikuti.
  • error: Menunjukkan kesalahan permintaan (misalnya, token kedaluwarsa atau kegagalan izin).

Saluran Peristiwa yang Didukung ​

Untuk menerima pembaruan metrik atau peristiwa, browser klien berlangganan ke saluran tertentu:

Nama SaluranDeskripsi
host-metrics:<host_id>Mengalirkan metrik CPU, memori, dan I/O disk tingkat host secara real-time.
vm-events:<host_id>Menyiarkan pembaruan siklus hidup mesin virtual (misalnya, peristiwa start, shutdown, atau crash VM) untuk host tertentu.
vm-metrics:<host_id>Mengalirkan bagan kinerja gabungan untuk semua mesin virtual yang berjalan pada host yang ditentukan.
vm-volume-migration-events:<uuid>:<disk>Mengalirkan indikator kemajuan (0% hingga 100%) untuk proses migrasi penyimpanan yang aktif.
task-eventsMenyiarkan pembaruan status untuk operasi latar belakang sistem (misalnya, pencadangan VM, pembuatan templat, atau sinkronisasi host).