Lecții din modul (2/4)
Analizor de jurnal Apache
Jurnalele Apache (format combinat) au o structură precisă:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234Un model cu grupuri denumite extrage fiecare câmp într-o singură lovitură:
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)Pare monstruos, dar este concatenarea de modele simple:
(?<ip>\d+\.\d+\.\d+\.\d+)-- sursa IPv4.\s+\S+\s+\S+-- ID-urile utilizatorului (de obicei-).\[[^\]]+\]-- data între paranteze drepte."(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- cererea între ghilimele, cu metoda, calea și versiunea HTTP.(?<status>\d+)\s+(?<size>\d+)-- codul de stare și octeții trimiși.
Strategia generală
- Începe de la linia reală și pinează delimitatorii: spații, ghilimele, paranteze.
- Între delimitatori, identificați tipul de simbol (IP, cuvânt, număr).
- Închideți în grupuri numite numai ceea ce aveți nevoie pentru a extrage.
Analizarea jurnalelor complexe
În analiza jurnalelor, câmpurile sunt de obicei separate prin spațiu, cu excepția cazului în care conțin șiruri de caractere sau paranteze între ghilimele (de exemplu, user-agent). Utilizarea excluderii claselor de caractere în locul punctului metacar previne îmbinarea incorect a mai multor coloane.
Încearcă
Extrageți IPv4 la începutul fiecărei linii de jurnal ca grup numit „ip”.
Afișează indiciu
Ancorați la începutul liniei cu ^ și steag-ul m și înfășurați IP-ul în (?<ip>...).
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Extrageți metoda HTTP și calea cererii între ghilimele, ca grupuri `metodo` și `path`.
Afișează indiciu
Deschideți cu „, apoi (?<metodo>\\w+)\\s+(?<cale>\\S+).
Soluție disponibilă după 3 încercări
Provocare suplimentară
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`.
Afișează indiciu
Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.
Soluție disponibilă după 3 încercări