Observability: Biar Sistem Kamu Bisa “Ngomong” Saat Ada Masalah


Pendahuluan

Dalam dunia backend, kita sudah akrab dengan istilah seperti logging, monitoring, dan alert. Biasanya semua itu baru benar-benar kita perhatikan saat sistem mulai bermasalah: API terasa lambat, error 500 muncul, atau database tiba-tiba penuh.

Masalahnya, setelah alarm berbunyi, sering kali kita masih bingung:

  • Ini error dari mana?
  • Kenapa tiba-tiba lambat?
  • Yang salah database, server, atau kodenya?

Di sinilah observability jadi penting.

Observability membantu sistem kamu “bercerita” tentang apa yang sebenarnya terjadi di dalamnya, tanpa perlu banyak menebak.


Apa Itu Observability?

Sederhananya, observability adalah kemampuan sistem untuk menjelaskan kondisi internalnya lewat data yang dia hasilkan.

Artinya, hanya dari output seperti log, angka statistik, dan jejak request, kita bisa memahami:

  • Apa yang sedang terjadi
  • Di bagian mana masalah muncul
  • Kenapa masalah itu bisa terjadi

Observability bukan sekadar tool atau dashboard. Ini adalah cara berpikir saat membangun sistem.


Monitoring dan Observability Itu Beda

Monitoring biasanya menjawab pertanyaan dasar seperti:

  • Apakah server hidup?
  • Apakah CPU penuh?
  • Apakah error rate naik?

Observability melangkah lebih jauh. Ia menjawab pertanyaan seperti:

  • Kenapa error rate naik?
  • Request mana yang paling lambat?
  • Bottleneck terjadi di mana?

Monitoring memberi sinyal bahwa ada masalah. Observability membantu kamu menemukan penyebabnya.


Tiga Pilar Observability

Secara umum, observability dibangun dari tiga jenis data utama.

Logs

Logs adalah catatan kejadian yang terjadi di dalam sistem.

Contohnya:

  • Request masuk ke endpoint tertentu
  • Validasi gagal
  • Query database error

Log yang baik bukan cuma berisi pesan error, tapi juga konteks, seperti endpoint, parameter penting, dan waktu kejadian. Dengan begitu, saat ada masalah, kamu bisa menelusuri apa yang terjadi tanpa harus menebak-nebak.


Metrics

Metrics adalah angka-angka yang menggambarkan kondisi sistem secara keseluruhan.

Beberapa contoh metrics yang sering dipakai:

  • Jumlah request per detik
  • Waktu respon rata-rata
  • Persentase error
  • Jumlah koneksi database

Metrics membantu melihat pola. Misalnya, sistem terlihat normal, tapi setiap jam tertentu latency naik. Itu tanda ada sesuatu yang perlu diperhatikan.


Traces

Tracing memperlihatkan perjalanan satu request dari awal sampai akhir.

Misalnya satu request API melewati middleware, cache, database, lalu kembali ke client. Dari sini kamu bisa tahu bagian mana yang paling lama dan apakah cache benar-benar membantu atau tidak.

Tracing sangat berguna ketika sistem mulai kompleks dan terdiri dari banyak lapisan.


Kenapa Observability Penting?

Tanpa observability, debugging sering berubah jadi aktivitas menebak.

Kita restart server, menaikkan limit, atau menambah resource tanpa benar-benar tahu apakah itu solusi yang tepat.

Dengan observability:

  • Masalah lebih cepat terlihat
  • Akar masalah lebih mudah ditemukan
  • Keputusan bisa diambil berdasarkan data

Ini terasa sekali saat traffic mulai naik atau saat melakukan stress test.


Contoh Kasus Sederhana

Bayangkan kamu punya API untuk validasi key.

Tanpa observability, yang terlihat hanya: API sering kena error atau 429.

Dengan observability, kamu bisa tahu bahwa:

  • 429 muncul karena rate limit aktif
  • Sebagian besar request datang dari IP yang sama
  • Cache sering miss sehingga database sering dipanggil
  • Query database sebenarnya cepat, tapi antri

Masalah yang awalnya terasa rumit jadi jauh lebih jelas.


Observability Tidak Harus Ribet

Observability tidak selalu berarti setup tool besar dan mahal.

Bisa dimulai dari hal sederhana:

  • Log yang konsisten dan punya konteks
  • Mencatat waktu respon request
  • Menghitung jumlah error per endpoint

Seiring sistem berkembang, barulah ditambahkan dashboard, centralized logging, atau tracing.

Yang penting, sistem dibuat supaya mudah dipahami saat ada masalah.


Contoh Observability dalam Kasus Nyata

Agar observability tidak terasa abstrak, mari lihat beberapa contoh sederhana yang sering terjadi di API backend.

Contoh 1: API Terasa Lambat

Kondisi:
Pengguna mengeluh API kadang cepat, kadang lambat.

Tanpa observability:

  • Kita hanya tahu API lambat
  • Solusi sering berupa tebakan: restart server atau naikkan resource

Dengan observability:

  • Metrics menunjukkan latency naik saat traffic tinggi
  • Tracing menunjukkan bottleneck ada di query database
  • Logs memperlihatkan query tertentu sering dipanggil berulang

Kesimpulan:
Masalah bukan di server, tapi di query dan kurangnya cache.


Contoh 2: Banyak HTTP 429

Kondisi:
Saat stress test atau production, API sering mengembalikan HTTP 429.

Tanpa observability:

  • Terlihat seperti error
  • Tidak jelas siapa penyebabnya

Dengan observability:

  • Metrics menunjukkan lonjakan request dari IP tertentu
  • Logs mencatat IP dan endpoint yang sering dipanggil
  • Terlihat rate limit bekerja sesuai desain

Kesimpulan:
429 bukan bug, tapi mekanisme proteksi yang aktif.


Contoh 3: Database Terlihat Sibuk Tapi CPU Rendah

Kondisi:
Database terasa lambat, tapi CPU usage rendah.

Tanpa observability:

  • Dugaan awal: database kurang kuat
  • Solusi: upgrade server

Dengan observability:

  • Metrics menunjukkan jumlah koneksi sedikit
  • Tracing menunjukkan query dieksekusi satu per satu
  • Logs menunjukkan koneksi sering dibuka dan ditutup

Kesimpulan:
Masalah ada di manajemen koneksi, bukan performa database.


Contoh 4: Validasi Key di API

Misalnya ada endpoint untuk validasi key:

POST /api/validate-key

Tanpa observability:

  • Setiap request langsung ke database
  • Sulit tahu berapa request valid atau invalid

Dengan observability:

  • Logs mencatat key valid dan invalid (tanpa menyimpan nilai sensitif)
  • Metrics menunjukkan rasio cache hit dan cache miss
  • Tracing menunjukkan cache menghemat waktu respon

Kesimpulan:
Observability membantu memastikan desain API bekerja sesuai harapan.


Observability Bisa Dimulai dari Hal Kecil

Observability tidak harus langsung kompleks.

Langkah awal yang realistis:

  • Log dengan struktur yang konsisten
  • Catat waktu respon request
  • Hitung jumlah error per endpoint

Dari situ, baru ditingkatkan ke metrics dan tracing jika dibutuhkan.


Penutup

Observability membantu kita berhenti menebak dan mulai memahami.

Sistem yang observable bukan berarti bebas masalah, tapi saat masalah muncul, kita tahu harus mulai dari mana.

Kalau monitoring memberi alarm, observability memberi penjelasan.

Dan di sistem modern, penjelasan itu jauh lebih berharga daripada sekadar tahu bahwa ada masalah.

Leave a Reply

Your email address will not be published. Required fields are marked *