Cara Mengetahui Apakah Aplikasi Anda Benar-Benar Berjalan dengan Normal

Anda baru saja men-deploy versi baru. Pipeline menunjukkan hijau. Artefak sudah mendarat di production. Lalu bagaimana?

Saat aplikasi Anda hanya melayani segelintir pengguna, Anda bisa membuka browser, mengeklik sana-sini sebentar, dan memastikan semuanya berfungsi. Namun begitu aplikasi Anda melayani puluhan, ratusan, atau ribuan orang secara bersamaan, pemeriksaan manual seperti itu tidak lagi memadai. Terlalu banyak jalur kode yang harus diuji, terlalu banyak pengguna yang mengakses fitur berbeda, dan terlalu sedikit waktu untuk memverifikasi semuanya satu per satu.

Pertanyaan intinya sederhana: bagaimana Anda tahu bahwa versi baru benar-benar berjalan sesuai harapan setelah deployment?

Apa yang Diceritakan oleh Sinyal Kesehatan

Setiap aplikasi yang berjalan menghasilkan tanda-tanda apakah ia sehat atau tidak. Anggap saja ini sebagai tanda vital. Dokter memeriksa denyut nadi dan suhu tubuh untuk menilai kondisi pasien. Demikian pula, Anda membutuhkan sinyal yang memberi tahu apakah aplikasi Anda hidup, merespons dengan benar, dan tetap berada dalam batas yang dapat diterima.

Sinyal-sinyal ini disebut sinyal kesehatan. Sinyal kesehatan adalah titik data yang memungkinkan Anda menentukan apakah aplikasi berfungsi normal setelah deploy, dan terus-menerus selama aplikasi berjalan.

Berikut cara cepat untuk memeriksa dua sinyal kesehatan paling umum segera setelah deploy:

# Periksa apakah endpoint health aplikasi merespons
curl http://localhost:8080/health

# Output yang diharapkan (contoh):
# {"status":"ok","uptime":"2m34s"}

# Cari log aplikasi untuk error terkini
grep 'ERROR' /var/log/app.log | tail -20

Sinyal kesehatan berasal dari beberapa sumber, dan masing-masing memiliki tujuan berbeda.

Log: Kisah Mentah tentang Apa yang Terjadi

Log adalah bentuk sinyal kesehatan yang paling dasar. Setiap kali aplikasi Anda menerima permintaan, gagal terhubung ke database, atau selesai memproses sebuah pekerjaan, aplikasi dapat menulis satu baris yang menjelaskan apa yang terjadi. Log memberi Anda catatan kronologis peristiwa.

Saat pengguna mulai melaporkan error, log sering kali menjadi tempat pertama yang Anda lihat. Anda membuka file log atau alat pencarian, memfilter berdasarkan jendela waktu saat masalah dimulai, dan menelusuri ke belakang untuk menemukan apa yang salah. Log menjawab pertanyaan: "Apa yang terjadi tepat sebelum error ini?"

Namun log memiliki keterbatasan. Bayangkan membaca ribuan baris log per menit hanya untuk memastikan semuanya normal. Itu tidak praktis. Log sangat baik untuk debugging, tetapi tidak efisien untuk penilaian kesehatan berkelanjutan.

Metrik: Angka yang Menunjukkan Tren

Metrik memecahkan masalah volume yang diciptakan oleh log. Alih-alih membaca peristiwa individual, Anda mengumpulkan pengukuran numerik pada interval reguler. Metrik umum meliputi:

  • Berapa banyak permintaan yang tiba per detik
  • Waktu respons rata-rata
  • Persentase permintaan yang mengembalikan error
  • Penggunaan memori
  • Utilisasi CPU

Dengan metrik, Anda melihat tren dari waktu ke waktu. Jika waktu respons tiba-tiba berlipat ganda, itu adalah tanda peringatan meskipun belum ada error yang terjadi. Jika penggunaan memori terus meningkat selama berhari-hari, Anda mungkin sedang menghadapi kebocoran memori yang pada akhirnya akan membuat aplikasi crash.

