Giunsa ang Pag-configure sa Custom Access ug Error Log Format sa Nginx


Ang Nginx HTTP server adunay usa ka talagsaon nga pasilidad sa pag-log nga labi ka mapasibo. Niini nga artikulo, among ipasabut kung giunsa ang pag-configure sa imong kaugalingon nga mga format alang sa pag-access ug mga error sa log alang sa Nginx sa Linux.

Ang katuyoan niini nga giya mao ang pagtabang kanimo nga masabtan kung giunsa paghimo ang mga troso, aron ma-configure ang mga custom nga format sa log alang sa katuyoan sa pag-debug, pag-troubleshoot o pagtuki kung unsa ang mahitabo sa sulod sa imong web server ingon man ang mga aplikasyon sa web (sama sa pagsubay sa mga hangyo).

Kini nga artikulo gihimo sa tulo ka mga seksyon nga maglamdag kanimo bahin sa pag-configure sa mga log sa pag-access/error ug kung giunsa ang pag-enable sa conditional logging sa Nginx.

Pag-configure sa Mga Log sa Pag-access sa Nginx

Ubos sa Nginx, ang tanan nga mga hangyo sa kliyente sa server girekord sa access log sa usa ka piho nga format gamit ang module ng ngx_http_log_module.

Ang default log file mao ang log/access.log (kasagaran /var/log/nginx/access_log sa mga sistema sa Linux) ug ang default nga pormat alang sa pag-log kasagaran ang gihiusa o nag-unang pormat (kini mahimong magkalahi gikan sa usa ka distro ngadto sa lain).

Ang direktiba sa access_log (magamit sa http, server, lokasyon, kung naa sa lokasyon ug limitasyon gawas sa konteksto) gigamit aron itakda ang log file ug ang direktiba sa log_format (magamit sa konteksto sa http lamang) gigamit aron itakda ang format sa log. Ang format sa log gihulagway pinaagi sa komon nga mga baryable, ug mga variables nga namugna lamang sa panahon nga ang usa ka log gisulat.

Ang syntax alang sa pag-configure sa usa ka format sa log mao ang:

log_format format_name 'set_of_variables_to_define_format';

ug ang syntax alang sa pag-configure sa log sa pag-access mao ang:

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]];

Ang mosunod usa ka kinutlo gikan sa default Nginx configuration file /etc/nginx/nginx.conf sa 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;
}

Kini nga format sa log naghatag sa mosunod nga log entry.

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"

Ang mosunod mao ang lain nga mapuslanon nga format sa pag-log nga among gigamit sa pagsubay sa mga hangyo sa among mga web application gamit ang pipila sa mga default variables, kini ang labing importante adunay request ID ug mga log sa mga detalye sa lokasyon sa kliyente (nasud, country code, rehiyon ug siyudad).

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 ';

Mahimo nimo kini gamiton sama niini:

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

Maghimo kini og usa ka log entry nga makita sama niini.

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 

Mahimo nimong ipiho ang daghang mga log gamit ang access_log nga mga direktiba sa parehas nga lebel, dinhi naggamit kami labi pa sa usa ka file sa log sa konteksto sa 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;
}

Ang mosunod mao ang mas abante nga logging configurations nga mga pananglitan, nga mapuslanon alang sa log formats nga adunay compression-related nga mga variable ug alang sa pagmugna og compressed log files:

access_log /var/log/nginx/custom_log custom buffer 32k;
access_log /path/to/log.gz compression  gzip  flush=5m;

Pag-configure sa mga Error Log sa Nginx

Kung ang Nginx makasinati og bisan unsang mga glitches, kini nagrekord sa impormasyon mahitungod niini sa error log. Kini nga mga isyu nahulog ubos sa lainlaing lebel sa kagrabe: debug, impormasyon, pahibalo, pasidaan, sayop (kini ang default nga lebel ug nagtrabaho sa tibuok kalibutan), crit, alerto, o emerg.

Ang default log file mao ang log/error.log, apan kini kasagarang nahimutang sa /var/log/nginx/ sa Linux distributions. Ang error_log nga direktiba gigamit sa pagtino sa log file, ug kini mahimong gamiton sa main, http, mail, stream, server, konteksto sa lokasyon (sa maong han-ay).

Kinahanglan usab nimong hinumdoman nga:

  • Ang mga pag-configure sa panguna nga konteksto kanunay nga napanunod sa ubos nga lebel sa han-ay sa ibabaw.
  • ug ang mga configuration sa ubos nga lebel nag-override sa mga configuration nga napanunod gikan sa mas taas nga lebel.

Mahimo nimong i-configure ang pag-log sa sayup gamit ang mosunod nga syntax:

error_log /path/to/log_file log_level;

Pananglitan:

error_log /var/log/nginx/error_log warn; 

Kini magtudlo sa Nginx sa pag-log sa tanan nga mga mensahe sa tipo nga pahimangno ug mas grabe nga lebel sa log nga crit, alerto, ug mga mensahe nga mitungha.

Sa sunod nga pananglitan, ang mga mensahe sa crit, alerto, ug emerg nga lebel ma-log.

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

Tagda ang configuration sa ubos, dinhi, gihubit namo ang error logging sa lain-laing lebel (sa konteksto sa http ug server). Kung adunay sayup, ang mensahe gisulat sa usa ra ka log sa sayup, ang usa nga labing duol sa lebel kung diin nagpakita ang sayup.

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;
        		…….
    	}
}

Kung mogamit ka ug labaw sa usa ka error_log nga mga direktiba sama sa configuration sa ubos (parehas nga lebel), ang mga mensahe gisulat sa tanan nga piho nga mga log.

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;
            	…...
	}

Pag-configure sa Conditional Logging sa Nginx

Sa pipila ka mga kaso, gusto namon nga buhaton sa Nginx ang kondisyon nga pag-log sa mga mensahe. Dili tanan nga mensahe kinahanglan nga ma-log sa Nginx, busa mahimo natong ibalewala ang dili importante o dili kaayo importante nga mga entry sa log gikan sa atong access logs alang sa partikular nga mga higayon.

Mahimo natong gamiton ang module nga ngx_http_map_module nga nagmugna ug mga variable kansang mga kantidad nagdepende sa mga kantidad sa ubang mga variable. Ang mga parametro sa sulod sa usa ka block sa mapa (nga kinahanglan nga anaa sa sulod lamang sa http) nagtino sa usa ka mapping tali sa tinubdan ug resulta nga mga bili.

Alang sa kini nga klase sa setting, ang usa ka hangyo dili ma-log kung ang kondisyon mag-evaluate sa \0 o usa ka walay sulod nga string. Kini nga pananglitan wala maglakip sa mga hangyo nga adunay HTTP status code 2xx ug 3xx.

http{
	map $status $condition {
		~^[23] 0;
    		default 1;
	}
	server{
		access_log  /path/to/access.log  custom if=$condition;
	}
}

Ania ang lain nga mapuslanon nga pananglitan alang sa pag-debug sa usa ka aplikasyon sa web sa usa ka yugto sa pag-uswag. Ibaliwala niini ang tanan nga mga mensahe ug impormasyon lamang sa pag-debug sa log.

 
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; 
		…….
	}
}

Mahibal-an nimo ang dugang nga kasayuran, lakip ang pag-log sa syslog dinhi.

Kana lang sa pagkakaron! Sa kini nga giya, among gipasabut kung giunsa ang pag-configure sa naandan nga format sa pag-log alang sa pag-access ug mga error sa log sa Nginx. Gamita ang porma sa feedback sa ubos aron mangutana o ipaambit ang imong mga hunahuna bahin sa kini nga artikulo.