Cara Mengkonfigurasi Format Log Akses dan Ralat Kustom di Nginx

Cara Mengkonfigurasi Format Log Akses dan Ralat Kustom di Nginx

Nginx http Pelayan mempunyai kemudahan pembalakan yang luar biasa yang sangat disesuaikan. Dalam artikel ini, kami akan menerangkan cara mengkonfigurasi format anda sendiri untuk log akses dan ralat untuk nginx di linux.

Tujuan panduan ini adalah untuk membantu anda memahami bagaimana log dijana, untuk mengkonfigurasi format log tersuai untuk tujuan debug, penyelesaian masalah atau analisis tentang apa yang berlaku dalam pelayan web anda serta aplikasi web (seperti permintaan pengesan).

Baca juga: 4 Pemantauan log sumber terbuka dan alat pengurusan untuk Linux

Artikel ini diperbuat daripada tiga bahagian yang akan menyedarkan anda mengenai mengkonfigurasi Log Akses/Ralat dan bagaimana untuk membolehkan pembalakan bersyarat di nginx.

Mengkonfigurasi Log Akses di Nginx

Di bawah Nginx, Semua permintaan pelanggan ke pelayan dikitar semula di log akses dalam format yang ditentukan menggunakan ngx_http_log_module modul.

Fail log lalai adalah log/akses.log (Biasanya /var/log/nginx/access_log pada sistem linux) dan format lalai untuk pembalakan biasanya format gabungan atau utama (ini boleh berbeza dari satu distro ke yang lain).

The Access_log arahan (berkenaan dalam http, pelayan, lokasi, jika di lokasi dan had kecuali konteks) digunakan untuk menetapkan fail log dan log_format Arahan (berkenaan di bawah konteks HTTP sahaja) digunakan untuk menetapkan format log. Format log digambarkan oleh pembolehubah biasa, dan pembolehubah yang dihasilkan hanya pada masa log ditulis.

Sintaks untuk mengkonfigurasi format log ialah:

log_format format_name 'set_of_variables_to_define_format'; 

Dan sintaks untuk mengkonfigurasi log akses adalah:

ACCESS_LOG/PATH/TO/LOG_FILE FORMAT_NAME; #simplest borang atau Access_Log/Path/to/Log_File [format [buffer = size] [gzip [= level]] [flush = time] [if = condition]]; 

Berikut adalah petikan dari fail konfigurasi nginx lalai /etc/nginx/nginx.Conf pada Centos 7.

/etc/nginx/nginx.Conf
http #main log format log_format utama '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_forward_forward"; akses_log/var/log/nginx/akses.log;  

Format log ini menghasilkan entri log berikut.

127.0.0.1 - DBManager [20/Nov/2017: 18: 52: 17 +0000] "Dapatkan/http/1.1 "401 188"-"" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; RV: 47.0) Gecko/20100101 Firefox/47.0 "" 

Berikut adalah satu lagi format pembalakan yang berguna yang kami gunakan untuk mencetuskan permintaan ke aplikasi web kami menggunakan beberapa pembolehubah lalai, yang paling penting mempunyai ID permintaan dan log butiran lokasi klien (negara, kod negara, rantau dan bandar).

/etc/nginx/nginx.Conf
log_format custom '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent" "" $ http_x_forwarded_for $ 

Anda boleh menggunakannya seperti ini:

akses_log/var/log/nginx/akses.log adat; 

Ini akan menghasilkan entri log yang kelihatan seperti ini.

153.78.107.192 - - [21/Nov/2017: 08: 45: 45 +0000] "Post/NGX_PAGESPEED_BEACON?url = https%3a%2f%2fwww.Contoh.com%2fads%2ffresh-oren-15260795 http/2.0 "204 0" https: // www.Suasell.com/ADS/Fresh-oren-1509260795 "" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; RV: 47.0) Gecko/20100101 Firefox/47.0 ""-"A02B2DEA9CF06344A25611C1D7AD72DB UGANDA UG KAMPALA 

Anda boleh menentukan beberapa balak menggunakan Access_log Arahan pada tahap yang sama, di sini kami menggunakan lebih daripada satu fail log dalam konteks HTTP.

/etc/nginx/nginx.Conf
http ## format log lalai log_format utama '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_forward_for"; permintaan pengesanan menggunakan format adat log_format custom '$ remote_addr - $ remote_user [$ time_local] "" permintaan $ status $ body_bytes_sent "" $ http_referer "" $ http_user_agent "" " $ geoip_region_name $ geoip_city '; ## Ini menggunakan format log lalai akses_log/var/log/nginx/akses.log; ## Ini menggunakan format log adat kami Access_log/var/log/nginx/custom_log custom;  

Berikut adalah contoh konfigurasi pembalakan yang lebih maju, yang berguna untuk format log yang mengandungi pembolehubah yang berkaitan dengan mampatan dan untuk membuat fail log termampat:

