Skip to content

WebSocket Event Hub & Penskalaan Telemetri

Cockpit menggunakan pusat kejadian (event center) real-time untuk mengalirkan pembaruan server secara langsung ke browser Anda secara instan, memastikan Anda melihat perubahan status tanpa perlu me-refresh halaman web.


Bagaimana Event Hub Bekerja 📢

💡 Analogi: Telepon Langsung & Interkom

  • Koneksi Langsung (WebSockets): Halaman web standar bekerja seperti mengirim surat: Anda mengirim permintaan lalu menunggu balasan. WebSockets bekerja seperti sambungan telepon yang terus terbuka. Begitu Anda membuka Cockpit di browser, panggilan telepon dilakukan ke ujung Event Hub Cockpit (/api/v1/events). Jalur ini tetap terbuka agar server dapat mengirimkan pembaruan ke layar Anda saat itu juga.
  • Megafon/Interkom (pg_notify): Jika perusahaan Anda menjalankan beberapa server Cockpit untuk keandalan, admin yang berbeda mungkin terhubung ke server yang berbeda. Jika server fisik mengirim pembaruan status ke Server Cockpit #1, Server #1 menggunakan interkom database (megafon) yang disebut pg_notify untuk berteriak: "Host A telah terhubung!". Server Cockpit #2 mendengar teriakan ini dan meneruskannya ke semua sambungan browser yang terhubung dengannya.

Berikut adalah alur pembaruan langsung:

┌──────────────┐     Telepon        ┌──────────────┐   Teriak Megafon   ┌──────────────┐     Telepon        ┌──────────┐
│  Vapor Host  │───────────────────►│  Cockpit #1  │───────────────────►│  Cockpit #2  │───────────────────►│ Browser  │
│(Server Fisik)│    (WebSocket)     │(Terima data) │    (pg_notify)     │  (Cadangan)  │    (WebSocket)     │ (Klien)  │
└──────────────┘                    └──────────────┘                    └──────────────┘                    └──────────┘

Format Pesan: Amplop Surat ✉️

Semua pesan yang dikirim melalui WebSocket menggunakan tata letak standar, menyerupai amplop surat pos:

json
{
  "type": "<message_type>",   // Apa yang tertulis di luar amplop
  "payload": {
    "kind": "<channel_name>", // Bagian departemen tujuan surat
    "data": { ... }            // Isi surat yang sebenarnya
  }
}
  • Tindakan yang Dapat Anda Kirim (Bagian Luar Amplop):
    • auth: Mengirim token login Anda untuk membuktikan siapa Anda.
    • subscribe: Memberitahu Cockpit bahwa Anda ingin memantau saluran pembaruan tertentu (misalnya, "Saya ingin memantau grafik VM #1").
    • unsubscribe: Memberitahu Cockpit untuk berhenti mengirimkan pembaruan dari suatu saluran.
  • Tanggapan yang Anda Terima:
    • auth: Mengonfirmasi bahwa login Anda berhasil.
    • event: Mengirimkan data langsung dari saluran yang Anda minta (subscribe).
    • error: Memberitahu Anda jika terjadi kesalahan (misalnya, jika Anda tidak memiliki hak akses untuk melihat VM tersebut).

Saluran Kejadian: Menyetel Radio 📻

💡 Analogi: Frekuensi Radio

Untuk mendapatkan pembaruan, browser Anda harus menyetel ke "saluran" tertentu (seperti memutar frekuensi radio untuk mendengarkan stasiun musik tertentu).

Berikut adalah saluran standar yang dapat Anda setel:

Saluran Stasiun RadioApa yang disiarkan
host-metrics:<host_id>Grafik langsung CPU, Memori, dan kecepatan Disk untuk server fisik tertentu.
vm-events:<host_id>Perubahan status VM secara langsung (misalnya, "VM 1 baru saja dimatikan" atau "VM 2 crash").
vm-metrics:<host_id>Kumpulan data grafik gabungan untuk semua VM yang berjalan di server tersebut.
vm-volume-migration-events:<uuid>:<disk>Indikator bilah kemajuan (0% hingga 100%) yang menunjukkan kemajuan pemindahan disk VM selama migrasi penyimpanan.
task-eventsKemajuan pekerjaan latar belakang umum (seperti pembuatan backup atau pembaruan sistem).