Lewati ke konten utama

Mekanisme Heartbeat

Pendahuluan

Setelah pendaftaran, agen sensor masuk ke dalam loop heartbeat yang berkelanjutan, secara berkala mengumpulkan metrik sistem dan mengirimkannya ke backend. Ini adalah tanggung jawab utama agen yang berkelanjutan — memberikan visibilitas waktu nyata (real-time) kepada pusat pertahanan mengenai kesehatan host sensor dan aktivitas antarmuka jaringan.


Loop Heartbeat

SuccessFailure (log error)Agent startup1. Load config2. Enroll (if no SENSOR_TOKEN)3. Send initial heartbeat4. Start tickerWait intervalCollect metrics• CPU usage• Memory stats• Interface I/OPOST heartbeatto backend API

Loop heartbeat tidak pernah berhenti. Heartbeat yang gagal dicatat, tetapi agen tetap beroperasi.


Permintaan Heartbeat

Titik Akhir (Endpoint):

POST /api/sensors/:sensorId/agent/heartbeat

Header:

HeaderNilai
Content-Typeapplication/json
X-Sensor-TokenToken sensor yang tahan lama dari pendaftaran

Payload:

{
"sensorToken": "durable-token",
"timestamp": "2025-12-19T12:00:00Z",
"cpuUsage": 25.5,
"memoryUsed": 4294967296,
"memoryTotal": 17179869184,
"memoryPercent": 25.0,
"interfaces": [
{
"name": "enp130s0f0",
"isManagement": true,
"isLoopback": false,
"isVirtual": false,
"isWireless": false,
"isUp": true,
"bytesSent": 1073741824,
"bytesRecv": 2147483648
}
]
}

Metrik yang Dikumpulkan

Penggunaan CPU

  • Sumber: gopsutil/cpu.Percent(time.Second, false)
  • Mengembalikan agregat penggunaan CPU di semua core sebagai persentase tunggal.
  • Jendela sampel 1 detik berarti setiap siklus heartbeat membutuhkan setidaknya 1 detik untuk pengukuran CPU.

Memori

  • Sumber: gopsutil/mem.VirtualMemory()
  • Field yang dikumpulkan:
FieldTipeDeskripsi
memoryUseduint64Memori yang digunakan (byte)
memoryTotaluint64Total memori (byte)
memoryPercentfloat64Persentase memori digunakan

Antarmuka Jaringan

  • Sumber: net.Interfaces() + gopsutil/net.IOCounters(true)
  • Setiap antarmuka pada host dilaporkan dengan:
FieldTipeDeskripsi
namestringNama antarmuka (misalnya, enp130s0f0)
isManagementboolTrue jika ini adalah antarmuka rute default
isLoopbackboolTrue untuk antarmuka loopback (lo)
isVirtualboolTrue untuk bridge Docker, veth, tun, tap, dll.
isWirelessboolTrue untuk antarmuka nirkabel (wl*, wlan*)
isUpboolTrue jika antarmuka memiliki bendera UP
bytesSentuint64Kumulatif byte terkirim (sejak boot)
bytesRecvuint64Kumulatif byte diterima (sejak boot)

Aturan Klasifikasi Antarmuka

Agen mengklasifikasikan setiap antarmuka jaringan menggunakan aturan berikut:

KlasifikasiMetode Deteksi
ManagementNama antarmuka cocok dengan perangkat rute default dari ip route show default
LoopbackBendera net.FlagLoopback diatur, atau namanya adalah lo
VirtualNama dimulai dengan: veth, docker, br-, virbr, vnet, tun, tap
WirelessNama dimulai dengan: wl, wlan

Klasifikasi ini membantu backend menentukan antarmuka mana yang layak untuk penyebaran sensor virtual. Antarmuka management, loopback, virtual, dan wireless biasanya tidak layak untuk pengambilan paket (packet capture).


Interval Heartbeat

Interval antar heartbeat ditentukan oleh dua sumber:

  1. Dari respons pendaftaran — Backend mengirimkan heartbeatIntervalSeconds selama pendaftaran, dan agen mengadopsi nilai ini.
  2. Dari variabel lingkunganHEARTBEAT_INTERVAL mengatur interval awal (default: 30 detik). Ini digunakan untuk periode pra-pendaftaran; setelah terdaftar, nilai yang diberikan backend akan didahulukan.

Pemrosesan Backend

Saat backend menerima heartbeat:

  1. Memvalidasi header X-Sensor-Token.
  2. Menyimpan metrik CPU dan memori di InfluxDB (pengukuran sensor_metrics).
  3. Memperbarui stempel waktu lastHeartbeatAt milik sensor.
  4. Menyimpan status antarmuka untuk inventaris antarmuka backend (SensorNetworkInterface).
  5. Memperbarui status online/offline berdasarkan kebaruan heartbeat.

Frontend kemudian menanyakan metrik ini untuk:

  • Lencana kesehatan sensor (Sehat / Peringatan / Kritis berdasarkan ambang batas CPU/memori).
  • Status online/offline (heartbeat lebih baru dari 5 menit = online).
  • Daftar antarmuka pada halaman detail sensor.

Mode Kegagalan

SkenarioPerilaku
Pengumpulan metrik CPU gagalHeartbeat mengembalikan error, dicatat, loop berlanjut
Pengumpulan metrik memori gagalHeartbeat mengembalikan error, dicatat, loop berlanjut
Pengumpulan antarmuka gagalHeartbeat mengembalikan error, dicatat, loop berlanjut
Backend tidak terjangkauError HTTP dicatat, loop berlanjut
Backend mengembalikan non-200Error dicatat dengan kode status, loop berlanjut
Kegagalan JSON marshalingError dicatat, loop berlanjut

Loop heartbeat dirancang agar resilien — tidak ada kegagalan tunggal yang menyebabkan agen berhenti. Hal ini memastikan pemantauan terus-menerus bahkan selama masalah jaringan sementara.