Nginx adalah software server open-source, high-performance HTTP, dan proxy server yang bertanggung jawab untuk menangani beban tinggi di beberapa situs terbesar di Internet. Saat mengelola server web NGINX, salah satu tugas yang paling sering Anda lakukan adalah memeriksa file log.

Mengetahui cara mengkonfigurasi dan membaca log sangat berguna ketika memecahkan masalah server atau aplikasi karena mereka memberikan informasi debugging yang terperinci.

Nginx menulis catatan setiap events dalam dua jenis log: access logs dan error logs. Access logs menulis informasi tentang setiap request dari klien, dan error logs menulis informasi tentang setiap masalah pada baik pada nginx atau koneksi ke salah satu aplikasi (website).

Artikel ini menguraikan cara mengkonfigurasi dan membaca access logs dan error logs pada Nginx.

Mengkonfigurasi Access logs

Setiap kali permintaan klien diproses, Nginx menghasilkan event baru di access log. Setiap record acara berisi timestamp dan mencakup berbagai informasi tentang klien dan sumber daya yang diminta. access log dapat menunjukkan kepada Anda lokasi pengunjung, halaman yang mereka kunjungi, berapa banyak waktu yang mereka habiskan di halaman, dan banyak lagi.

Directive log_format memungkinkan Anda untuk menentukan format pesan yang dicatat. Directive access_log memungkinkan Anda untuk menetapkan lokasi file log dan format yang digunakan.

Sintaks paling dasar dari direktif access_log adalah sebagai berikut:

access_log log_file log_format;

Di mana log_file adalah path lengkap ke file log, dan log_format adalah format yang digunakan oleh file log.

Access log dapat diaktifkan baik di http, server, atau block directives  location .

Secara default, access log secara global diaktifkan di direktive http di dalam file konfigurasi Nginx utama. Untuk melihatnya silahkan masukkan perintah cat berikut :

cat /etc/nginx/nginx.conf
http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

Untuk tujuan maintenance yang lebih baik, disarankan untuk mengatur file access log secara terpisah untuk setiap server block.

Directive access_log yang diatur dalam direktive server akan menimpa pengaturan yang ada dalam directive http (level yang lebih tinggi).

sudo nano /etc/nginx/conf.d/domain.com.conf
http {
  ...
  access_log  /var/log/nginx/access.log;
  ...

  server {
    server_name domain.com
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

Jika tidak ada format log yang ditentukan, Nginx menggunakan format combined yang telah ditentukan yang terlihat seperti ini:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Untuk mengubah format logging, baik secara menimpa pengaturan default atau menentukan yang baru. Misalnya untuk mendefinisikan format logging baru bernama main yang akan memperluas format combined dengan nilai yang menunjukkan header X-Forwarded-For, maka tambahkan definisi berikut dalam direktif http atau server:

log_format  custom  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

Untuk menggunakan format baru, tentukan namanya setelah file log seperti yang ditunjukkan di bawah ini:

access_log  /var/log/nginx/access.log custom;

Meskipun access log memberikan informasi yang sangat berguna. Mengaktifkan access log mbutuhkan ruang disk dan sumber daya CPU jika situs Anda memiliki banyak pengunjung.

Semakin banyak pengunjung, maka dapat memengaruhi kinerja server. Jika server kekurangan sumber daya dan Anda memiliki situs web yang sibuk, Anda mungkin ingin menonaktifkan log akses. Untuk melakukan itu, ubah nilai direktif access_logmenjadi off:

access_log  off;

Konfigurasi Error log Nginx

Nginx menulis pesan terkait aplikasi dan kesalahan server umum dalam file error log. Jika Anda mengalami error dalam aplikasi web Anda, error log adalah tempat pertama untuk memulai mencari tahu untuk mengatasi masalah.

Directive error_log  berisi konfigurasi tentang lokasi dan menetapkan tingkat keparahan dalam file error log. Direktive ini mengambil bentuk berikut dan dapat diatur dalam http, server, atau location :

error_log log_file log_level

Parameter log_levelmenetapkan tingkat pencatatan. Berikut adalah level-level yang terdaftar berdasarkan tingkat keparahannya (dari rendah ke tinggi):

  • debug – Pesan terkait Debugging.
  • info – Informational.
  • notice – Notices.
  • warn – Warnings.
  • error – Errors ketika memproses request.
  • crit – Critical. Butuh tindakan khusus.
  • alert – Alerts. Butuh tindakan khusus
  • emerg – Emergency. Sistem tidak responsif dan Butuh tindakan khusus.

Setiap log level memasukkan pengaturan level yang lebih tinggi. Misalnya, jika Anda mengatur level log untuk memperingatkan (warn), Nginx juga akan mencatat errorcritalert, dan pesan emerg yang muncul.

Ketika parameter log_level tidak ditentukan, standarnya adalah error.

Secara default, direktif error_log didefinisikan dalam direktif http di dalam file konfigurasi utama nginx.conf :

cat /etc/nginx/nginx.conf
http {
  ...
  error_log  /var/log/nginx/error.log;
  ...
}

Sama seperti dengan access logs, disarankan untuk mengatur file error log yang terpisah untuk setiap server block, yang menimpa pengaturan yang diwarisi dari tingkat yang lebih tinggi (konfigurasi global Nginx).

Misalnya, untuk mengatur error log dari example.com untuk memperingatkan (warn ) Anda akan menggunakan:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...

  server {
    server_name example.com
    error_log  /var/log/nginx/domain.error.log warn;
    ...
  }
}

Setiap kali Anda memodifikasi file konfigurasi, Anda harus me-restart layanan Nginx agar perubahan diterapkan.

Lokasi File Log Nginx

Secara default pada sebagian besar distribusi Linux, seperti Ubuntu, CentOS, dan Debian, access logs dan error logs terletak di direktori /var/log/nginx.

Membaca dan Memahami File Log Nginx

Anda dapat membuka dan mem-parsing file log menggunakan perintah standar seperti  catlessgrepcutawk, dan sebagainya.

Berikut adalah contoh record dari file access log yang menggunakan format log default Nginx combine :

192.168.23.1 - - [17/Oct/2019:19:45:22 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

Mari kita uraikan apa arti setiap field record :

  • $remote_addr – 192.168.23.1 – Alamat IP klien yang mengajukan request.
  • $remote_user – - – HTTP Authenticated User. Ketika nama user tidak di set, bidang ini akan menunjukkan -.
  • [$time_local] – [17/Oct/2019:19:45:22 +0000] – waktu Local server.
  • "$request" – "GET / HTTP/1.1" – Jenis request, path dan protocol.
  • $status – 200 – Kode respons server.
  • $body_bytes_sent – 396 – Ukuran respon server dalam byte.
  • "$http_referer" – "-" – URL referral.
  • "$http_user_agent" – Mozilla/5.0 ... – The user agent of the client (web browser).

Gunakan perintah tail untuk menonton file log secara real-time:

tail -f  access.log

Kesimpulan

File log memberi Anda informasi yang berguna tentang masalah server dan bagaimana pengunjung berinteraksi dengan situs web Anda.

Nginx memungkinkan Anda untuk mengkonfigurasi access dan error logs sesuai dengan kebutuhan Anda.