Tools: Membangun Observability GBIM: Metrics Bisnis, Correlation ID, dan k6 Smoke Test (2026)

Tools: Membangun Observability GBIM: Metrics Bisnis, Correlation ID, dan k6 Smoke Test (2026)

Ringkasan

Masalah Awal

Batasan Klaim

Solusi yang Dibangun

1. Backend Metrics

2. Correlation ID End-to-End

3. k6 Smoke Test dan Dashboard Grafana

4. Frontend Analytics sebagai Sinyal Tambahan

Mapping ke CPL 6

Criterion 1: Built-in Platform Monitoring

Criterion 2: Standard Tool Setup with Live Data

Criterion 3: Kustomisasi Sesuai Pekerjaan

Criterion 4: Advanced Usage

Kesimpulan Membangun Observability GBIM: Metrics Bisnis, Correlation ID, dan k6 Smoke Test Iterasi monitoring GBIM akhirnya difokuskan pada tiga hal yang benar-benar bisa dibuktikan dari implementasi saat ini: custom metrics Prometheus, correlation ID end-to-end, dan k6 smoke test yang mengirim telemetry ke Prometheus/Grafana. Frontend juga menambahkan analytics event GA4 sebagai sinyal aktivitas pengguna, tetapi bukti utama untuk CPL 6 tetap berada pada Prometheus, Grafana, k6, dan log request. Sebelum perubahan monitoring ini, stack Prometheus dan Grafana sudah ada, tetapi bukti observability masih kurang kuat: Bagian ini penting supaya klaim monitoring sesuai dengan yang benar-benar dikerjakan. Yang diklaim selesai: Backend menambahkan custom metric Prometheus untuk flow yang penting secara operasional. Metric utama berada di monitoring/metrics.py dan dinaikkan dari flow autentikasi, aktivasi, verifikasi akun admin, serta update status pengajuan admin. Metric yang menjadi fokus: Selain itu, beberapa domain lain juga memiliki metric khusus seperti account verification, pengajuan service, kegiatan, dan document upload. Dengan metric ini, Grafana tidak hanya membaca request HTTP, tetapi juga bisa menjawab pertanyaan bisnis seperti: Frontend menambahkan header X-Correlation-ID dari lib/api.ts pada request API normal dan refresh token. Backend memiliki CorrelationIdMiddleware yang: Log backend memakai CorrelationIdFilter, sehingga format log memiliki field corr_id. Dampaknya, ketika frontend mendapatkan error dari backend, correlation ID di response bisa langsung dipakai untuk mencari log request yang sama di backend. k6 dipakai untuk membuat telemetry performa yang bisa masuk ke dashboard Grafana. Implementasinya terdiri dari: Smoke test k6 memukul endpoint yang relevan untuk monitoring: Script k6 juga mengirim X-Correlation-ID dan X-Forwarded-Proto: https, sehingga request synthetic tetap mengikuti pola observability dan konfigurasi reverse proxy/SSL yang dipakai backend. Frontend menambahkan helper lib/analytics.ts untuk mengirim event GA4. Helper ini tidak mengirim event jika window.gtag tidak tersedia, dan hanya aktif jika: Event yang diinstrumentasi: Pada akhir implementasi, pipeline FE juga perlu meneruskan variable analytics ke Docker build karena variable NEXT_PUBLIC_* di Next.js dibaca saat build. Tanpa itu, tag GA tidak muncul di bundle staging walaupun kode analytics sudah ada. [Placeholder SS-06] GA4 Realtime atau DebugView menampilkan page view/event dari staging setelah variable CI/CD FE terpasang dan frontend dideploy ulang. Monitoring sudah masuk ke lifecycle aplikasi, bukan hanya screenshot manual. Backend mengekspos /api/metrics, Prometheus melakukan scrape, dan Grafana membaca data dari Prometheus. k6 juga dijalankan sebagai Job Kubernetes sehingga telemetry performa bisa masuk ke jalur monitoring yang sama. Correlation ID memperkuat sisi platform monitoring karena request tidak hanya terlihat secara agregat di metric, tetapi juga bisa ditelusuri sampai log backend. Ini membuat investigasi error lebih operasional: dari error frontend, ambil X-Correlation-ID, lalu cari corr_id yang sama di backend. Tool yang digunakan adalah tool standar industri: Data yang ditampilkan bukan mock statis. Custom metric naik dari flow aplikasi, k6 mengirim metric hasil request synthetic, dan correlation ID muncul dari request yang benar-benar melewati frontend/backend. Kustomisasi monitoring dibuat berdasarkan flow GBIM yang memang penting: Label seperti role, outcome, action, dan status membuat dashboard bisa membedakan kasus sukses, validasi gagal, duplicate email, token invalid, token expired, not found, server error, dan service error. Ini lebih bermakna daripada hanya melihat CPU, memory, atau HTTP 200/500. Advanced usage pada implementasi final terletak pada gabungan telemetry performa dan traceability: Hasil akhir monitoring GBIM bukan sekadar "Grafana sudah ada", tetapi observability yang bisa menjawab pertanyaan operasional: Scope yang benar-benar selesai adalah metrics bisnis, k6 telemetry, correlation ID end-to-end, dan analytics frontend sebagai tambahan. Templates let you quickly answer FAQs or store snippets for re-use. as well , this person and/or - Endpoint metrics masih lebih banyak menampilkan telemetry HTTP generik, belum banyak outcome bisnis GBIM.

