Introducción a la monitorización de logs
Los logs son el sistema nervioso de cualquier servidor Linux. Sin ellos, diagnosticar fallos, detectar intrusiones o simplemente entender qué está pasando en el sistema se convierte en una tarea de adivinanza. En esta primera parte exploraremos tres herramientas fundamentales que cualquier administrador debe dominar: journalctl, rsyslog y logwatch.
Cada una cumple un rol distinto: journalctl es el cliente del sistema de logs moderno de systemd, rsyslog es el motor tradicional de gestión de logs con capacidades de enrutamiento remoto, y logwatch automatiza los reportes diarios. Al dominar estas tres herramientas, tendrás una base sólida para escalar a soluciones más avanzadas en la Parte II.
journalctl: el visor de logs de systemd
systemd-journald recolecta logs binarios en /var/log/journal/. Con journalctl accedemos a ellos de forma estructurada y filtrable. Veamos los comandos esenciales:
# Ver logs del servicio SSH journalctl -u ssh # Ver errores desde ayer journalctl -p err --since yesterday # Seguir logs en tiempo real (-f = follow) journalctl -f # Filtrar por PID específico journalctl _PID=1234 # Mostrar solo mensajes de prioridad warning (4) o superior journalctl -p 4..0 # Ver logs del kernel journalctl -k # Paginación, JSON y formatos journalctl -o json-pretty journalctl --no-pager -n 50
La combinación de banderas permite crear filtros muy precisos. Por ejemplo, para ver solo errores de autenticación SSH de hoy:
journalctl -u ssh -p err --since today
Si el sistema guarda logs persistentemente (en /var/log/journal/), tendrás acceso histórico incluso tras reinicios. De lo contrario, los logs se pierden al apagar el equipo.
rsyslog: el motor tradicional de logs
rsyslog es el heredero de syslog y sigue siendo el estándar en muchas distribuciones. Su configuración vive en /etc/rsyslog.conf y /etc/rsyslog.d/. Se organiza alrededor de dos conceptos clave: facility y severity.
# /etc/rsyslog.conf — Ejemplo de configuración # Log todos los mensajes de autenticación auth.* /var/log/auth.log # Mensajes del kernel kern.* /var/log/kern.log # Daemon (servicios del sistema) daemon.* /var/log/daemon.log # Enviar logs críticos a un servidor remoto *.crit @192.168.1.100:514
Los facilities más usados son: auth (autenticación), authpriv (privada), daemon (demonios), kern (kernel), mail (correo), user (usuarios), local0-local7 (personalizados). Las severidades van de emerg (0) a debug (7).
Envío remoto de logs con rsyslog
Una de las capacidades más potentes de rsyslog es reenviar logs a un servidor central. Esto es esencial en entornos multi-servidor. Se configura con templates:
# Template personalizado para envío remoto $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs # Enviar a servidor central por TCP *.* @@servidor-central.example.com:514 # Enviar a servidor central por UDP *.* @servidor-central.example.com:514
El puerto 514 es el estándar syslog. Usa TCP (con @@) si necesitas fiabilidad, y UDP (con @) si prefieres menor latencia.
logwatch: reportes automáticos por correo
Logwatch analiza los logs y genera resúmenes legibles. Se instala fácilmente y se puede configurar para que envíe reportes diarios por correo electrónico.
# Instalar logwatch apt update && apt install logwatch -y # Configuración principal en: # /usr/share/logwatch/default.conf/logwatch.conf # Ejemplo de configuración típica Output = mail MailTo = admin@midominio.com MailFrom = logwatch@midominio.com Range = yesterday Detail = Low Service = All Format = html
Logwatch se ejecuta típicamente como cron diario en /etc/cron.daily/00logwatch. Puedes forzar un reporte manual para probar:
# Ejecutar logwatch manualmente logwatch --detail High --range today --service sshd --output stdout # O enviar por correo directamente logwatch --detail High --range yesterday --mailto admin@midominio.com
Con logwatch, cada mañana recibirás un resumen de lo ocurrido en el servidor sin necesidad de revisar manualmente gigas de logs. En la Parte II veremos herramientas mucho más potentes como ELK Stack, Loki y Grafana.
