Análisis de logs: /var/log/ y journalctl
Introducción
Los logs son el registro de eventos del sistema y los servicios. Son imprescindibles para diagnosticar
fallos, auditar accesos y monitorizar el comportamiento del sistema. En Linux hay dos fuentes principales:
los archivos de texto en /var/log/ y el diario binario de systemd consultable con journalctl.
Archivos principales en /var/log/
/var/log/syslog # log general del sistema (Debian/Ubuntu)
/var/log/messages # log general (RHEL/Fedora/CentOS)
/var/log/auth.log # autenticaciones y sudo (Debian/Ubuntu)
/var/log/secure # autenticaciones (RHEL/Fedora)
/var/log/kern.log # mensajes del kernel
/var/log/dmesg # mensajes de arranque del kernel
/var/log/boot.log # log del proceso de arranque
/var/log/apt/ # operaciones de apt (Debian/Ubuntu)
/var/log/dnf.log # operaciones de dnf (Fedora/RHEL)
/var/log/nginx/ # logs de nginx (access.log, error.log)
/var/log/apache2/ # logs de Apache
Herramientas básicas para leer logs de texto:
$ tail -f /var/log/syslog # seguir el log en tiempo real
$ tail -n 50 /var/log/auth.log # últimas 50 líneas
$ grep "error" /var/log/syslog # filtrar líneas con "error"
$ grep "Failed" /var/log/auth.log # intentos de login fallidos
$ less /var/log/kern.log # navegar por el log
dmesg — Mensajes del kernel
Muestra el buffer de mensajes del kernel, especialmente útil para diagnosticar problemas de hardware y arranque.
$ dmesg # todos los mensajes del kernel
$ dmesg | tail -20 # últimos 20 mensajes
$ dmesg -T # con marcas de tiempo legibles
$ dmesg -l err,warn # solo errores y avisos
$ dmesg | grep -i usb # buscar mensajes de USB
journalctl — Diario de systemd
journalctl consulta el diario binario de systemd, que recoge los logs de todos los servicios gestionados
por systemd, el kernel y los mensajes del arranque. Ofrece opciones de filtrado muy potentes.
Uso básico:
$ journalctl # todos los logs (del más antiguo al más reciente)
$ journalctl -r # en orden inverso (más reciente primero)
$ journalctl -f # seguir en tiempo real (como tail -f)
$ journalctl -n 50 # últimas 50 líneas
Filtrar por servicio:
$ journalctl -u nginx # logs del servicio nginx
$ journalctl -u sshd -f # seguir logs de SSH en tiempo real
$ journalctl -u nginx --since today # logs de nginx de hoy
Filtrar por tiempo:
$ journalctl --since "2025-01-01"
$ journalctl --since "2025-01-01 10:00" --until "2025-01-01 11:00"
$ journalctl --since "1 hour ago"
$ journalctl --since yesterday
Filtrar por prioridad:
$ journalctl -p err # solo errores (0=emerg, 1=alert, 2=crit, 3=err, 4=warn, 5=notice, 6=info, 7=debug)
$ journalctl -p warning # avisos y superiores
Mensajes del kernel y del arranque:
$ journalctl -k # solo mensajes del kernel
$ journalctl -b # logs del arranque actual
$ journalctl -b -1 # logs del arranque anterior
$ journalctl --list-boots # listar todos los arranques registrados
Gestión del espacio del diario:
$ journalctl --disk-usage # espacio ocupado por el diario
# journalctl --vacuum-size=500M # reducir el diario a 500 MB
# journalctl --vacuum-time=30d # eliminar entradas de más de 30 días