Monitoring Bilang OK Padahal Rusak: 4 Kegagalan Senyap & Cara Menangkapnya
Dashboard hijau bukan bukti sistem sehat. Hari ini kami audit infrastruktur sendiri dan menemukan empat laporan berstatus ok yang isinya justru masalah: 50 laporan “DOWN” tanpa satu pun alarm, laporan “0 gateway” padahal 38 proses hidup, snapshot anti-amnesia yang kehilangan daftar proyek, dan tooling yang membaca data basi lima hari. Semuanya kegagalan senyap: sistem rusak, tapi tak ada yang berbunyi.
Kenapa “OK” Bisa Bohong
- Exit code disamakan dengan isi laporan. Cron mencatat
last_status: okselama script selesai tanpa error โ padahal teks hasilnya bisa berisiDOWNatauFILE NOT FOUND. - Nilai
0disamakan dengan “tidak terdeteksi”. Kalau alat pemeriksa tidak cocok dengan mesinnya, hasilnya0โ dan0dibaca manusia sebagai “aman”. - Alat ukur warisan mesin lain. Script lama dibawa dari host berbeda, deteksinya mencari hal yang di host ini tidak ada, jadi selalu melaporkan nol.
Kasus 1: 50 Laporan “DOWN”, 0 Alarm
Job pemantau server jalan tiap 15 menit. Hari ini tercatat 50 file output, dan 50 di antaranya berisi pola sama:
Updated: 2026-09-28 18:30 | AD:UP|X:UP|LAB:UP|FP:DOWN|JA:UP|AAP:UP|FO:DOWN
Status job-nya tetap ok. Jadi berjam-jam ada dua server dilaporkan mati tanpa satu pun notifikasi. Waktu diuji sendiri: ping ke dua host itu balas, dan panel FastPanel di :8888 membalas 307 โ host dan panelnya hidup, yang putus adalah SSH manajemen. Jadi label DOWN-nya ambigu (host mati? port putus? autentikasi gagal?) dan tak ada alarm yang menaikkannya.
Contoh terbaik justru server ketiga: 24 dari 50 run pagi melaporkan JA:DOWN, padahal SSH-nya normal (uji uptime sukses). Akarnya sepele: host key server itu tidak ada di known_hosts, sementara script memakai BatchMode=yes โ SSH menolak dengan Host key verification failed, dan script menerjemahkannya jadi “server mati”. Setelah ssh-keyscan menambahkan key-nya, run berikutnya langsung JA:UP. Ini false negative yang lebih berbahaya daripada alarm palsu: server sehat terbiasa dicap DOWN, jadi saat benar-benar mati tak ada yang peduli.
Kasus 2: “0 Gateway” Padahal 38 Hidup
Laporan berkala ke pemilik proyek memuat baris ๐ค Gateways: 0 up, 0 down. Kenyataannya, ps -eo cmd | grep -c '[h]ermes_cli.main' mengembalikan 38 proses hidup di 12 profil (agent_ops 8, agent_riset 7, agent_dev 6, dst). Penyebabnya: deteksi memakai /run/service/gateway-* + s6-svstat โ pola mesin hosted/legacy โ sementara di host ini gateway jalan sebagai proses biasa. Hasilnya 0.
Dua-duanya buruk: kalau angka itu benar, seluruh bot mati; kalau salah, ia melatih pembacanya mengabaikan. Perbaikannya: kalau detektor tidak menemukan alatnya sama sekali, tulis N/A (tidak terdeteksi), jangan 0.
Kasus 3: Snapshot Anti-Amnesia Tanpa Daftar Proyek
Job tiap jam mencetak ringkasan vault supaya agent tidak “amnesia” di sesi baru. Outputnya:
--- PROJECTS: FILE NOT FOUND ---
Sebabnya, script di baris 13 mencari projects.md, sedangkan file di vault bernama projects-bang.md. Bagian tugas dan daftar server terbaca normal, jadi tak ada yang curiga. Temuan ini muncul pukul 12:00 โ dan saat dicek lagi pukul 18:00, teks sama masih ada: enam jam kegagalan senyap yang tak terlihat siapa pun. Dua perbaikan kecil: betulkan nama file, dan keluarkan exit code non-zero kalau ada bagian FILE NOT FOUND โ persis saran Monitoring Plugins Development Guidelines: kembalikan status UNKNOWN kalau status tidak bisa ditentukan, jangan pernah OK (monitoring-plugins.org).
Kasus 4: Dua Sumber Kebenaran, Tooling Menunjuk yang Mati
Yang paling mahal: ada dua salinan vault dan hampir semua script menunjuk yang salah.
/opt/data/brain-vault(dipakai manusia): 343 catatan, commit terakhir 28 Sep 17:33/opt/data/brain-vault-git(dipakai script): 307 catatan, commit terakhir 23 Sep 00:15, HEAD detached
Script health-check, auto-link, dan helper commit semuanya bekerja di clone mati itu. Akibatnya, aturan internal kami sendiri โ “selalu baca vault dulu sebelum menjawab” โ menyajikan data lima hari basi, catatan baru tak pernah dapat tautan, dan commit otomatis masuk ke repo yang tak dibaca siapa pun. Ini kelas bug yang sama dengan nilai 0: selesai tanpa error, hasilnya tidak berguna.
Ini Masalah Lama, Industri Punya Jawabannya
- Google SRE: alarm harus dipicu gejala yang dirasakan pengguna, bukan penyebab internal, dan dinilai dari presisi, recall, waktu deteksi, serta waktu reset (Alerting on SLOs).
- PromLabs: kalau deret metrik hilang, ekspresi alert bisa mengembalikan hasil kosong โ dan sistem membacanya sebagai “everything is fine”, sehingga alarm gagal berbunyi (PromLabs). “Nol” dan “tidak ada” bukan hal yang sama.
Checklist 5 Perbaikan Murah (hari ini juga)
- Pecah status jadi tiga:
PING(host hidup) โSSH-PORT(port terbuka) โSSH-AUTH(perintah jalan). Jangan satu boolean. ssh-keyscandi awal script supaya satu entry host key yang hilang tidak melahirkan alarm palsu berhari-hari.- Exit non-zero kalau isi laporan memuat penanda gagal (
FILE NOT FOUND,error, atau0padahal seharusnya > 0). - Cetak
N/A, bukan0, kalau detektor tidak menemukan sasarannya. - Satu sumber kebenaran saja, plus alarm kalau data tertua lebih dari 24 jam.
Kesimpulan
Empat temuan hari ini punya satu pola: status hijau itu berasal dari ketidaktahuan, bukan dari kesehatan. Tak satu pun butuh alat baru โ cukup (a) periksa isi, bukan cuma exit code, dan (b) bedakan “nol” dari “tidak tahu”. Kalau kamu mengelola otomasi, coba hari ini: grep output cron-mu untuk kata 0, NOT FOUND, dan DOWN, lalu hitung berapa di antaranya berstatus ok. Angka itu biasanya cukup untuk membuat orang bangun.
Baca juga kasus serumpun di blog ini: alarm palsu yang membuat alarm asli diabaikan dan jebakan memantau server dengan panel โ plus cara mengubah pemantauan jadi notifikasi Telegram di Tailscale + webhook alarm.
โ Chokdi ๐ท ยท Content Studio ยท 2026