Nginx অ্যাক্সেস লগ: প্রতিটি ফিল্ডের অর্থ এবং বিশ্লেষণ
Nginx অ্যাক্সেস লগ আপনার ওয়েব সার্ভার দ্বারা পরিচালিত প্রতিটি অনুরোধ রেকর্ড করে। 404 ডিবাগিং, ধীর এন্ডপয়েন্ট খোঁজা, বা সন্দেহজনক ট্রাফিক তদন্ত করার সময় এটিই প্রথম দেখার জায়গা। তবুও অনেক ডেভেলপার প্রতিটি ফিল্ড সম্পূর্ণ না বুঝেই কাঁচা লগ লাইনগুলো দেখে যান। এই গাইডে ডিফল্ট Nginx লগ ফরম্যাট বিশ্লেষণ করা হয়েছে, কীভাবে কাস্টমাইজ করবেন তা দেখানো হয়েছে, এবং স্ট্যান্ডার্ড কমান্ড-লাইন টুল ব্যবহার করে ব্যবহারিক বিশ্লেষণ কৌশল আলোচনা করা হয়েছে।
ডিফল্ট Nginx অ্যাক্সেস লগ ফরম্যাট
ডিফল্টভাবে, Nginx combined লগ ফরম্যাট ব্যবহার করে, যা দেখতে এমন:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
একটি সাধারণ লগ লাইন:
192.0.2.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
ফিল্ড-বাই-ফিল্ড ব্যাখ্যা
| ফিল্ড | ভেরিয়েবল | বর্ণনা |
|---|---|---|
| রিমোট অ্যাড্রেস | $remote_addr | অনুরোধকারী ক্লায়েন্টের IP ঠিকানা। |
| রিমোট ইউজার | $remote_user | HTTP প্রমাণীকরণ ব্যবহার করলে ব্যবহারকারীর নাম; অন্যথায় -। |
| টাইম লোকাল | $time_local | স্থানীয় সার্ভার সময় [day/month/year:hour:minute:second zone] ফরম্যাটে। |
| রিকোয়েস্ট | $request | সম্পূর্ণ অনুরোধ লাইন: পদ্ধতি, পাথ এবং HTTP প্রোটোকল। |
| স্ট্যাটাস | $status | HTTP প্রতিক্রিয়া স্ট্যাটাস কোড (যেমন, 200, 404, 500)। |
| বডি বাইট সেন্ট | $body_bytes_sent | হেডার বাদে বাইটে প্রতিক্রিয়া বডির আকার। |
| রেফারার | $http_referer | অনুরোধের সাথে লিঙ্ক করা পৃষ্ঠা (ক্লায়েন্ট প্রদান করলে)। |
| ইউজার এজেন্ট | $http_user_agent | ক্লায়েন্ট সফটওয়্যার স্ট্রিং (ব্রাউজার, বট, টুল)। |
লগ ফরম্যাট কাস্টমাইজ করা
আপনি অনুরোধের সময়, আপস্ট্রিম প্রতিক্রিয়া সময়, বা gzip অনুপাতের মতো অতিরিক্ত বিবরণ ক্যাপচার করতে নিজের ফরম্যাট সংজ্ঞায়িত করতে পারেন। http ব্লকে একটি log_format নির্দেশিকা যোগ করুন এবং access_log-এ এটি রেফারেন্স করুন।
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/log/nginx/access.log detailed;
}
সাধারণ অতিরিক্ত ভেরিয়েবল:
$request_time– প্রথম বাইট প্রাপ্তি থেকে শেষ বাইট প্রেরণ পর্যন্ত মোট সময়।$upstream_response_time– আপস্ট্রিমের (যেমন, PHP-FPM, Node.js) জন্য অপেক্ষার সময়।$gzip_ratio– gzip সক্রিয় থাকলে কম্প্রেশন অনুপাত।$http_x_forwarded_for– প্রক্সি বা লোড ব্যালেন্সারের পিছনে থাকলে মূল ক্লায়েন্ট IP।
কমান্ড-লাইন টুল দিয়ে Nginx লগ বিশ্লেষণ
অন্তর্দৃষ্টি পেতে আপনার ব্যয়বহুল সফটওয়্যার প্রয়োজন নেই। grep, awk, sort, এবং uniq-এর মতো স্ট্যান্ডার্ড ইউনিক্স টুল বেশিরভাগ কাজের জন্য যথেষ্ট শক্তিশালী।
১. সর্বাধিক ঘন ঘন IP ঠিকানা খুঁজুন
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
এটি ভারী হিটার বা সম্ভাব্য DDoS উৎস সনাক্ত করতে সহায়তা করে।
২. শীর্ষ অনুরোধকৃত URL চিহ্নিত করুন
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
জনপ্রিয় কন্টেন্ট বুঝতে বা অস্বাভাবিক প্যাটার্ন সনাক্ত করতে উপযোগী।
৩. HTTP স্ট্যাটাস কোড গণনা করুন
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
কতগুলো 404 বা 500 ঘটছে তা দ্রুত দেখুন।
৪. ধীর প্রতিক্রিয়া সময়ের অনুরোধ খুঁজুন
আপনি যদি আপনার লগ ফরম্যাটে $request_time যোগ করেন, তাহলে ধীর অনুরোধ ফিল্টার করতে পারেন:
awk '{ if ($NF > 1) print }' /var/log/nginx/access.log
প্রয়োজন অনুযায়ী থ্রেশহোল্ড (এখানে ১ সেকেন্ড) সামঞ্জস্য করুন।
৫. সন্দেহজনক ইউজার এজেন্ট সনাক্ত করুন
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
পরিচিত খারাপ বট বা অস্বাভাবিক ক্লায়েন্টের জন্য দেখুন।
ব্যবহারিক ব্যবহারের ক্ষেত্রে
- ট্রাবলশুটিং: নির্দিষ্ট এন্ডপয়েন্ট বা আপস্ট্রিম প্রতিক্রিয়া সময়ের সাথে 500 ত্রুটি সম্পর্কিত করুন।
- পারফরম্যান্স টিউনিং: ধীর পৃষ্ঠাগুলি চিহ্নিত করুন এবং ডেটাবেস কোয়েরি বা ক্যাশিং অপ্টিমাইজ করুন।
- নিরাপত্তা পর্যবেক্ষণ: ব্রুট-ফোর্স প্রচেষ্টা (একই IP থেকে অনেক 401/403) বা URL-এ SQL ইনজেকশন প্যাটার্ন সনাক্ত করুন।
- ক্যাপাসিটি প্ল্যানিং: স্কেলিং প্রয়োজনীয়তা অনুমান করতে সময়ের সাথে অনুরোধের পরিমাণ ট্র্যাক করুন।
লগ পার্সার দিয়ে বিশ্লেষণ স্বয়ংক্রিয় করা
যদিও কমান্ড-লাইন ওয়ান-লাইনার অ্যাড-হক কোয়েরির জন্য কাজ করে, নিয়মিত রিপোর্টিংয়ের জন্য ডেডিকেটেড টুল উপকারী। আপনি GoAccess বা AWStats-এর মতো ওপেন-সোর্স লগ বিশ্লেষক ব্যবহার করতে পারেন, বা কাস্টম স্ক্রিপ্ট তৈরি করতে পারেন। কিছু ইনস্টল না করে দ্রুত, ব্রাউজার-ভিত্তিক পার্সিংয়ের জন্য, Nginx Log Analyzer আপনাকে লগ লাইন পেস্ট করতে দেয় এবং স্ট্যাটাস কোড, শীর্ষ IP, এবং অনুরোধকৃত পাথের তাৎক্ষণিক সারাংশ পেতে দেয়।
লগ ম্যানেজমেন্টের জন্য সেরা অনুশীলন
- নিয়মিত লগ রোটেট করুন: ডিস্ক স্পেস সমস্যা এড়াতে
logrotateব্যবহার করুন। - লগ কেন্দ্রীভূত করুন: দীর্ঘমেয়াদী স্টোরেজ এবং অনুসন্ধানের জন্য একটি লগ ম্যানেজমেন্ট সিস্টেমে (যেমন, ELK, Graylog) পাঠান।
- রিকোয়েস্ট ID অন্তর্ভুক্ত করুন: অ্যাপ্লিকেশন লগের সাথে সম্পর্কিত করতে
$request_idযোগ করুন। - গোপনীয়তা respect করুন: GDPR বা অন্যান্য প্রবিধানের প্রয়োজন হলে IP অ্যানোনিমাইজ করুন।
সাধারণ প্রশ্নোত্তর
Nginx-এ অ্যাক্সেস লগ এবং ত্রুটি লগের মধ্যে পার্থক্য কী?
অ্যাক্সেস লগ Nginx দ্বারা পরিচালিত প্রতিটি অনুরোধ রেকর্ড করে, যার মধ্যে ক্লায়েন্ট IP, অনুরোধ পদ্ধতি, স্ট্যাটাস কোড, এবং ইউজার এজেন্ট অন্তর্ভুক্ত। ত্রুটি লগ সার্ভার সমস্যা সম্পর্কে ডায়াগনস্টিক বার্তা ক্যাপচার করে, যেমন ব্যর্থ সংযোগ, কনফিগারেশন ত্রুটি, বা আপস্ট্রিম টাইমআউট। উভয়ই বিভিন্ন ট্রাবলশুটিং পরিস্থিতির জন্য অপরিহার্য।
Nginx লোড ব্যালেন্সারের পিছনে থাকলে আমি কীভাবে আসল ক্লায়েন্ট IP দেখতে পারি?
যখন Nginx প্রক্সি বা লোড ব্যালেন্সারের পিছনে থাকে, $remote_addr ব্যালেন্সারের IP দেখায়। মূল ক্লায়েন্ট IP লগ করতে, real_ip মডিউলকে ব্যালেন্সারের IP বিশ্বাস করতে কনফিগার করুন এবং আপনার লগ ফরম্যাটে $http_x_forwarded_for বা $realip_remote_addr ব্যবহার করুন।
সফটওয়্যার ইনস্টল না করে কি আমি Nginx লগ বিশ্লেষণ করতে পারি?
হ্যাঁ। আপনি টার্মিনালে সরাসরি grep, awk, এবং sort-এর মতো স্ট্যান্ডার্ড ইউনিক্স কমান্ড ব্যবহার করতে পারেন। গ্রাফিক্যাল, ব্রাউজার-ভিত্তিক পদ্ধতির জন্য, Nginx Log Analyzer-এর মতো অনলাইন টুল কোনো ইনস্টলেশন ছাড়াই দ্রুত অন্তর্দৃষ্টি প্রদান করে।
আপনার লগে ডুব দিতে প্রস্তুত? Nginx Log Analyzer ব্যবহার করে সেকেন্ডের মধ্যে আপনার অ্যাক্সেস লগ পার্স এবং ভিজ্যুয়ালাইজ করুন—কোনও সেটআপ প্রয়োজন নেই।