Merilis, dan Bekerja Sebagai Developer · 3/8
Log, error, dan monitoring
Mengetahui ada yang rusak sebelum pengguna mengadu ke managermu.
Baca 25 menit
Setelah pelajaran ini kamu bisa
- Menulis baris log yang tetap berguna enam bulan kemudian
- Memilih level yang tepat untuk sebuah pesan
- Tidak pernah mencatat rahasia atau data pribadi
- Menjelaskan apa yang perlu dijadikan alert dan apa yang cukup dicatat
Di production kamu tidak bisa menyambungkan debugger atau menambah console.log lalu memuat ulang. Log adalah satu-satunya jendelamu ke apa yang terjadi, dan ia hanya berguna kalau kamu menulisnya sebelum kamu membutuhkannya.
Logging terstruktur
Baris log yang dibangun dengan menggabungkan string bisa dibaca manusia dan tidak oleh apa pun lagi. Log terstruktur berupa JSON, yang berarti kamu bisa mencari, memfilter, dan menghitungnya.
Logger terstruktur dengan level dan penyensoran rahasia. Penyensorannya adalah bagian yang layak dibangun dengan hati-hati.
Hasil
Tekan Jalankan untuk melihat hasilnya.
Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.
| Level | Artinya | Seseorang sebaiknya |
|---|---|---|
debug | Detail untuk diagnosis | Tidak ada. Dimatikan di production. |
info | Sesuatu yang normal terjadi | Tidak ada. Berguna secara agregat. |
warn | Berhasil pulih, tapi mencurigakan | Lihat minggu ini |
error | Sebuah request gagal | Lihat hari ini |
fatal | Proses tidak bisa lanjut | Dibangunkan dari tidur |
Monitoring dan alerting
Log memberitahumu apa yang terjadi setelah kamu mencarinya. Monitoring memberitahumu ada yang salah sebelum penggunanya memberitahu. Perbedaan yang penting adalah antara apa yang kamu catat dan apa yang membangunkan seseorang.
- Beri alert untuk gejala yang dirasakan pengguna — tingkat error, latensi, kegagalan checkout. Bukan CPU 80%, yang bisa jadi sepenuhnya normal.
- Beri alert pada laju, bukan pada satu kejadian. Satu error 500 itu derau; lima puluh dalam satu menit itu insiden.
- Setiap alert harus bisa ditindaklanjuti. Kalau satu-satunya respons adalah "lihat lalu abaikan", hapus — alert yang berisik melatih orang untuk mengabaikan alert yang sungguhan.
- **Lacak *tingkat* error, bukan jumlah error.** Seratus error dari sejuta itu wajar; seratus dari dua ratus itu gangguan layanan.
Tugas praktik
Tambahkan logger terstruktur kecil ke proyek ini — sebuah function yang menerima level, pesan, dan object konteks, lalu mencetak JSON — dan pakai di signInAction untuk mencatat login yang gagal beserta nama yang dicoba tapi jangan pernah password-nya. Lalu picu sebuah kegagalan dan baca barisnya. Pastikan password-nya tidak muncul di mana pun.
Hasil yang diharapkan
Satu baris JSON berisi nama dan kode alasan, tanpa kredensial di mana pun.