Tutorial & How-to

Membaca Log Nginx Tanpa Menebak

Sampul artikel: 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 logArtinyaLangkah berikutnya
status=499Klien menutup koneksi sebelum jawaban selesaiPeriksa urt; kalau besar, aplikasinya lambat
rt besar, urt kecilWaktu habis di luar aplikasiPeriksa jaringan, TLS, atau penyimpanan
rt dan urt sama-sama besarAplikasi yang lambatPeriksa kueri database dan log aplikasi
upstream timed out di log galatBatas waktu proksi tercapaiPerbaiki penyebabnya dulu, baru pertimbangkan menaikkan batas
502 sesekaliSalah satu proses PHP-FPM bermasalahPeriksa 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 rt dan urt sejak 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.

Tag artikel ini

Tim Netvora

Menulis di Netvora Blog. Punya pertanyaan teknis soal artikel ini? Kirim ke info@netvora.co.id.