Introducci贸n

Hola Fronters 馃憢

Bienvenidos a la quinta entrega de nuestra serie sobre monitorizaci贸n de recursos de hardware en Linux. Hasta ahora hemos cubierto CPU, memoria RAM, red, disco y rendimiento general. Pero hay una fuente de informaci贸n que ning煤n sysadmin puede ignorar: los logs del sistema.

Los logs son el diario de a bordo de tu servidor. Cada proceso, cada servicio, cada intento de conexi贸n, cada error y cada advertencia quedan registrados en alg煤n lado. Saber leerlos, filtrarlos y configurarlos es lo que separa a un administrador reactivo de uno proactivo.

En este art铆culo vamos a profundizar en journalctl, los archivos cl谩sicos de /var/log/, dmesg, logrotate, rsyslog, logwatch y c贸mo analizar logs de autenticaci贸n, sistema y kernel.

1. systemd-journald y journalctl

En las distribuciones modernas con systemd, el sistema de logs por defecto es journald. Toda la informaci贸n estructurada de servicios, kernel y aplicaciones se almacena en el journal binario.

Comandos b谩sicos de journalctl

# Ver todos los logs desde el arranque actual
journalctl -b

# Ver logs de un servicio espec铆fico
journalctl -u nginx.service

# Ver logs en tiempo real (como tail -f)
journalctl -f

# 脷ltimos 50 mensajes
journalctl -n 50

# Logs de las 煤ltimas 2 horas
journalctl --since "2 hours ago"

# Logs de un rango de fechas
journalctl --since "2025-05-01" --until "2025-05-15"

# Logs por prioridad (0=emerg, 1=alert, 2=crit, 3=err)
journalctl -p err -b

# Ver logs en formato JSON (ideal para parsing)
journalctl -o json-pretty

# Logs de un PID espec铆fico
journalctl _PID=1234

Configuraci贸n de journald

El archivo de configuraci贸n principal es /etc/systemd/journald.conf. Algunos par谩metros clave:

[Journal]
Storage=persistent        # Guarda logs en disco, no solo en RAM
Compress=yes              # Comprime logs antiguos
SystemMaxUse=500M         # M谩ximo espacio en disco para logs
SystemMaxFileSize=100M    # Tama帽o m谩ximo por archivo
MaxRetentionSec=2week     # Retenci贸n m谩xima de 2 semanas

Despu茅s de modificar: sudo systemctl restart systemd-journald

2. Los archivos cl谩sicos de /var/log/

Aunque systemd es el est谩ndar moderno, los archivos de texto plano en /var/log/ siguen siendo fundamentales, especialmente en servidores sin systemd o con configuraciones h铆bridas.

# Log de autenticaci贸n (inicios de sesi贸n, sudo, SSH)
/var/log/auth.log      # Debian/Ubuntu
/var/log/secure        # RHEL/CentOS

# Log del sistema (general)
/var/log/syslog        # Debian/Ubuntu
/var/log/messages      # RHEL/CentOS

# Log del kernel
/var/log/kern.log

# Logs de aplicaciones
/var/log/apache2/access.log
/var/log/nginx/access.log
/var/log/mysql/error.log

Analizar auth.log como un profesional

# Intentos de SSH fallidos
grep "Failed password" /var/log/auth.log

# Contar intentos fallidos por IP
grep "Failed password" /var/log/auth.log | grep -oP 'from \K[0-9.]+' | sort | uniq -c | sort -rn

# Inicios de sesi贸n exitosos
grep "Accepted password" /var/log/auth.log

# Uso de sudo
grep "sudo" /var/log/auth.log | grep "COMMAND"

# Intentos de su
grep "FAILED SU" /var/log/auth.log

3. dmesg: Los mensajes del kernel

dmesg muestra los mensajes del buffer del kernel, ideal para diagnosticar problemas de hardware, drivers, discos y dispositivos USB.

# Ver todos los mensajes del kernel
dmesg

# Seguir mensajes en tiempo real
dmesg -w

# Filtrar por nivel de severidad
dmesg --level=err,warn

# Buscar errores de disco
dmesg | grep -i "error\|fail\|disk"

# Buscar dispositivos USB
dmesg | grep -i usb

# Ver informaci贸n de memoria del kernel
dmesg | grep -i memory

# Limpiar el buffer (煤til antes de pruebas)
sudo dmesg -c

4. logrotate: Rotaci贸n inteligente de logs

Los logs crecen sin control si no los rotamos. logrotate se encarga de comprimir, rotar y eliminar logs antiguos autom谩ticamente.

Configuraci贸n global: /etc/logrotate.conf

# Rotaci贸n semanal
weekly

# Conservar 4 rotaciones
rotate 4

# Crear nuevo archivo vac铆o despu茅s de rotar
create

# Comprimir rotaciones viejas
compress

# No perder datos si el log est谩 ausente
missingok

Configuraciones por servicio en /etc/logrotate.d/:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

5. rsyslog: El motor de logs cl谩sico

rsyslog es el servicio tradicional de logging, reemplazado en parte por journald pero a煤n muy presente. Su configuraci贸n est谩 en /etc/rsyslog.conf y /etc/rsyslog.d/.

# Enviar logs de autenticaci贸n a un archivo separado
auth,authpriv.*                 /var/log/auth.log

# Enviar todos los logs del sistema a un archivo
*.*;auth,authpriv.none          -/var/log/syslog

# Enviar logs del kernel
kern.*                          -/var/log/kern.log

# Enviar logs cr铆ticos por email (requiere mail)
*.emerg                         :omusrmsg:*

Reenviar logs a un servidor central

# En el cliente (/etc/rsyslog.d/remote.conf)
*.* @192.168.1.100:514     # UDP
*.* @@192.168.1.100:514    # TCP

6. logwatch: Reportes autom谩ticos de logs

logwatch analiza los logs y genera reportes resumidos por correo o consola. Ideal para revisi贸n diaria.

# Reporte de todo el d铆a de hoy
logwatch --detail High --range today

# Reporte de ayer
logwatch --detail Med --range yesterday

# Reporte de los 煤ltimos 7 d铆as
logwatch --range 'between -7 days and today'

# Filtrar solo servicios SSH
logwatch --service sshd --range today

# Enviar por correo
logwatch --mailto admin@example.com --range today

7. Filtrado avanzado con combinaciones

La verdadera potencia est谩 en combinar herramientas:

# Buscar errores de disco en las 煤ltimas 24h
journalctl --since "24 hours ago" -p err | grep -i "disk\|i/o\|ata"

# Correlacionar fecha/hora entre auth.log y kern.log
grep "May 15 14:3[0-9]" /var/log/auth.log | tail -20
dmesg -T | grep "May 15 14:3[0-9]"

# Alertas de recursos desde journalctl
journalctl -p warning -b --no-pager | grep -i "memory\|cpu\|disk"

# Monitorear logs en tiempo real con alertas visuales
journalctl -f | grep --color=always -i "error\|fail\|critical\|oom"

Conclusi贸n

Los logs son la memoria del sistema. Saber leer journalctl, navegar /var/log/, interpretar dmesg, configurar logrotate y rsyslog, y usar logwatch para reportes autom谩ticos te da una ventaja enorme como administrador.

No esperes a que algo falle para revisar los logs. Implementa revisiones peri贸dicas, configura rotaciones y alertas, y convi茅rtete en un sysadmin proactivo.

En el pr贸ximo y 煤ltimo art铆culo de la serie, veremos c贸mo generar trazabilidad de eventos y detecci贸n de posibles problemas, correlacionando todo lo que hemos aprendido. 隆No te lo pierdas! 馃殌