Production Troubleshooting
Metode sistematis mendiagnosis masalah produksi: 5xx, latency, resource, database, deployment, dan rollback.
Saat produksi bermasalah, prioritasnya adalah memulihkan layanan, lalu menemukan akar masalah. Panik dan perubahan acak memperburuk keadaan.
Urutan penanganan insiden
- Deteksi — alert atau laporan pengguna.
- Triage — seberapa luas dampaknya?
- Mitigasi — rollback, restart, failover, atau disable fitur.
- Diagnosa — kumpulkan metrik, log, trace.
- Perbaikan — perbaiki akar masalah.
- Postmortem — dokumentasikan dan cegah berulang.
Jangan langsung restart
Restart menghapus bukti. Jika memungkinkan, ambil log, metrik, dan status proses terlebih dahulu.
Peta gejala
| Gejala | Area yang dicek |
|---|---|
| 502 Bad Gateway | Proxy, app down, port salah |
| 504 Gateway Timeout | App lambat, DB lambat, timeout proxy |
| 500 Internal Server Error | Exception aplikasi, dependency |
| Latency naik | CPU, DB, cache, network |
| Error rate naik setelah deploy | Rollback |
| Disk penuh | Log, image, database |
| Koneksi DB habis | Pool, leak, query lambat |
1. Cek status layanan
systemctl status nginx --no-pager
pm2 list
docker compose ps
curl -I https://app.example.com
curl -f http://127.0.0.1:3000/health2. Log
journalctl -u nginx -n 100
journalctl -u app -n 100
pm2 logs app-prod --lines 200
docker compose logs --tail=200 app
tail -f /var/log/nginx/error.logCari error pertama, bukan hanya error terakhir. Perhatikan timestamp dan korelasi dengan deploy.
3. Resource
uptime
free -h
df -h
top -o %CPU
iostat -xz 1
ss -s| Gejala | Kemungkinan |
|---|---|
| Load tinggi, CPU penuh | Loop, traffic, build di server |
| RAM habis, swap aktif | Memory leak, kapasitas kurang |
| Disk 100% | Log tidak rotasi, image menumpuk |
wa tinggi | Storage lambat |
4. Database
psql -h 10.10.10.20 -U app -d app -c "select pid, state, query_start, query from pg_stat_activity;"Cek:
- Koneksi aktif vs batas pool.
- Query lambat.
- Lock.
- Replikasi tertinggal.
- Disk database.
SELECT pid, now() - query_start AS durasi, query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY durasi DESC
LIMIT 10;5. Jaringan
ss -tulpn
nc -zv 10.10.10.20 5432
dig +short app.example.com
curl -v https://app.example.com
tcpdump -i any -n port 54326. Deployment
git log --oneline -5
pm2 describe app-prod
docker inspect <container> | grep -i imagePertanyaan penting:
- Apa yang berubah sebelum insiden?
- Apakah deploy berhasil health check?
- Apakah migrasi berjalan?
- Apakah konfigurasi berubah?
Mitigasi cepat
| Tindakan | Kapan |
|---|---|
| Rollback | Error muncul setelah deploy |
| Restart service | Proses hang, memory leak sementara |
| Scale out | Traffic naik |
| Disable feature flag | Fitur baru bermasalah |
| Failover DB | Primary bermasalah |
| Increase timeout | Bukan solusi permanen, hanya mitigasi |
Rollback
export IMAGE_TAG=git-<sha-stabil>
docker compose pull
docker compose up -d
curl -f https://app.example.com/healthUntuk Nginx blue-green, arahkan upstream ke versi lama lalu reload.
Runbook insiden
Simpan runbook yang berisi:
- Kontak on-call.
- URL dashboard dan log.
- Perintah cek status.
- Prosedur rollback.
- Prosedur failover database.
- Lokasi backup.
- Batas waktu eskalasi.
Runbook harus diuji, bukan hanya disimpan.
Postmortem blameless
Struktur:
- Ringkasan insiden.
- Dampak dan durasi.
- Timeline.
- Akar masalah.
- Tindakan mitigasi.
- Tindakan pencegahan dengan owner dan tenggat.
Fokus pada sistem, bukan menyalahkan individu.
Checklist troubleshooting
- Konfirmasi dampak dan mulai timeline.
- Cek status service dan health endpoint.
- Ambil log sebelum restart.
- Cek CPU, RAM, disk, dan jaringan.
- Cek database dan koneksi.
- Korelasikan dengan deploy/perubahan.
- Mitigasi dan verifikasi pemulihan.
- Tulis postmortem.
Ringkasan
- Pulihkan dulu, diagnosa kemudian.
- Gunakan urutan: status, log, resource, database, jaringan, perubahan.
- Rollback adalah mitigasi utama untuk error pasca-deploy.
- Postmortem blameless mencegah insiden berulang.
Selanjutnya
Perkuat edge di Advanced Reverse Proxy & Load Balancing.
Zero-Downtime Deployment
Teknik merilis tanpa menghentikan layanan: multiple instance, health check, graceful shutdown, connection draining, dan reload bertahap.
Advanced Reverse Proxy & Load Balancing
Konfigurasi Nginx lanjutan untuk upstream, header, timeout, buffering, WebSocket, rate limit, cache, dan TLS.