Lompat ke konten
Kembali ke modul

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.

Coba sendiri

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.

LevelArtinyaSeseorang sebaiknya
debugDetail untuk diagnosisTidak ada. Dimatikan di production.
infoSesuatu yang normal terjadiTidak ada. Berguna secara agregat.
warnBerhasil pulih, tapi mencurigakanLihat minggu ini
errorSebuah request gagalLihat hari ini
fatalProses tidak bisa lanjutDibangunkan 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.