Lekcje modułu (2/4)
Parser logów Apache
Logi Apache (format połączony - combined) mają precyzyjną strukturę:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234Wzorzec z grupami nazwanymi wyodrębnia każde pole za jednym razem:
^(?<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
- Zacznij od rzeczywistej linii i oznacz ograniczniki: spacje, cudzysłowy, nawiasy kwadratowe.
- Pomiędzy ogranicznikami zidentyfikuj typ tokenu (IP, słowo, liczba).
- Otocz grupami nazwanymi tylko to, co naprawdę musisz wyodrębnić.
Spróbuj sam
Wyodrębnij adres IPv4 na początku każdej linii logu jako grupę nazwaną `ip`.
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
Wyodrębnij metodę HTTP i ścieżkę żądania w cudzysłowie jako grupy `metodo` i `path`.
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
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`.
Pokaż wskazówkę
Użyj \[(?<timestamp>[^\]]+)\], aby silnik nie szukał dopasowań poza zamykającym nawiasem kwadratowym.
Rozwiązanie dostępne po 3 próbach