এনগিনেক্সে কীভাবে কাস্টম অ্যাক্সেস এবং ত্রুটি লগ ফর্ম্যাটগুলি কনফিগার করবেন


এনগিনেক্স এইচটিটিপি সার্ভারে একটি অসাধারণ লগিং সুবিধা রয়েছে যা অত্যন্ত স্বনির্ধারিত। এই নিবন্ধে, আমরা লিনাক্সে এনগিনেক্সের অ্যাক্সেস এবং ত্রুটি লগগুলির জন্য আপনার নিজের ফর্ম্যাটগুলি কীভাবে কনফিগার করতে হবে তা আমরা ব্যাখ্যা করব।

এই গাইডের উদ্দেশ্য হ'ল লগগুলি কীভাবে উত্পন্ন হয় তা বুঝতে সহায়তা করা, যাতে আপনার ওয়েব সার্ভারের মধ্যে কী কী ওয়েব অ্যাপ্লিকেশনগুলির (যেমন ট্রেসিংয়ের অনুরোধগুলি) উদ্ঘাটিত হয় তার ডিবাগিং, সমস্যা সমাধান বা বিশ্লেষণের উদ্দেশ্যে কাস্টম লগ ফর্ম্যাটগুলি কনফিগার করা।

এই নিবন্ধটি তিনটি বিভাগ দ্বারা তৈরি করা হয়েছে যা আপনাকে অ্যাক্সেস/ত্রুটিযুক্ত লগগুলি কনফিগার করতে এবং এনজিএনএক্সে কীভাবে শর্তযুক্ত লগিং সক্ষম করবেন সে সম্পর্কে আলোকিত করবে।

এনগিনেক্সে অ্যাক্সেস লগগুলি কনফিগার করা

Nginx এর অধীনে সার্ভারের সমস্ত ক্লায়েন্টের অনুরোধগুলি ngx_http_log_module মডিউলটি ব্যবহার করে একটি নির্দিষ্ট ফর্ম্যাটে অ্যাক্সেস লগটিতে পুনরুদ্ধার করা হয়।

ডিফল্ট লগ ফাইলটি লগ/অ্যাক্সেস.লগ (লিনাক্স সিস্টেমে সাধারণত/ভার/লগ/এনজিন্স/অ্যাক্সেস_লগ) হয় এবং লগিংয়ের জন্য পূর্বনির্ধারিত ফর্ম্যাটটি সাধারণত সংযুক্ত বা প্রধান ফর্ম্যাট হয় (এটি এক ডিগ্রো থেকে অন্যে পরিবর্তিত হতে পারে)।

অ্যাক্সেস_লগ নির্দেশিকা (প্রবন্ধ ব্যতীত HTTP, সার্ভার, অবস্থানের ক্ষেত্রে প্রযোজ্য এবং সীমাতে প্রযোজ্য) লগ ফাইল সেট করতে ব্যবহৃত হয় এবং লগ ফর্ম্যাট নির্দেশিকা (কেবলমাত্র 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]];

সেন্টোস 7 এ ডিফল্ট Nginx কনফিগারেশন ফাইল /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"

নিম্নলিখিতটি অন্য কার্যকর লগিং ফর্ম্যাট যা আমরা আমাদের ওয়েব অ্যাপ্লিকেশনগুলিতে কিছু ডিফল্ট ভেরিয়েবল ব্যবহার করে অনুরোধগুলি ট্রেস করার জন্য ব্যবহার করি, এটির মধ্যে সবচেয়ে গুরুত্বপূর্ণ হল অনুরোধ আইডি এবং লগ ক্লায়েন্টের অবস্থানের বিশদ (দেশ, দেশের কোড, অঞ্চল এবং শহর)।

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 

আপনি একই স্তরের অ্যাক্সেস_লগ নির্দেশাবলী ব্যবহার করে বেশ কয়েকটি লগ নির্দিষ্ট করতে পারেন, এখানে আমরা 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;
}

নীচে আরও উন্নত লগিং কনফিগারেশনের উদাহরণ রয়েছে, যা সংক্ষেপণ সম্পর্কিত ভেরিয়েবলগুলি ধারণ করে এবং সংকোচিত লগ ফাইলগুলি তৈরি করার জন্য লগ ফর্ম্যাটগুলির জন্য কার্যকর:

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

এনগিনেক্সে ত্রুটি লগগুলি কনফিগার করা

