Nginx में कस्टम एक्सेस और एरर लॉग फॉर्मेट को कैसे कॉन्फ़िगर करें


Nginx HTTP सर्वर में अभूतपूर्व लॉगिंग सुविधा है जो अत्यधिक अनुकूलन योग्य है। इस लेख में, हम बताएंगे कि लिनक्स में Nginx के लिए प्रवेश और त्रुटि लॉग के लिए आपको अपने प्रारूपों को कैसे कॉन्फ़िगर करना है।

इस गाइड का उद्देश्य आपको यह समझने में मदद करना है कि लॉग कैसे उत्पन्न होते हैं, इसलिए डिबगिंग, समस्या निवारण या आपके वेब सर्वर के भीतर और साथ ही वेब अनुप्रयोगों (जैसे अनुरेखण अनुरोध) के विश्लेषण के लिए कस्टम लॉग प्रारूपों को कॉन्फ़िगर करने के लिए।

यह लेख तीन खंडों से बना है जो आपको पहुंच/त्रुटि लॉग कॉन्फ़िगर करने के बारे में बताएंगे और कैसे नग्नेक्स में सशर्त लॉगिंग को सक्षम करने के बारे में बताएंगे।

Nginx में प्रवेश लॉग कॉन्फ़िगर करना

Nginx के तहत, सर्वर के सभी क्लाइंट अनुरोध ngx_http_log_module मॉड्यूल का उपयोग करके एक निर्दिष्ट प्रारूप में एक्सेस लॉग में होते हैं।

डिफ़ॉल्ट लॉग फ़ाइल लॉग/एक्सेस.लॉग (आमतौर पर /var/log/nginx/access_log लिनक्स सिस्टम पर) और लॉगिंग के लिए डिफ़ॉल्ट प्रारूप सामान्य रूप से संयुक्त या मुख्य है प्रारूप (यह एक डिस्ट्रो से दूसरे में भिन्न हो सकता है)।

लॉग फ़ाइल को सेट करने के लिए access_log निर्देश (http, सर्वर, स्थान, यदि स्थान और सीमा में लागू होता है) का उपयोग लॉग फ़ाइल और log_format निर्देश (के तहत लागू) को सेट करने के लिए किया जाता है केवल लॉग प्रारूप सेट करने के लिए http संदर्भ) का उपयोग किया जाता है। लॉग प्रारूप को सामान्य चर, और चर द्वारा वर्णित किया जाता है जो केवल उस समय उत्पन्न होता है जब कोई लॉग लिखा जाता है।

लॉग प्रारूप को कॉन्फ़िगर करने का सिंटैक्स है:

log_format format_name 'set_of_variables_to_define_format';

और एक्सेस लॉग को कॉन्फ़िगर करने का सिंटैक्स है:

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

निम्न डिफ़ॉल्ट Nginx कॉन्फ़िगरेशन फ़ाइल का एक अंश है CentOS 7 पर /etc/nginx/nginx.conf

/etc/nginx/nginx.conf

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

यह लॉग प्रारूप निम्न लॉग प्रविष्टि देता है।

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"

निम्नलिखित एक और उपयोगी लॉगिंग प्रारूप है, जिसका उपयोग हम अपने वेब अनुप्रयोगों के लिए कुछ डिफ़ॉल्ट चर का उपयोग करते हुए अनुरोधों के लिए करते हैं, इसमें सबसे महत्वपूर्ण रूप से अनुरोध आईडी और क्लाइंट स्थान विवरण (देश, देश कोड, क्षेत्र और शहर) शामिल हैं।

/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" $request_id '
                   		     '$geoip_country_name $geoip_country_code '
                  		     '$geoip_region_name $geoip_city ';

आप इसे इस तरह से उपयोग कर सकते हैं:

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

यह एक लॉग प्रविष्टि का उत्पादन करेगा जो इस तरह दिखाई देता है।

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 

आप एक ही स्तर पर access_log निर्देशों का उपयोग करके कई लॉग निर्दिष्ट कर सकते हैं, यहां हम http संदर्भ में एक से अधिक लॉग फ़ाइल का उपयोग कर रहे हैं।

/etc/nginx/nginx.conf

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

निम्नलिखित अधिक उन्नत लॉगिंग कॉन्फ़िगरेशन उदाहरण हैं, जो लॉग प्रारूपों के लिए उपयोगी हैं जिनमें संपीड़न-संबंधित चर शामिल हैं और संकुचित लॉग फ़ाइलें बनाने के लिए:

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

Nginx में त्रुटि लॉग कॉन्फ़िगर करना