Access_log/var/log/nginx/custom_log buffer custom 32k; Access_log/Path/to/Log.Gz mampatan gzip flush = 5m; 

Mengkonfigurasi Log Ralat di Nginx

Dalam kes Nginx Mengalami sebarang gangguan, ia merekodkan maklumat mengenai log ralat. Isu -isu ini berada di bawah tahap keparahan yang berbeza: debug, maklumat, notis, memberi amaran, ralat (Ini adalah tahap lalai dan berfungsi secara global), mengkritik, amaran, atau muncul.

Fail log lalai adalah log/ralat.log, tetapi ia biasanya terletak di /var/log/nginx/ pada pengagihan Linux. The error_log Arahan digunakan untuk menentukan fail log, dan ia boleh digunakan dalam konteks utama, http, mel, strim, pelayan, lokasi (dalam urutan itu).

Anda juga harus perhatikan bahawa:

  • Konfigurasi dalam konteks utama selalu diwarisi oleh tahap yang lebih rendah dalam urutan di atas.
  • dan konfigurasi di tahap yang lebih rendah mengatasi konfigurasi yang diwarisi dari tahap yang lebih tinggi.

Anda boleh mengkonfigurasi pembalakan ralat menggunakan sintaks berikut:

error_log/path/to/log_file log_level; 

Sebagai contoh:

error_log/var/log/nginx/error_log WARN; 

Ini akan mengarahkan nginx untuk log semua mesej jenis memberi amaran dan tahap log yang lebih teruk mengkritik, amaran, dan muncul mesej.

Dalam contoh seterusnya, mesej mengkritik, amaran, dan muncul Tahap akan dilog masuk.

error_log/var/www/contoh1.com/log/error_log crit; 

Pertimbangkan konfigurasi di bawah, di sini, kami telah menentukan pembalakan ralat pada tahap yang berbeza (dalam konteks HTTP dan pelayan). Sekiranya berlaku ralat, mesej itu ditulis hanya kepada satu log ralat, yang paling dekat dengan tahap di mana ralat telah muncul.

/etc/nginx/nginx.Conf
http log_format mampatan '$ 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; pelayan mendengar 80; Server_name Contoh1.com; #This Logs Ralat Mesej Sebagai Contoh1.com sahaja error_log/var/log/nginx/example1.error_log WARN; ... pelayan mendengar 80; Server_name Contoh2.com; #This Logs Ralat Mesej Sebagai Contoh2.com sahaja error_log/var/log/nginx/example1.error_log; .. .  

Sekiranya anda menggunakan lebih daripada satu error_log Arahan Seperti dalam konfigurasi di bawah (tahap yang sama), mesej ditulis kepada semua log yang ditentukan.

/etc/nginx/nginx.Conf
pelayan mendengar 80; Server_name Contoh1.com; error_log/var/www/contoh1.com/log/error_log WARN; error_log/var/log/nginx/contoh1.error_log crit; ... 

Mengkonfigurasi Pembalakan Bersyarat di Nginx

Dalam beberapa kes, kita mungkin mahu nginx melakukan pembalakan mesej bersyarat. Tidak setiap mesej harus dilog oleh nginx, oleh itu kita boleh mengabaikan entri log yang tidak penting atau kurang penting dari log akses kami untuk keadaan tertentu.

Kita boleh menggunakan ngx_http_map_module modul yang mencipta pembolehubah yang nilai -nilainya bergantung kepada nilai pembolehubah lain. Parameter di dalam blok peta (yang sepatutnya wujud dalam kandungan HTTP sahaja) Tentukan pemetaan antara sumber dan nilai yang dihasilkan.

Untuk tetapan seperti ini, permintaan tidak akan dilog masuk jika keadaan menilai "0" atau tali kosong. Contoh ini tidak termasuk permintaan dengan kod status HTTP 2xx dan 3xx.

/etc/nginx/nginx.Conf
http map $ status $ keadaan ~^[23] 0; lalai 1;  pelayan Access_Log/Path/To/Access.log adat jika = $ keadaan;  

Berikut adalah satu lagi contoh berguna untuk menyahpepijat aplikasi web dalam fasa pembangunan. Ini akan mengabaikan semua mesej dan hanya maklumat debug log.

/etc/nginx/nginx.Conf
 http map $ info $ debuggable default 0; Debug 1;  pelayan ... Access_Log/var/log/nginx/testapp_debug_access_log debug if = $ debuggable; #log Permintaan lain Access_log/var/log/nginx/testapp_access.log utama; .. .  

Anda boleh mengetahui lebih banyak maklumat, termasuk log masuk ke Syslog di sini.

Itu sahaja buat masa ini! Dalam panduan ini, kami menjelaskan cara mengkonfigurasi format pembalakan tersuai untuk log dan log ralat di nginx. Gunakan borang maklum balas di bawah untuk mengemukakan soalan atau berkongsi pemikiran mengenai artikel ini.