এনগিনেক্স কোনও সমস্যা দেখা দিলে এটি ত্রুটি লগতে তাদের সম্পর্কিত তথ্য রেকর্ড করে log এই সমস্যাগুলি বিভিন্ন তীব্রতার স্তরের অধীনে আসে: ডিবাগ, তথ্য, বিজ্ঞপ্তি, সতর্কতা, ত্রুটি (এটি ডিফল্ট স্তর এবং বিশ্বব্যাপী কাজ করে), সমালোচক, সতর্কতা বা উদীয়মান।

ডিফল্ট লগ ফাইলটি লগ/ত্রুটি.লগ হয় তবে এটি সাধারণত লিনাক্স বিতরণে/var/log/nginx/এ থাকে। ত্রুটি_লগ নির্দেশটি লগ ফাইল নির্দিষ্ট করতে ব্যবহৃত হয় এবং এটি মূল, HT, মেল, স্ট্রিম, সার্ভার, অবস্থানের প্রসঙ্গে (সেই ক্রমে) ব্যবহার করা যেতে পারে।

আপনার এটিও লক্ষ্য করা উচিত:

  • মূল প্রসঙ্গে কনফিগারেশনগুলি সর্বদা উপরের ক্রমের নিম্ন স্তরের দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়
  • এবং নিম্ন স্তরের কনফিগারেশনগুলি উচ্চ স্তর থেকে প্রাপ্ত কনফিগারেশনগুলিকে ওভাররাইড করে।

আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে ত্রুটি লগিং কনফিগার করতে পারেন:

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 এবং সার্ভারের প্রসঙ্গে) লগিংয়ের ত্রুটি সংজ্ঞা দিয়েছি। কোনও ত্রুটির ক্ষেত্রে, বার্তাটি কেবল একটি ত্রুটি লগতে লেখা হয়, ত্রুটিটি যে স্তরের কাছে উপস্থিত হয়েছিল তার নিকটতম এটি।

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

আপনি নীচের কনফিগারেশন (একই স্তর) হিসাবে একাধিক ত্রুটি_লগ নির্দেশাবলী ব্যবহার করে, বার্তা সমস্ত নির্দিষ্ট লগতে লেখা হয়।

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 বার্তাগুলির শর্তযুক্ত লগিং সম্পাদন করতে চাই। প্রতিটি বার্তা Nginx দ্বারা লগ করা উচিত নয়, তাই আমরা উদাহরণ হিসাবে আমাদের অ্যাক্সেস লগ থেকে তাত্পর্যপূর্ণ বা কম গুরুত্বপূর্ণ লগ এন্ট্রি উপেক্ষা করতে পারি।

আমরা ngx_http_map_module মডিউলটি ব্যবহার করতে পারি যা ভেরিয়েবল তৈরি করে যার মানগুলি অন্যান্য ভেরিয়েবলের মানের উপর নির্ভর করে। মানচিত্রের ব্লকের ভিতরে থাকা প্যারামিটারগুলি (যা কেবলমাত্র http সামগ্রীতে থাকা উচিত) উত্স এবং ফলাফলের মানগুলির মধ্যে একটি ম্যাপিং নির্দিষ্ট করে।

এই ধরণের সেটিংয়ের জন্য, শর্তটি "0" বা একটি খালি স্ট্রিংয়ের মূল্যায়ন করলে একটি অনুরোধ লগ করা হবে না। এই উদাহরণটি HTTP স্থিতি কোড 2xx এবং 3xx সহ অনুরোধগুলি বাদ দেয়।

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

উন্নয়নের পর্যায়ে ওয়েব অ্যাপ্লিকেশন ডিবাগ করার জন্য এখানে আরও একটি দরকারী উদাহরণ। এটি সমস্ত বার্তা উপেক্ষা করবে এবং কেবল ডিবাগ তথ্য লগ করবে।

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

আপনি এখানে সিসলগে লগিং সহ আরও তথ্য সন্ধান করতে পারেন।

এখন এ পর্যন্তই! এই গাইডটিতে, আমরা ব্যাখ্যা করেছি যে কীভাবে Nginx এ অ্যাক্সেস এবং ত্রুটিযুক্ত লগগুলির জন্য কাস্টম লগিং বিন্যাসটি কনফিগার করতে হয়। প্রশ্ন জিজ্ঞাসা করতে বা এই নিবন্ধটি সম্পর্কে আপনার মতামত ভাগ করতে নীচের প্রতিক্রিয়া ফর্মটি ব্যবহার করুন।