- Dashboard k6 masih berisiko kosong karena belum ada alur yang konsisten untuk menjalankan k6 dan menulis hasilnya ke Prometheus remote write.- Request dari frontend ke backend belum mudah ditelusuri saat error karena correlation ID belum konsisten dibawa, divalidasi, dan dikembalikan.- Aktivitas penting pengguna seperti registrasi, aktivasi akun, verifikasi akun admin, dan update status pengajuan belum punya sinyal monitoring yang eksplisit. - Backend mengekspos /api/metrics dan custom metric gbm_*.- Prometheus/Grafana membaca metric backend dan metric k6.- k6 smoke test tersedia sebagai script dan Kubernetes Job.- Frontend mengirim X-Correlation-ID, backend memvalidasi/menghasilkan ID, lalu mengembalikannya di response.- Backend log memakai corr_id melalui logging filter.- Frontend analytics helper GA4 tersedia dan dibatasi untuk host/environment yang diizinkan. - gbm_auth_register_total{role,outcome}- gbm_auth_activation_total{outcome}- gbm_auth_reactivation_total{outcome}- gbm_auth_email_send_duration_seconds{event,outcome}- gbm_admin_account_verification_total{action,outcome}- gbm_pengajuan_admin_status_update_total{status,outcome} - Berapa banyak registrasi yang sukses atau gagal validasi?- Apakah aktivasi akun sering gagal karena token invalid, expired, atau rate limited?- Apakah admin verification gagal pada list, detail, atau update status?- Apakah update status pengajuan gagal karena validasi, data tidak ditemukan, atau error service? - Membaca header X-Correlation-ID dari request.- Menerima nilai yang valid jika berbentuk UUID.- Mengganti nilai yang kosong/tidak valid dengan UUID baru.- Menyimpan ID ke context logging.- Mengembalikan ID yang sama di response header X-Correlation-ID. - Script k6/monitoring-smoke.js.- Kubernetes Job k8s/job/k6-monitoring-smoke.yaml.- Output k6 experimental-prometheus-rw.- Remote write ke http://prometheus:9090/api/v1/write.- Tag testid=monitoring-smoke agar metric k6 mudah difilter di Grafana.- Prometheus dijalankan dengan argumen --web.enable-remote-write-receiver. - /api/monitoring/health/- /api/metrics- /api/auth/activation/?token=... untuk skenario token invalid/rate-limited- optional register Kaprodi jika ENABLE_REGISTER_FLOW=true - NEXT_PUBLIC_GA_MEASUREMENT_ID tersedia.- NEXT_PUBLIC_APP_ENV bernilai staging atau production.- Host runtime masuk allowlist analytics, misalnya gbim-staging.ppl.cs.ui.ac.id. - register_submitted, register_success, register_failed- activation_verified, activation_expired, activation_used, activation_invalid, activation_rate_limited- reactivation_requested, reactivation_success, reactivation_failed- admin_verification_list_viewed, admin_verification_detail_clicked, admin_verification_status_updated- pengajuan_admin_status_updated - Prometheus untuk metrics.- Grafana untuk dashboard.- k6 untuk smoke/load telemetry.- Django logging dengan correlation ID untuk investigasi request.- GA4 sebagai sinyal tambahan aktivitas frontend. - Registrasi akun.- Aktivasi akun.- Reaktivasi token.- Verifikasi akun admin.- Update status pengajuan admin.- Durasi pengiriman email aktivasi/reaktivasi. - k6 menghasilkan data performa yang masuk ke Prometheus remote write dan bisa divisualisasikan di Grafana.- Correlation ID menghubungkan request frontend, response backend, dan log backend.- Custom metrics menjelaskan outcome bisnis, bukan hanya status HTTP.- Analytics frontend memberi sinyal tambahan untuk aktivitas pengguna di staging/production. - Apakah registrasi sering gagal?- Apakah aktivasi akun bermasalah?- Apakah verifikasi admin menghasilkan error?- Apakah update status pengajuan stabil?- Apakah backend tetap responsif saat diuji k6?- Request error tertentu bisa dicari di log backend lewat correlation ID apa?