Filtrar logs gigantes con expresiones regulares

Clase 13 de 29Curso de Expresiones Regulares

Contenido del curso

Expresiones Regulares en lenguajes de programación

Resumen

Analizar grandes archivos de logs con expresiones regulares te da precisión y velocidad para detectar vulnerabilidades, ataques o fallos de sistemas. Desde backend hasta soporte, esta técnica permite hallar exactamente lo que importa en medio de miles de líneas, sin ruido y con control total.

¿Por qué analizar logs con expresiones regulares?

Los logs de sistemas (por ejemplo en Unix y también en Windows) son generados por demonios de fondo y registran niveles como error, warning o mensajes informativos. Suelen ser enormes y verbosos, pero ahí está el detalle útil: desde eventos de usuario hasta direcciones de sensores o cambios de responsable. Incluso una “línea 69” puede contener actividad específica de un usuario.

¿Qué problemas resuelven en archivos enormes?

  • Evitan coincidencias falsas como confundir "log" con login.
  • Permiten buscar por línea completa y por nivel exacto.
  • Filtran por usuario o patrón sin revisar todo manualmente.
  • Aceleran la inspección frente a un simple Control F.

¿Qué habilidades te aporta?

  • Identificar y usar anclas de línea: ^ y $ para inicio y fin.
  • Escapar caracteres reservados: corchetes como [ y ].
  • Aplicar comodines: .* para “lo que sea”.
  • Usar agrupaciones: paréntesis para capturar datos como el usuario tras "user@".
  • Combinar con línea de comando: grep y tail para velocidad.

¿Cómo construir una regex para filtrar logs?

La idea es describir el formato habitual: un encabezado entre corchetes, el tipo de mensaje y el contenido. Se escapan los corchetes, se ancla la línea y se usa .* para lo variable. Así se obtiene exactitud sin depender de un texto fijo.

¿Cómo delimitar inicio y fin de línea?

  • Ancla el principio y el cierre para evitar “colas” no deseadas.
^\[log\].*warn.*$
  • ejemplo: busca solo líneas con encabezado "[log]" y nivel warning.
  • cambia "warn" por "error" si necesitas filtrar errores.
^\[log\].*error.*$

¿Cómo filtrar niveles y usuarios?

  • Si el formato incluye un usuario con correo, puedes precisar coincidencias.
^\[log\].*@Selis\.MX\s.*$
  • ejemplo: encuentra líneas del log donde aparece "@Selis.MX" seguido de un espacio.

  • Para capturar quién es el usuario tras "user@" y reutilizarlo:

^\[log\].*user@(\w+).*$
  • el grupo (\w+) obtiene el identificador del usuario.

  • útil para reemplazar o listar ocurrencias por usuario.

  • Recuerda: [ y ] se escapan porque los corchetes son reservados para clases de caracteres.

¿Qué flujo práctico usar con grep y editores?

Para archivos gigantes, la línea de comando te da resultados en segundos. Luego, en un editor con búsqueda por regex, replicas el patrón y exploras con más comodidad.

¿Cómo combinar tail y grep?

  • ver las últimas tres líneas del archivo:
tail -n 3 sistema.log
  • buscar warnings en todo el archivo con regex extendida:
grep -E '^\[log\].*warn.*$' sistema.log
  • filtrar por usuario específico:
grep -E '^\[log\].*@Selis\.MX\s.*$' sistema.log
  • listar usuarios tras "user@":
grep -Eo 'user@(\w+)' sistema.log

¿Qué reto practicar?

  • abre un archivo de log real.
  • míralo con tail y toma las últimas 3 líneas.
  • en tu editor con regex (Atom, One, TextWrangler en Mac), busca todas las líneas que sigan el mismo formato que la última o la penúltima.
  • diferencia entre buscar texto plano y usar patrones con anclas, escapes, comodines y agrupaciones.
  • identifica tus propios errors, warnings y debug messages dentro de un global manager de errores.

¿Tienes un patrón que te haya funcionado especialmente bien o un formato de log difícil? Cuéntalo en comentarios y comparte tu enfoque.