Lecciones del módulo (2/4)
Parser de logs de Apache
Los logs de Apache (formato combinado) tienen una estructura precisa:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234Un patrón con grupos nombrados extrae cada campo en una sola pasada:
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)Parece monstruoso, pero es la concatenación de patrones simples:
(?<ip>\d+\.\d+\.\d+\.\d+)-- el IPv4 de origen.\s+\S+\s+\S+-- los IDs de usuario (normalmente-).\[[^\]]+\]-- la fecha entre corchetes."(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- la solicitud entre comillas, con el método HTTP, la ruta y la versión.(?<status>\d+)\s+(?<size>\d+)-- el código de estado y los bytes enviados.
Estrategia general
- Empieza por la línea real y fija los delimitadores: espacios, comillas, corchetes.
- Entre delimitadores, identifica el tipo de token (IP, palabra, número).
- Encierra en grupos nombrados solo lo que necesites extraer.
Análisis de logs complejos
En el análisis de logs, los campos suelen estar separados por espacios, excepto cuando contienen cadenas entre comillas o corchetes (ej. el user-agent). El uso de clases de caracteres excluyentes en lugar del punto comodín evita que se fusionen varias columnas de forma incorrecta.
Pruébalo tú
Extrae el IPv4 al inicio de cada línea de log como un grupo nombrado `ip`.
Mostrar pista
Ancla al inicio de la línea con ^ y la flag m, y encierra la IP en (?<ip>...).
Solución disponible después de 3 intentos
Ejercicio de repaso
Extrae el método HTTP y la ruta de la solicitud entre comillas, como grupos `metodo` y `path`.
Mostrar pista
Empieza por ", luego (?<metodo>\w+)\s+(?<path>\S+).
Solución disponible después de 3 intentos
Desafío adicional
Extrae solo la parte de fecha y hora encerrada entre corchetes en los logs, ej. `10/Oct/2024:13:55:36 +0000`, como un grupo nombrado `timestamp`.
Mostrar pista
Usa \[(?<timestamp>[^\]]+)\] para evitar que el motor coincida más allá del corchete de cierre.
Solución disponible después de 3 intentos