שיעורי מודול (2/4)
מנתח יומן אפאצ'י
ליומני Apache (פורמט משולב) יש מבנה מדויק:
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+-- מזהי המשתמש (בדרך כלל-).\[[^\]]+\]-- התאריך בסוגריים מרובעים."(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- הבקשה במירכאות, עם שיטת HTTP, נתיב וגרסה.(?<status>\d+)\s+(?<size>\d+)-- קוד סטטוס ובייטים נשלחו.
אסטרטגיה כללית
- התחל מהשורה האמיתית והצמד את המפרידים: רווחים, מרכאות, סוגריים.
- בין מפרידים, זהה את סוג האסימון (IP, מילה, מספר).
- עטפו בקבוצות עם שם רק מה שצריך לחלץ.
ניתוח יומנים מורכבים
בניתוח יומן, שדות בדרך כלל מופרדים ברווח, למעט כאשר הם מכילים מחרוזות או סוגריים במרכאות (למשל, ה-user-agent). שימוש במחלקות אי הכללה של תווים במקום בנקודה הכללית מונע מיזוג עמודות מרובות באופן שגוי.
נסה את זה
חלץ את ה-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 ניסיונות