Cara Mengonfigurasi Akses Kustom dan Format Log Kesalahan di Nginx
Server Nginx HTTP memiliki fasilitas logging fenomenal yang sangat dapat disesuaikan. Pada artikel ini, kami akan menjelaskan cara mengonfigurasi format akses dan log kesalahan Anda sendiri untuk Nginx di Linux.
Tujuan dari panduan ini adalah untuk membantu Anda memahami bagaimana log dihasilkan, sehingga dapat mengonfigurasi format log khusus untuk tujuan debugging, pemecahan masalah, atau analisis tentang apa yang terjadi di dalam server web Anda serta aplikasi web (seperti permintaan penelusuran).
Baca Juga: 4 Alat Pemantauan dan Manajemen Log Sumber Terbuka yang Baik untuk Linux
Artikel ini terdiri dari tiga bagian yang akan mencerahkan Anda tentang mengonfigurasi log akses/kesalahan dan cara mengaktifkan logging bersyarat di Nginx.
Mengonfigurasi Log Akses di Nginx
Di bawah Nginx, semua permintaan klien ke server dicatat dalam log akses dalam format tertentu menggunakan modul ngx_http_log_module.
File log default adalah log/access.log (biasanya /var/log/nginx/access_log pada sistem Linux) dan format default untuk logging biasanya adalah gabungan atau format utama. format (ini dapat bervariasi dari satu distro ke distro lainnya).
Direktif access_log (berlaku di http, server, lokasi, jika berada di lokasi dan batas kecuali konteks) digunakan untuk mengatur file log dan direktif log_format (berlaku di bawah konteks http saja) digunakan untuk mengatur format log. Format log dijelaskan oleh variabel umum, dan variabel yang dihasilkan hanya pada saat log ditulis.
Sintaks untuk mengonfigurasi format log adalah:
log_format format_name 'set_of_variables_to_define_format';
dan sintaks untuk mengkonfigurasi access log adalah:
access_log /path/to/log_file format_name; #simplest form
OR
access_log /path/to/log_file [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
Berikut ini adalah kutipan dari file konfigurasi Nginx default /etc/nginx/nginx.conf di CentOS 7.
http {
#main log format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log;
}
Format log ini menghasilkan entri log berikut.
127.0.0.1 - dbmanager [20/Nov/2017:18:52:17 +0000] "GET / HTTP/1.1" 401 188 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
Berikut ini adalah format logging lain yang berguna yang kami gunakan untuk menelusuri permintaan ke aplikasi web kami menggunakan beberapa variabel default, yang paling penting memiliki ID permintaan dan mencatat rincian lokasi klien (negara, kode negara, wilayah dan kota).
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $request_id '
'$geoip_country_name $geoip_country_code '
'$geoip_region_name $geoip_city ';
Anda dapat menggunakannya seperti ini:
access_log /var/log/nginx/access.log custom;
Ini akan menghasilkan entri log yang muncul seperti ini.
153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon?url=https%3A%2F%2Fwww.example.com%2Fads%2Ffresh-oranges-1509260795 HTTP/2.0" 204 0 "https://www.suasell.com/ads/fresh-oranges-1509260795" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0" "-" a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala
Anda dapat menentukan beberapa log menggunakan arahan access_log pada tingkat yang sama, di sini kami menggunakan lebih dari satu file log dalam konteks http.
http{
##default log format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
##request tracing using custom format
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $request_id '
'$geoip_country_name $geoip_country_code '
'$geoip_region_name $geoip_city ';
##this uses the default log format
access_log /var/log/nginx/access.log;
##this uses the our custom log format
access_log /var/log/nginx/custom_log custom;
}
Berikut ini adalah contoh konfigurasi logging tingkat lanjut, yang berguna untuk format log yang berisi variabel terkait kompresi dan untuk membuat file log terkompresi:
access_log /var/log/nginx/custom_log custom buffer 32k;
access_log /path/to/log.gz compression gzip flush=5m;
Mengonfigurasi Log Kesalahan di Nginx
Jika Nginx mengalami gangguan apa pun, ia akan mencatat informasi mengenai gangguan tersebut di log kesalahan. Masalah ini memiliki tingkat keparahan yang berbeda-beda: debug, info, pemberitahuan, peringatkan, kesalahan (ini adalah level default dan berfungsi secara global), crit, alert, atau emerg.
File log default adalah log/error.log, namun biasanya terletak di /var/log/nginx/ pada distribusi Linux. Direktif error_log digunakan untuk menentukan file log, dan dapat digunakan dalam konteks utama, http, mail, stream, server, lokasi (dalam urutan itu).
Anda juga harus memperhatikan bahwa:
- Konfigurasi dalam konteks utama selalu diwarisi oleh level yang lebih rendah dalam urutan di atas.
- dan konfigurasi di tingkat yang lebih rendah mengesampingkan konfigurasi yang diwarisi dari tingkat yang lebih tinggi.
Anda dapat mengonfigurasi pencatatan kesalahan menggunakan sintaks berikut:
error_log /path/to/log_file log_level;
Misalnya:
error_log /var/log/nginx/error_log warn;
Ini akan memerintahkan Nginx untuk mencatat semua pesan jenis warn dan tingkat log yang lebih parah crit, alert, dan emerg pesan.
Pada contoh berikutnya, pesan tingkat crit, alert, dan emerg akan dicatat.
error_log /var/www/example1.com/log/error_log crit;
Pertimbangkan konfigurasi di bawah ini, di sini, kami telah mendefinisikan error logging pada level yang berbeda (dalam konteks http dan server). Jika terjadi kesalahan, pesan akan ditulis ke satu log kesalahan saja, log yang paling dekat dengan tingkat munculnya kesalahan.
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
error_log /var/log/nginx/error_log crit;
server {
listen 80;
server_name example1.com;
#this logs errors messages for example1.com only
error_log /var/log/nginx/example1.error_log warn;
…...
}
server {
listen 80;
server_name example2.com;
#this logs errors messages for example2.com only
error_log /var/log/nginx/example1.error_log;
…….
}
}
Jika Anda menggunakan lebih dari satu arahan error_log seperti pada konfigurasi di bawah ini (tingkat yang sama), pesan akan ditulis ke semua log yang ditentukan.
server {
listen 80;
server_name example1.com;
error_log /var/www/example1.com/log/error_log warn;
error_log /var/log/nginx/example1.error_log crit;
…...
}
Mengonfigurasi Logging Bersyarat di Nginx
Dalam beberapa kasus, kita mungkin ingin Nginx melakukan pencatatan log bersyarat pada pesan. Tidak setiap pesan harus dicatat oleh Nginx, oleh karena itu kita dapat mengabaikan entri log yang tidak penting atau kurang penting dari log akses kita untuk kejadian tertentu.
Kita dapat menggunakan modul ngx_http_map_module yang membuat variabel yang nilainya bergantung pada nilai variabel lain. Parameter di dalam blok peta (yang seharusnya ada di konten http saja) menentukan pemetaan antara sumber dan nilai yang dihasilkan.
Untuk pengaturan seperti ini, permintaan tidak akan dicatat jika kondisi bernilai “0 ”
atau string kosong. Contoh ini mengecualikan permintaan dengan kode status HTTP 2xx dan 3xx.
http{
map $status $condition {
~^[23] 0;
default 1;
}
server{
access_log /path/to/access.log custom if=$condition;
}
}
Berikut adalah contoh lain yang berguna untuk men-debug aplikasi web dalam tahap pengembangan. Ini akan mengabaikan semua pesan dan hanya mencatat informasi debug.
http{
map $info $debuggable {
default 0;
debug 1;
}
server{
……..
access_log /var/log/nginx/testapp_debug_access_log debug if=$debuggable;
#logs other requests
access_log /var/log/nginx/testapp_access.log main;
…….
}
}
Anda dapat mengetahui informasi lebih lanjut, termasuk login ke syslog di sini.
Itu saja untuk saat ini! Dalam panduan ini, kami menjelaskan cara mengonfigurasi format logging khusus untuk akses dan log kesalahan di Nginx. Gunakan formulir umpan balik di bawah untuk mengajukan pertanyaan atau menyampaikan pendapat Anda tentang artikel ini.