Salt la conținutul principal
Modulul 8 · Lecția 2 din 430/32 în curs~12 min
Lecții din modul (2/4)

Analizor de jurnal Apache

Jurnalele Apache (format combinat) au o structură precisă:

Code
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234

Un model cu grupuri denumite extrage fiecare câmp într-o singură lovitură:

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+)

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ă

  1. Începe de la linia reală și pinează delimitatorii: spații, ghilimele, paranteze.
  2. Între delimitatori, identificați tipul de simbol (IP, cuvânt, număr).
  3. Î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ă

Exercițiu#regex.m8.l2.e1
Încercări: 0Se încarcă…

Extrageți IPv4 la începutul fiecărei linii de jurnal ca grup numit „ip”.

Se încarcă editorul...
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

Exercițiu#regex.m8.l2.e2
Încercări: 0Se încarcă…

Extrageți metoda HTTP și calea cererii între ghilimele, ca grupuri `metodo` și `path`.

Se încarcă editorul...
Afișează indiciu

Deschideți cu „, apoi (?<metodo>\\w+)\\s+(?<cale>\\S+).

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#regex.m8.l2.e3
Încercări: 0Se încarcă…

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`.

Se încarcă editorul...
Afișează indiciu

Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.

Soluție disponibilă după 3 încercări