মূল কন্টেন্টে যান
মডিউল 8 · 2-এর পাঠ 4কোর্সে 30/32~12 min
মডিউল পাঠ (2/4)

অ্যাপাচি লগ পার্সার

Apache লগের (সম্মিলিত বিন্যাস) একটি সুনির্দিষ্ট গঠন আছে:

Code
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234

নামিত গোষ্ঠী সহ একটি প্যাটার্ন প্রতিটি ক্ষেত্রকে এক শটে বের করে:

Code
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)

এটি দেখতে ভয়ঙ্কর, কিন্তু এটি সহজ নিদর্শনগুলির সংযুক্তি:

  • (?<ip>\d+\.\d+\.\d+\.\d+) -- উৎস IPv4।
  • \s+\S+\s+\S+ -- ব্যবহারকারী আইডি (সাধারণত -)।
  • \[[^\]]+\] -- বর্গাকার বন্ধনীতে তারিখ।
  • "(?<metodo>\w+)\s+(?<path>\S+)\s+\S+" -- এইচটিটিপি পদ্ধতি, পথ এবং সংস্করণ সহ উদ্ধৃতিতে অনুরোধ।
  • (?<status>\d+)\s+(?<size>\d+) -- স্ট্যাটাস কোড এবং বাইট পাঠানো হয়েছে।

সাধারণ কৌশল

  1. বাস্তব লাইন থেকে শুরু করুন এবং ডিলিমিটারগুলি পিন করুন: স্পেস, উদ্ধৃতি, বন্ধনী।
  2. ডিলিমিটারের মধ্যে, টোকেনের টাইপ চিহ্নিত করুন (আইপি, শব্দ, সংখ্যা)।
  3. নামিত গ্রুপে মোড়ানো শুধুমাত্র যা আপনাকে বের করতে হবে।

জটিল লগ পার্সিং

লগ পার্সিং-এ, ক্ষেত্রগুলি সাধারণত স্থান-বিচ্ছিন্ন হয় যখন তারা উদ্ধৃত স্ট্রিং বা বন্ধনী (যেমন ব্যবহারকারী-এজেন্ট) ধারণ করে। ওয়াইল্ডকার্ড ডটের পরিবর্তে ক্যারেক্টার ক্লাস বাদ দিলে একাধিক কলাম ভুলভাবে মার্জ করা বাধা দেয়।

চেষ্টা করে দেখুন

ব্যায়াম#regex.m8.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

নামযুক্ত গ্রুপ `ip` হিসাবে প্রতিটি লগ লাইনের শুরুতে IPv4 বের করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

^ এবং m পতাকা দিয়ে লাইনের শুরুতে নোঙ্গর করুন এবং আইপিকে (?<ip>...) দিয়ে মুড়ে দিন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#regex.m8.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

গোষ্ঠী `মেটোডো` এবং `পাথ` হিসাবে কোটগুলির মধ্যে অনুরোধের HTTP পদ্ধতি এবং পথটি বের করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

" দিয়ে খুলুন, তারপর (?<metodo>\\w+)\\s+(?<path>\\S+)।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অতিরিক্ত চ্যালেঞ্জ

ব্যায়াম#regex.m8.l2.e3
প্রচেষ্টা: 0লোড হচ্ছে...

Extract only the date and time part enclosed in brackets in logs, e.g. `10/Oct/2024:13:55:36 +0000`, as a named group `timestamp`.

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