Membaca Log Nginx Tanpa Menebak
Log akses Nginx bawaan hanya mencatat permintaan. Yang membuatnya berguna saat ada gangguan adalah kolom waktu tanggap dan status dari upstream.
Bentuk log yang kami pakai
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'rt=$request_time uct=$upstream_connect_time urt=$upstream_response_time';
access_log /var/log/nginx/app.access.log main_ext;
Dua kolom yang menentukan: urt (waktu dari upstream) dan rt (waktu total). Perbandingannya memisahkan lambat karena aplikasi dari lambat karena jaringan.
Membaca gejalanya
| Yang terlihat di log | Artinya | Langkah berikutnya |
|---|---|---|
status=499 | Klien menutup koneksi sebelum jawaban selesai | Periksa urt; kalau besar, aplikasinya lambat |
rt besar, urt kecil | Waktu habis di luar aplikasi | Periksa jaringan, TLS, atau penyimpanan |
rt dan urt sama-sama besar | Aplikasi yang lambat | Periksa kueri database dan log aplikasi |
upstream timed out di log galat | Batas waktu proksi tercapai | Perbaiki penyebabnya dulu, baru pertimbangkan menaikkan batas |
502 sesekali | Salah satu proses PHP-FPM bermasalah | Periksa jumlah pekerja dan log proses |
Mencari pola, bukan satu baris
# sepuluh alamat dengan permintaan paling banyak
awk '{print $1}' /var/log/nginx/app.access.log | sort | uniq -c | sort -rn | head
# permintaan yang lambat, dengan jalurnya
grep -o 'rt=[0-9.]*' /var/log/nginx/app.access.log | \
awk -F= '$2 > 2 {print}' | sort | uniq -c | sort -rn | head
# ringkasan kode status per jam
awk '{print substr($4,14,2) " " $9}' /var/log/nginx/app.access.log | \
sort | uniq -c | sort -k2,2 -k3,3
Log galat yang tepat
Log galat utama Nginx sering disetel pada tingkat crit, sehingga galat tingkat error tidak muncul sama sekali. Untuk penelusuran, baca log galat per situs dan periksa tingkatnya:
nginx -T 2>/dev/null | grep -n "error_log"
tail -f /var/log/nginx/app.error.log
Kalau proses pekerja Nginx berhenti mendadak, jejaknya hanya ada di log galat utama. Periksa berkas itu saat menemukan jawaban kosong dengan sambungan yang putus tiba-tiba.
Kebiasaan yang membuat penelusuran cepat
- Setiap situs punya berkas log sendiri, bukan satu log bersama untuk semua.
- Format log memuat
rtdanurtsejak awal, bukan ditambahkan saat sudah ada masalah. - Versi konfigurasi yang sedang berlaku bisa dibaca ulang kapan saja dengan
nginx -T, jadi tidak perlu menebak isi berkas yang aktif.