Parser Logs

Analizar y filtrar archivos de logs

Entrada de logs
1
2
Procesado localmente en su navegador
Entendiendo Formatos de logs
TL;DR

El analisis de logs extrae datos estructurados de archivos de log. Formatos comunes: logs de acceso Apache/Nginx, syslog, logs estructurados en JSON.

Que es el analisis de logs?

El analisis de logs es el proceso de extraer datos estructurados de archivos de log — transformar lineas de texto sin formato en campos con nombre (marca de tiempo, direccion IP, codigo de estado, mensaje) que pueden ser buscados, filtrados y analizados.

Las aplicaciones generan logs para registrar eventos: solicitudes HTTP, errores, intentos de autenticacion, consultas a bases de datos, cambios de estado del sistema. Estos logs son esenciales para depuracion, monitoreo, auditorias de seguridad y analisis de rendimiento. Pero los archivos de log sin procesar son solo lineas de texto — para hacerlos utiles, necesitas analizarlos en datos estructurados.

El desafio es que los formatos de log varian ampliamente. Apache, Nginx, syslog y los formatos especificos de cada aplicacion usan diferentes disposiciones, delimitadores y formatos de fecha. Un analizador de logs debe comprender el formato esperado y extraer cada campo segun su posicion y patron.

Formatos de log comunes

Formato comun de log Apache/Nginx (CLF)

127.0.0.1 - frank [10/Oct/2024:13:55:36 -0700] "GET /page.html HTTP/1.1" 200 2326
CampoValorDescripcion
Host remoto127.0.0.1Direccion IP del cliente
Identidad-Identidad RFC 1413 (raramente utilizada)
UsuariofrankNombre de usuario autenticado (o -)
Marca de tiempo[10/Oct/2024:13:55:36 -0700]Hora de la solicitud con zona horaria
Solicitud"GET /page.html HTTP/1.1"Metodo, ruta y protocolo
Estado200Codigo de estado de la respuesta HTTP
Tamano2326Tamano del cuerpo de la respuesta en bytes

El formato combinado de log agrega dos campos mas: la URL de referencia y la cadena del agente de usuario.

Syslog (RFC 5424)

<34>1 2024-10-10T13:55:36.123Z server1 myapp 1234 - - Application started

Syslog es el protocolo de registro estandar para sistemas Unix/Linux. Incluye un valor de prioridad (facilidad + severidad), version, marca de tiempo ISO 8601, nombre de host, nombre de la aplicacion, ID de proceso, ID de mensaje, datos estructurados y el cuerpo del mensaje.

Logs estructurados en JSON

{"timestamp":"2024-10-10T13:55:36.123Z","level":"INFO","service":"api","message":"Request processed","duration_ms":42,"status":200}

Los logs en JSON son el estandar moderno. Cada campo tiene un nombre explicito, lo que hace que el analisis sea trivial — simplemente JSON.parse() de cada linea. No se necesita regex, no hay ambiguedad posicional, y se pueden agregar nuevos campos sin romper los analizadores existentes.

Regex vs logs estructurados

Los formatos de log tradicionales (Apache, syslog) requieren analisis basado en regex. Se escribe un patron que coincida con el formato esperado y capture cada campo en un grupo con nombre. Esto funciona bien para formatos conocidos pero falla cuando los logs contienen caracteres inesperados, mensajes multilinea o cambios de formato.

Los logs estructurados (JSON, logfmt) eliminan el regex por completo. Cada entrada de log es una estructura de datos autodescriptiva. Este enfoque es:

  • Mas facil de analizar — Los analizadores estandar de JSON/logfmt manejan todo
  • Mas robusto — Sin mantenimiento de regex cuando los formatos cambian
  • Mejor para busquedas — Los agregadores de logs pueden indexar campos individuales
  • Mas extensible — Se agregan campos sin romper los consumidores existentes

La contrapartida es la legibilidad. Una linea de log en JSON es mas dificil de escanear con el ojo humano que una linea de texto bien formateada. Muchos equipos usan logs en JSON en produccion (para consumo por maquinas) y formato legible por humanos en desarrollo.

Niveles de log

La mayoria de los frameworks de logging utilizan una jerarquia de niveles de severidad:

NivelSeveridadCaso de uso
TRACEMinimaDepuracion detallada (iteraciones de bucle, valores de variables)
DEBUGBajaInformacion de diagnostico para desarrolladores
INFONormalMensajes operativos rutinarios (inicio, parada, solicitudes)
WARNElevadaSituaciones inesperadas pero recuperables (API obsoleta utilizada, reintento necesario)
ERRORAltaFallos que afectan una sola operacion pero no todo el sistema
FATALCriticaFallos irrecuperables que requieren atencion inmediata o apagado del sistema

En produccion, los logs se configuran normalmente en nivel INFO o WARN para evitar el volumen y la sobrecarga de rendimiento de la salida DEBUG/TRACE. Los niveles inferiores se habilitan temporalmente durante la investigacion de incidentes.

Casos de uso comunes

  • Investigacion de incidentes: Cuando un servicio falla a las 3 AM, los logs son el primer lugar donde los ingenieros buscan para entender que sucedio, en que orden y por que
  • Auditorias de seguridad: Los logs de autenticacion, acceso y firewall revelan intentos de acceso no autorizado, ataques de fuerza bruta y exfiltracion de datos
  • Monitoreo de rendimiento: Analizar los campos de duracion de solicitudes en los logs de acceso identifica endpoints lentos y regresiones de rendimiento
  • Cumplimiento normativo: Regulaciones como PCI-DSS y GDPR requieren pistas de auditoria — los logs analizados proporcionan registros consultables de acceso a datos y cambios en el sistema
  • Alertas: Los agregadores de logs disparan alertas cuando las tasas de error aumentan, aparecen patrones especificos o servicios criticos se caen

Prueba estos ejemplos

Formato combinado de log de Apache Válido

Una entrada estandar de log combinado de Apache que contiene: IP remota, identidad, usuario, marca de tiempo, metodo/ruta/protocolo de la solicitud, codigo de estado, tamano de la respuesta, referente y agente de usuario. Cada campo sigue un patron predecible que puede analizarse con regex.

192.168.1.1 - frank [10/Oct/2024:13:55:36 -0700] "GET /index.html HTTP/1.1" 200 2326 "http://www.example.com/start.html" "Mozilla/5.0"
Entrada de log malformada Inválido

Una linea de log truncada a la que le falta el corchete de cierre en la marca de tiempo, la version del protocolo HTTP y todos los campos subsiguientes. Los analizadores de logs no podran extraer datos estructurados de entradas malformadas como esta.

192.168.1.1 - - [10/Oct/2024:13:55:36 "GET /index.html