Przejdź do głównej treści
eLearner.app
Moduł 8 · Lekcja 2 z 430/32 w kursie~12 min
Lekcje modułu (2/4)

Parser logów Apache

Logi Apache (format połączony - combined) mają precyzyjną strukturę:

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

Wzorzec z grupami nazwanymi wyodrębnia każde pole za jednym razem:

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

Wygląda to przerażająco, ale to tylko połączenie prostych wzorców:

  • (?<ip>\d+\.\d+\.\d+\.\d+) -- źródłowy adres IPv4.
  • \s+\S+\s+\S+ -- identyfikatory użytkownika (zazwyczaj -Block_content).
  • \[[^\]]+\] -- data w nawiasach kwadratowych.
  • "(?<metodo>\w+)\s+(?<path>\S+)\s+\S+" -- żądanie w cudzysłowie, zawierające metodę HTTP, ścieżkę oraz wersję.
  • (?<status>\d+)\s+(?<size>\d+) -- kod statusu i przesłane bajty.

Ogólna strategia

  1. Zacznij od rzeczywistej linii i oznacz ograniczniki: spacje, cudzysłowy, nawiasy kwadratowe.
  2. Pomiędzy ogranicznikami zidentyfikuj typ tokenu (IP, słowo, liczba).
  3. Otocz grupami nazwanymi tylko to, co naprawdę musisz wyodrębnić.

Spróbuj sam

Ćwiczenie#regex.m8.l2.e1
Próby: 0Ładowanie...

Wyodrębnij adres IPv4 na początku każdej linii logu jako grupę nazwaną `ip`.

Ładowanie edytora...
Pokaż wskazówkę

Przypnij wzorzec do początku linii za pomocą ^ oraz flagi m, i otocz adres IP grupą (?<ip>...).

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m8.l2.e2
Próby: 0Ładowanie...

Wyodrębnij metodę HTTP i ścieżkę żądania w cudzysłowie jako grupy `metodo` i `path`.

Ładowanie edytora...
Pokaż wskazówkę

Zacznij od cudzysłowu ", a następnie (?<metodo>\w+)\s+(?<path>\S+).

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m8.l2.e3
Próby: 0Ładowanie...

Wyodrębnij tylko część daty i czasu ujętą w nawiasy kwadratowe w logach, np. `10/Oct/2024:13:55:36 +0000`, jako grupę nazwaną `timestamp`.

Ładowanie edytora...
Pokaż wskazówkę

Użyj \[(?<timestamp>[^\]]+)\], aby silnik nie szukał dopasowań poza zamykającym nawiasem kwadratowym.

Rozwiązanie dostępne po 3 próbach