यदि Nginx किसी भी ग्लिच का अनुभव करता है, तो यह त्रुटि लॉग में उनके विषय में जानकारी दर्ज करता है। ये मुद्दे विभिन्न गंभीरता स्तरों के अंतर्गत आते हैं: डिबग , जानकारी , नोटिस , चेतावनी , त्रुटि (यह डिफ़ॉल्ट स्तर है और विश्व स्तर पर काम करता है), crit , अलर्ट , या emerg

डिफ़ॉल्ट लॉग फ़ाइल log/error.log है, लेकिन यह सामान्यतः लिनक्स वितरण पर /var/log/nginx/ में स्थित है। error_log निर्देश का उपयोग लॉग फ़ाइल को निर्दिष्ट करने के लिए किया जाता है, और इसका उपयोग मुख्य, http, मेल, स्ट्रीम, सर्वर, स्थान संदर्भ (उस क्रम में) में किया जा सकता है।

आपको यह भी ध्यान देना चाहिए कि:

  • Configurations in the main context are always inherited by lower levels in the order above.
  • and configurations in the lower levels override the configurations inherited from the higher levels.

आप निम्न सिंटैक्स का उपयोग करके त्रुटि लॉगिंग को कॉन्फ़िगर कर सकते हैं:

error_log /path/to/log_file log_level;

उदाहरण के लिए:

error_log /var/log/nginx/error_log warn; 

यह Nginx को टाइप के सभी संदेशों को लॉग करने का निर्देश देगा चेतावनी और अधिक गंभीर लॉग स्तर क्रिट , अलर्ट , और एमर्ज संदेश।

अगले उदाहरण में, क्रिट , अलर्ट और एमर्ज लेवल के संदेश लॉग किए जाएंगे।

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

नीचे दिए गए कॉन्फ़िगरेशन पर विचार करें, यहां, हमने विभिन्न स्तरों (http और सर्वर संदर्भ में) में त्रुटि लॉगिंग को परिभाषित किया है। त्रुटि के मामले में, संदेश केवल एक त्रुटि लॉग को लिखा जाता है, उस स्तर के सबसे करीब जहां त्रुटि दिखाई दी है।

/etc/nginx/nginx.conf

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

यदि आप एक से अधिक error_log निर्देशों का उपयोग करते हैं तो नीचे कॉन्फ़िगरेशन (समान स्तर) में, संदेश सभी निर्दिष्ट लॉग में लिखे गए हैं।

/etc/nginx/nginx.conf

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

Nginx में सशर्त लॉगिंग कॉन्फ़िगर करना

कुछ मामलों में, हम चाहते हैं कि नग्नेक्स संदेशों की सशर्त लॉगिंग कर सके। प्रत्येक संदेश को नगनेक्स द्वारा लॉग नहीं करना पड़ता है, इसलिए हम विशेष अग्रिमों के लिए हमारे प्रवेश लॉग से महत्वहीन या कम महत्वपूर्ण लॉग प्रविष्टियों को अनदेखा कर सकते हैं।

हम ngx_http_map_module मॉड्यूल का उपयोग कर सकते हैं जो वैरिएबल बनाता है जिनके मान अन्य वैरिएबल के मूल्यों पर निर्भर करते हैं। मानचित्र ब्लॉक (जो केवल http सामग्री में मौजूद होना चाहिए) के अंदर पैरामीटर स्रोत और परिणामी मानों के बीच मानचित्रण निर्दिष्ट करता है।

इस तरह की सेटिंग के लिए, यदि स्थिति "0" या रिक्त स्ट्रिंग का मूल्यांकन करती है, तो एक अनुरोध लॉग नहीं किया जाएगा। यह उदाहरण HTTP स्थिति कोड 2xx और 3xx के साथ अनुरोधों को बाहर करता है।

/etc/nginx/nginx.conf

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

विकास के चरण में वेब एप्लिकेशन को डिबग करने के लिए यहां एक और उपयोगी उदाहरण है। यह सभी संदेशों को अनदेखा करेगा और केवल डीबग जानकारी लॉग करेगा।

/etc/nginx/nginx.conf

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

आप अधिक जानकारी प्राप्त कर सकते हैं, जिसमें लॉग इन करने के लिए यहां syslog शामिल है।

अभी के लिए इतना ही! इस मार्गदर्शिका में, हमने बताया कि निगनेक्स में एक्सेस और त्रुटि लॉग के लिए कस्टम लॉगिंग प्रारूप को कैसे कॉन्फ़िगर किया जाए। प्रश्न पूछने या इस लेख के बारे में अपने विचार साझा करने के लिए नीचे दिए गए फ़ीडबैक फ़ॉर्म का उपयोग करें।