ماڈیول اسباق (2/4)
اپاچی لاگ پارسر
اپاچی لاگز (مشترکہ فارمیٹ) کی ایک درست ساخت ہے:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234نام والے گروپس کے ساتھ ایک پیٹرن ہر فیلڈ کو ایک شاٹ میں نکالتا ہے:
^(?<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+-- صارف IDs (عام طور پر-)۔\[[^\]]+\]-- مربع بریکٹ میں تاریخ۔"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- اقتباسات میں درخواست، HTTP طریقہ، راستہ اور ورژن کے ساتھ۔(?<status>\d+)\s+(?<size>\d+)-- اسٹیٹس کوڈ اور بائٹس بھیجے گئے۔
عمومی حکمت عملی
- اصل لائن سے شروع کریں اور حد بندی کرنے والوں کو پن کریں: خالی جگہیں، کوٹس، بریکٹس۔
- حد بندی کرنے والوں کے درمیان، ٹوکن کی قسم کی شناخت کریں (IP، لفظ، نمبر)۔
- نام گروپوں میں لپیٹیں صرف وہی جو آپ کو نکالنے کی ضرورت ہے۔
پیچیدہ لاگز کو پارس کرنا
لاگ پارسنگ میں، فیلڈز کو عام طور پر جگہ سے الگ کیا جاتا ہے سوائے اس کے کہ جب ان میں کوٹڈ سٹرنگز یا بریکٹ ہوتے ہوں (جیسے صارف کا ایجنٹ)۔ وائلڈ کارڈ ڈاٹ کے بجائے کریکٹر کلاسز کو خارج کرنا متعدد کالموں کو غلط طریقے سے ضم ہونے سے روکتا ہے۔
اسے آزمائیں
IPv4 کو ہر لاگ لائن کے شروع میں بطور نامزد گروپ `ip` نکالیں۔
اشارہ دکھائیں۔
^ اور m پرچم کے ساتھ لائن کے آغاز پر اینکر کریں، اور IP کو (?<ip>...) میں لپیٹ دیں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
اقتباسات کے درمیان درخواست کا HTTP طریقہ اور راستہ نکالیں، بطور گروپ `metodo` اور `path`۔
اشارہ دکھائیں۔
" کے ساتھ کھولیں، پھر (?<metodo>\\w+)\\s+(?<path>\\S+)۔
3 کوششوں کے بعد حل دستیاب ہے۔
اضافی چیلنج
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 کوششوں کے بعد حل دستیاب ہے۔