Yadda Ake Sanya Hannun Hannu na Musamman da Kuskuren Shiga Formats a cikin Nginx


Nginx HTTP uwar garken yana da kayan aikin shiga mai ban mamaki wanda ake iya daidaita shi sosai. A cikin wannan labarin, zamuyi bayanin yadda ake saita tsarin ku don samun dama da rajistar kurakuran Nginx a cikin Linux.

Manufar wannan jagorar ita ce don taimaka muku fahimtar yadda ake samar da rajistan ayyukan, ta yadda za a tsara tsarin log na al'ada don dalilai na gyara matsala, gyara matsala ko nazarin abubuwan da ke faruwa a cikin sabar gidan yanar gizon ku da kuma aikace-aikacen yanar gizo (kamar neman buƙatun).

Wannan labarin an yi shi ne da sassa uku waɗanda za su faɗakar da ku game da daidaita rajistan shiga/kuskure da yadda ake ba da izinin shiga cikin Nginx.

Ana saita Logs na shiga a cikin Nginx

A ƙarƙashin Nginx, duk buƙatun abokin ciniki ga uwar garken ana yin rikodin su a cikin rajistar shiga cikin takamaiman tsari ta amfani da ngx_http_log_module module.

Fayil ɗin log ɗin tsoho shine log/access.log (yawanci /var/log/nginx/access_log akan tsarin Linux) kuma tsarin tsoho don shiga shine yawanci hade ko babban tsari (wannan na iya bambanta daga wannan distro zuwa wani).

Ana amfani da umarnin access_log (wanda ya dace a cikin http, uwar garken, wurin, idan yana cikin wuri da iyaka sai dai mahallin) don saita fayil ɗin log ɗin kuma ana amfani da umarnin log_format (wanda ke ƙarƙashin mahallin http kawai) don saita tsarin log. Tsarin log ɗin ana bayyana shi ta hanyar mabambanta gama gari, da masu canji waɗanda ke haifarwa kawai a lokacin da aka rubuta log ɗin.

Maganar daidaita tsarin log ita ce:

log_format format_name 'set_of_variables_to_define_format';

kuma ma'auni don saita log log shine:

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

Mai zuwa wani yanki ne daga tsohowar fayil ɗin Nginx /etc/nginx/nginx.conf akan 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;
}

Wannan tsarin log ɗin yana haifar da shigarwar log mai zuwa.

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"

Mai zuwa wani tsari ne mai fa'ida mai fa'ida wanda muke amfani da shi don gano buƙatun zuwa aikace-aikacen gidan yanar gizon mu ta amfani da wasu tsoffin masu canji, mafi mahimmanci yana da ID ɗin buƙatu da bayanan wurin wurin abokin ciniki (ƙasa, lambar ƙasa, yanki da birni).

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

Kuna iya amfani da shi kamar haka:

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

Wannan zai samar da shigarwar log wanda ya bayyana kamar haka.

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 

Kuna iya ƙayyade rajistan ayyukan da yawa ta amfani da umarnin access_log akan matakin iri ɗaya, anan muna amfani da fayil ɗin log fiye da ɗaya a cikin mahallin 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;
}

Waɗannan su ne ƙarin misalan jeri na ci gaba, waɗanda ke da amfani ga tsarin log ɗin da ke ɗauke da masu alaƙa da matsawa da ƙirƙirar fayilolin log ɗin da aka matsa:

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

Ana saita Rijiyoyin Kuskure a cikin Nginx

Idan Nginx ya sami kowane glitches, yana yin rikodin bayanai game da su a cikin rajistan kuskure. Waɗannan batutuwan sun faɗi ƙarƙashin matakan tsanani daban-daban: kuskure, bayani, sanarwa, faɗakarwa, kuskure (wannan shine matakin tsoho kuma yana aiki a duniya), ƙira, faɗakarwa, ko fitowa.

Fayil ɗin log ɗin tsoho shine log/error.log, amma yawanci yana cikin /var/log/nginx/ akan rarrabawar Linux. Ana amfani da umarnin error_log don tantance fayil ɗin log, kuma ana iya amfani dashi a cikin babban, http, mail, rafi, uwar garken, mahallin wurin (a cikin wannan tsari).

Ya kamata ku kuma lura cewa:

  • Tsarin saiti a cikin babban mahallin koyaushe ana gadonsa ta ƙananan matakai a cikin tsari na sama.
  • kuma daidaitawa a cikin ƙananan matakan sun ƙetare saitunan da aka gada daga manyan matakan.

Kuna iya saita shigar da kuskure ta amfani da syntax mai zuwa:

error_log /path/to/log_file log_level;

Misali:

error_log /var/log/nginx/error_log warn; 

Wannan zai umurci Nginx don shigar da duk saƙonni na nau'in gargaɗin da ƙarin matsananciyar matakin log log, faɗakarwa, da saƙon da ke fitowa.

A cikin misali na gaba, za a shigar da saƙon ƙirƙira, faɗakarwa, da matakan tasowa.

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

Yi la'akari da tsarin da ke ƙasa, a nan, mun bayyana kuskuren shiga cikin matakai daban-daban (a cikin mahallin http da uwar garken). Idan an sami kuskure, ana rubuta saƙon zuwa gunkin kuskure ɗaya kawai, wanda yake kusa da matakin da kuskuren ya bayyana.

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

Idan kun yi amfani da umarnin kuskure_log fiye da ɗaya kamar yadda yake cikin tsarin da ke ƙasa (mataki ɗaya), ana rubuta saƙonnin zuwa duk ƙayyadaddun rajistan ayyukan.

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

Ana saita Shigar Yanayi a cikin Nginx

A wasu lokuta, ƙila mu so Nginx ya yi rajistar saƙon cikin sharaɗi. Ba kowane saƙo ne Nginx ya shigar da shi ba, don haka za mu iya yin watsi da shigarwar log ɗin marasa mahimmanci ko ƙasa da haka daga rajistan shiga mu don wasu lokuta.

Za mu iya amfani da tsarin ngx_http_map_module wanda ke ƙirƙirar masu canji waɗanda ƙimarsu ta dogara da ƙimar wasu masu canji. Matsalolin da ke cikin toshe taswira (waɗanda yakamata su wanzu a cikin abun ciki na http kawai) suna ƙayyade taswira tsakanin tushe da ƙimar da aka haifar.

Don irin wannan saitin, ba za a shigar da buƙatun ba idan yanayin ya kimanta zuwa \0 ko kuma kirtani mara komai. Wannan misalin ya keɓe buƙatun tare da lambobin matsayin HTTP 2xx da 3xx.

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

Anan akwai wani misali mai amfani don gyara aikace-aikacen gidan yanar gizo a cikin lokacin haɓakawa. Wannan zai yi watsi da duk saƙon da kuma shigar da bayanan kuskure kawai.

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

Kuna iya samun ƙarin bayani, gami da shiga zuwa syslog anan.

Wannan ke nan a yanzu! A cikin wannan jagorar, mun bayyana yadda ake saita tsarin rajista na al'ada don samun dama da rajistar kuskure a cikin Nginx. Yi amfani da fam ɗin martanin da ke ƙasa don yin tambayoyi ko raba ra'ayoyinku game da wannan labarin.