דילוג לתוכן המרכזי
מודול 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. עטפו בקבוצות עם שם רק מה שצריך לחלץ.

ניתוח יומנים מורכבים

בניתוח יומן, שדות בדרך כלל מופרדים ברווח, למעט כאשר הם מכילים מחרוזות או סוגריים במרכאות (למשל, ה-user-agent). שימוש במחלקות אי הכללה של תווים במקום בנקודה הכללית מונע מיזוג עמודות מרובות באופן שגוי.

נסה את זה

פעילות גופנית#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 ניסיונות