Note
Debugging Server: Membaca Log (PM2, Docker, Nginx) & Troubleshooting Jaringan
#Membaca Log (PM2, Docker, Nginx) & Troubleshooting Jaringan
Pernahkah Anda mengalami situasi di mana aplikasi tiba-tiba down, layar pengguna hanya menampilkan loading panjang, atau muncul pesan error 502 Bad Gateway? Saat kepanikan melanda, langkah pertama dan paling krusial yang harus dilakukan seorang Developer atau SysAdmin adalah: Membaca Log dan Mengecek Jaringan.
Log adalah "kotak hitam" pesawat dari server Anda. Tanpanya, Anda hanya menebak-nebak dalam gelap. Dalam panduan komprehensif ini, kita akan membedah cara mencari akar masalah (debugging) menggunakan log pada PM2, Docker, dan Nginx, serta dilanjutkan dengan trik melacak masalah jaringan jika log Anda ternyata bersih dari error.
1. Membedah Log Aplikasi dengan PM2
PM2 adalah Process Manager favorit untuk aplikasi Node.js. Kelebihan PM2 adalah kemampuannya menangkap semua output dari terminal aplikasi Anda secara otomatis dan menyimpannya sebagai file teks biasa di server.
Mencari Lokasi File Log PM2
Secara bawaan, PM2 memisahkan log menjadi dua: Out log (untuk log normal/info) dan Error log (untuk error/crash). Untuk menemukan lokasinya, ketikkan:
pm2 info nama_aplikasi_anda
Perhatikan baris "error log path". Biasanya lokasinya berada tersembunyi di direktori ~/.pm2/logs/nama_aplikasi_anda-error.log.
Trik Membaca dan Memfilter Log PM2
Membuka file log berukuran raksasa menggunakan nano atau vim bisa membuat server Anda hang. Gunakan utilitas bawaan Linux berikut:
- Membaca log secara live:
bash
pm2 logs nama_aplikasi_anda - Mencari dengan satu kata kunci (misal: "Database"):
Gunakan
grepdengan flag-iagar pencarian tidak sensitif terhadap huruf besar/kecil.bashgrep -i "database" ~/.pm2/logs/nama_aplikasi_anda-error.log - Mencari error di jam tertentu:
Jika aplikasi Anda mencetak log beserta timestamp (misal tanggal 14 Oktober pukul 13:00).
bash
grep "2026-10-14T13:" ~/.pm2/logs/nama_aplikasi_anda-error.log - 🔥 Trik Pro (Kombinasi Jam + Kata Kunci):
Gunakan pipe (
|) untuk menyaring hasil pencarian waktu dengan kata kunci error spesifik.bashgrep "2026-10-14T13:" ~/.pm2/logs/nama_aplikasi_anda-error.log | grep -i "timeout"
💡 Tips Penting: Selalu instal
pm2-logrotate(pm2 install pm2-logrotate) agar file log PM2 Anda secara otomatis dipecah dan dihapus jika sudah terlalu lama. Jika tidak, disk server Anda bisa penuh (100%) hanya karena file log!
2. Menguasai Log di Ekosistem Docker
Berbeda dengan PM2, Docker mengisolasi log di dalam mesin internalnya. Anda tidak disarankan mencari file fisiknya, melainkan harus menggunakan antarmuka baris perintah (CLI) bawaan Docker yang sangat canggih.
Navigasi Dasar Log Docker
- Melihat log secara live:
bash
docker logs -f nama_container_anda - Melihat 100 baris terakhir saja:
bash
docker logs --tail 100 nama_container_anda
Memfilter Berdasarkan Mesin Waktu (Time-Filtering)
Ini adalah fitur terbaik Docker jika Anda harus melacak error yang terjadi beberapa jam lalu.
- Melihat log dari 1 jam terakhir:
bash
docker logs --since 60m nama_container_anda - Melihat log di rentang waktu spesifik:
bash
docker logs --since "2026-10-14T13:00:00" --until "2026-10-14T14:30:00" nama_container_anda
Mencari Kata Kunci di Docker
Sama seperti PM2, Anda bisa menggabungkan CLI Docker dengan grep:
docker logs --since 60m nama_container_anda 2>&1 | grep -i "connection refused"
⚠️ Peringatan Docker: Docker secara bawaan TIDAK membatasi ukuran log. Selalu tambahkan konfigurasi
logging: max-size: "10m"di filedocker-compose.ymlAnda agar disk server aman.
3. Investigasi Log Nginx (Reverse Proxy)
Nginx sering diletakkan di barisan paling depan untuk menerima traffic masuk sebelum diteruskan ke PM2 atau Docker. Jika pengguna melihat error 502 Bad Gateway atau 504 Gateway Timeout, Nginx adalah tempat pertama yang harus dicek.
Log Nginx terbagi dua:
- Access Log (
/var/log/nginx/access.log): Mencatat siapa yang datang, jam berapa, dan mengakses halaman apa. - Error Log (
/var/log/nginx/error.log): Mencatat kegagalan Nginx terhubung ke aplikasi backend Anda.
Cara Cepat Analisis Nginx
Format log Nginx biasanya mencatat waktu seperti ini: [14/Oct/2026:13:45:00 +0700].
- Mencari sumber error 502 (Bad Gateway):
bash
grep " 502 " /var/log/nginx/access.log - Melacak serangan atau aktivitas dari IP tertentu:
bash
grep "192.168.1.50" /var/log/nginx/access.log - Mencari error di jam spesifik:
bash
grep "14/Oct/2026:13:" /var/log/nginx/access.log | grep " 502 "
4. Troubleshooting Jaringan: Melacak Titik Kegagalan
Bagaimana jika log Nginx, PM2, dan Docker Anda sangat bersih (tidak ada error), tetapi pengguna tetap protes bahwa aplikasi tidak bisa dibuka? 90% kemungkinannya adalah Masalah Jaringan.
Ikuti 5 langkah investigasi jaringan ini:
Langkah 1: Ping (Cek Keterjangkauan Server)
Verifikasi apakah server hidup dan merespons internet.
ping domainanda.com
Jika "Request Timeout", bisa jadi server down, internet Anda putus, atau Firewall server memblokir paket ICMP (ping).
Langkah 2: Traceroute (Mencari Kabel Putus)
Jika ping sangat lambat atau gagal, gunakan traceroute (Linux/Mac) atau tracert (Windows) untuk melihat di titik/router mana koneksi Anda terputus sebelum sampai ke server.
traceroute domainanda.com
Cara Membaca Output Traceroute:
1 192.168.1.1 (Router Rumah Anda) 2.1 ms 1.8 ms 1.9 ms
2 10.10.10.1 (ISP Lokal Anda) 15.1 ms 14.8 ms 15.9 ms
3 123.45.67.89 (Router Backbone Internet) 20.1 ms * 21.9 ms
4 * * *
5 * * *
- Kolom ke-1 (Hop): Urutan router yang dilewati data.
- Kolom Terakhir (ms / RTT): Waktu yang dibutuhkan (milidetik). Semakin kecil, semakin cepat.
- Tanda Bintang (
* * *): Paket data tidak mendapat balasan (Timeout).- Jika berhenti di Hop 1-3: Masalah ada di provider internet (ISP) Anda.
- Jika melompat tinggi (ratusan ms): Ada gangguan kabel/routing internasional.
- Jika berhenti tepat sebelum IP Server Anda: Server Cloud Anda sedang gangguan, atau Firewall server sangat agresif memblokir ping.
Langkah 3: Telnet / Netcat (Cek Port Aplikasi)
Server mungkin hidup, tapi port aplikasi (misal port 443 untuk HTTPS atau 3000 untuk Node.js) diblokir oleh Firewall (UFW/AWS Security Group).
nc -vz domainanda.com 443
# atau
telnet domainanda.com 443
- Succeeded / Connected: Port terbuka dan siap menerima traffic.
- Connection Refused: Port terbuka, tapi Nginx/PM2 Anda dalam keadaan mati.
- Timeout: Port diblokir rapat oleh Firewall. Segera buka port tersebut!
Langkah 4: Nslookup (Verifikasi DNS)
Pastikan domain Anda mengarah ke IP publik server yang benar. Terkadang salah konfigurasi di Cloudflare/GoDaddy adalah biang keladinya.
nslookup domainanda.com
Langkah 5: Cek Jaringan Internal (Khusus Docker)
Jika Backend Docker tidak bisa terhubung ke Database Docker, pastikan keduanya berada di jaringan (network) yang sama.
docker network ls
# Masuk ke container backend dan coba ping container database
docker exec -it nama_container_backend sh
ping nama_container_database
Kesimpulan
Proses debugging server adalah seni mengeliminasi kemungkinan. Mulailah dari memeriksa "Kesehatan Jaringan" (Ping, Port, DNS), kemudian perlahan masuk ke pintu depan aplikasi (Nginx), hingga membedah "Otak Aplikasi" (Docker/PM2). Dengan menguasai perintah-perintah Linux dan Docker di atas, Anda siap menghadapi insiden server apa pun!