Modulelessen (2/4)
Apache-logparser
Apache-logboeken (gecombineerd formaat) hebben een precieze structuur:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234Een patroon met benoemde groepen extraheert elk veld in één keer:
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)Het ziet er monsterlijk uit, maar het is de aaneenschakeling van eenvoudige patronen:
(?<ip>\d+\.\d+\.\d+\.\d+)-- de bron-IPv4.\s+\S+\s+\S+-- de gebruikers-ID's (meestal-).\[[^\]]+\]-- de datum tussen vierkante haken."(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- het verzoek tussen aanhalingstekens, met HTTP-methode, pad en versie.(?<status>\d+)\s+(?<size>\d+)-- statuscode en bytes verzonden.
Algemene strategie
- Begin vanaf de echte regel en zet de scheidingstekens vast: spaties, aanhalingstekens, haakjes.
- Identificeer tussen scheidingstekens het type token (IP, woord, nummer).
- Verpak alleen datgene in benoemde groepen dat u wilt extraheren.
Complexe logboeken parseren
Bij het parseren van logboeken worden velden gewoonlijk door spaties gescheiden, behalve wanneer ze tekenreeksen tussen aanhalingstekens of haakjes bevatten (bijvoorbeeld de user-agent). Het gebruik van uitsluitingskarakterklassen in plaats van de jokerteken voorkomt dat meerdere kolommen verkeerd worden samengevoegd.
Probeer het
Extraheer de IPv4 aan het begin van elke logregel als een benoemde groep `ip`.
Toon hint
Veranker aan het begin van de regel met ^ en de m-vlag, en wikkel het IP-adres in (?<ip>...).
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Extraheer de HTTP-methode en het pad van het verzoek tussen aanhalingstekens, als groepen `metodo` en `path`.
Toon hint
Open met " en vervolgens (?<metodo>\\w+)\\s+(?<pad>\\S+).
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
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`.
Toon hint
Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.
Oplossing beschikbaar na 3 pogingen