Metrik memungkinkan Anda mendeteksi masalah sebelum masalah tersebut terlihat oleh pengguna. Metrik memampatkan ribuan peristiwa menjadi satu angka yang dapat Anda lacak dan beri peringatan.

Monitoring: Mengumpulkan, Menampilkan, dan Memberi Peringatan

Log dan metrik perlu dikumpulkan dan ditampilkan di suatu tempat yang dapat Anda pantau secara terus-menerus. Proses itu disebut monitoring. Monitoring bukan sekadar mengumpulkan data. Monitoring adalah membuat data tersebut berguna.

Pengaturan monitoring yang baik melakukan tiga hal:

  1. Mengumpulkan log dan metrik dari aplikasi dan infrastruktur Anda
  2. Menampilkan data tersebut di dashboard sehingga Anda dapat melihat status terkini sekilas
  3. Memberi peringatan saat sesuatu berada di luar batas normal

Misalnya, Anda dapat menetapkan aturan: jika lebih dari lima persen permintaan gagal dalam jendela lima menit, kirim notifikasi. Peringatan itu bisa tiba sebagai notifikasi ponsel, email, atau pesan di chat tim. Tujuannya adalah mengetahui masalah sebelum pengguna Anda memberi tahu.

Mengapa Sinyal Kesehatan Penting Sejak Awal

Semakin awal Anda mendeteksi masalah, semakin cepat Anda dapat merespons. Jika Anda baru menyadari aplikasi Anda rusak setelah pengguna membanjiri media sosial dengan keluhan, masalah sudah berjalan cukup lama. Dalam konteks CI/CD, sinyal kesehatan berfungsi sebagai langkah verifikasi Anda setelah deployment. Sinyal kesehatan menjawab: "Apakah rilis ini benar-benar berfungsi di production?"

Tanpa sinyal kesehatan, Anda melakukan deploy secara buta. Anda mendorong versi baru, berharap yang terbaik, dan menunggu seseorang mengeluh. Dengan sinyal kesehatan, Anda tahu dalam hitungan menit apakah rilis stabil atau perlu di-rollback.

Sinyal kesehatan juga menangkap masalah yang muncul secara bertahap. Kebocoran memori mungkin membutuhkan waktu berjam-jam atau berhari-hari untuk menyebabkan masalah yang terlihat. Degradasi lambat dalam waktu respons mungkin tidak disadari oleh pengguna hingga melewati ambang batas. Pemantauan sinyal kesehatan secara terus-menerus menangkap masalah yang bergerak lambat ini sebelum berdampak pada pengguna.

Daftar Periksa Sinyal Kesehatan Praktis

Jika Anda baru pertama kali menyiapkan sinyal kesehatan, berikut adalah daftar periksa minimal untuk memulai:

  • Pilih tiga metrik untuk memulai: tingkat keberhasilan permintaan, waktu respons rata-rata, dan jumlah error. Ini mencakup mode kegagalan yang paling umum.
  • Tetapkan satu peringatan: beri tahu tim Anda ketika tingkat error melebihi lima persen selama lima menit berturut-turut.
  • Periksa log setelah setiap deploy: meskipun metrik terlihat baik, pindai log untuk mencari error yang tidak terduga dalam sepuluh menit pertama setelah rilis.
  • Tambahkan endpoint health: buat URL sederhana yang mengembalikan status aplikasi. Alat monitoring dapat mengakses endpoint ini setiap beberapa detik untuk memastikan aplikasi masih hidup.

Ini belum komprehensif, tetapi cukup untuk menangkap sebagian besar masalah yang terjadi setelah deploy.

Intisari

Sinyal kesehatan mengubah deployment dari dorongan buta menjadi proses yang dapat diverifikasi. Log memberi Anda kisah tentang apa yang terjadi. Metrik menunjukkan tren dari waktu ke waktu. Monitoring menghubungkan semuanya dan memberi peringatan saat ada yang salah. Mulailah dengan dasar-dasar: beberapa metrik, satu peringatan, dan kebiasaan memeriksa setelah setiap deploy. Itu saja sudah cukup untuk menangkap sebagian besar masalah sebelum pengguna Anda melakukannya.