الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 2 من 430/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+" -- الطلب بين علامتي اقتباس، مع أسلوب HTTP والمسار والإصدار.
  • (?<status>\d+)\s+(?<size>\d+) - تم إرسال رمز الحالة والبايتات.

الإستراتيجية العامة

  1. ابدأ من السطر الحقيقي وثبت المحددات: مسافات، علامات الاقتباس، الأقواس.
  2. بين المحددات، حدد نوع الرمز المميز (IP، كلمة، رقم).
  3. قم بتضمين مجموعات مسماة فقط ما تحتاج إلى استخراجه.

تحليل السجلات المعقدة

في تحليل السجل، تكون الحقول عادةً مفصولة بمسافات إلا عندما تحتوي على سلاسل أو أقواس مقتبسة (مثل وكيل المستخدم). يؤدي استخدام استبعاد فئات الأحرف بدلاً من نقطة البدل إلى منع دمج أعمدة متعددة بشكل غير صحيح.

جربه

تمرين#regex.m8.l2.e1
المحاولات: 0جارٍ التحميل…

قم باستخراج IPv4 في بداية كل سطر سجل كمجموعة مسماة `ip`.

جارٍ تحميل المحرر…
إظهار التلميح

قم بالارتساء في بداية السطر الذي يحتوي على ^ والعلامة m، وقم بلف IP في (؟<ip>...).

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#regex.m8.l2.e2
المحاولات: 0جارٍ التحميل…

قم باستخراج طريقة HTTP ومسار الطلب بين علامتي الاقتباس، كمجموعات "metodo" و"path".

جارٍ تحميل المحرر…
إظهار التلميح

افتح باستخدام "، ثم (?<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 من المحاولات