Skip to content

Introducción

El análisis de registros es una tarea fundamental en la administración de sistemas Linux, permitiendo diagnosticar problemas, monitorear eventos y garantizar la seguridad del sistema. A través de herramientas como journalctl, rsyslog, y logrotate, los administradores pueden acceder, gestionar y almacenar registros para una auditoría eficiente.

El sistema de registro en Linux captura eventos desde el kernel, procesos de arranque, servicios y aplicaciones, proporcionando una visión completa del funcionamiento del sistema. La correcta administración de estos registros asegura una mejor respuesta ante incidentes, optimización del rendimiento y cumplimiento de normativas de seguridad.

Objetivos

Proveer al usuario un conocimiento integral sobre:

  • Comprender la arquitectura de registro en Linux y sus fuentes de datos.
  • Utilizar journalctl para analizar registros del diario del sistema.
  • Configurar rsyslog para el almacenamiento y categorización de eventos del sistema.
  • Implementar logrotate para la rotación automática y conservación eficiente de registros.
  • Establecer almacenamiento persistente en systemd-journald para evitar pérdida de registros tras reinicios.
  • Diagnosticar problemas mediante búsquedas avanzadas y filtrado de registros por prioridad y período de tiempo.

Arquitectura de Registro en Linux

El sistema operativo Linux mantiene un registro detallado de eventos que ocurren durante su ejecución. Estos registros son fundamentales para la auditoría del sistema, la solución de problemas y el monitoreo de seguridad.

Red Hat Enterprise Linux utiliza un sistema de registro basado en el protocolo syslog, que permite a los programas registrar eventos y organizarlos en archivos de registro. Los principales servicios encargados de gestionar estos registros son:

  • systemd-journald: Recopila mensajes de eventos desde múltiples fuentes y los almacena en un diario estructurado.
  • rsyslog: Procesa los mensajes de syslog, los organiza en archivos de registro y los reenvía a otros servicios según su configuración.

Fuentes de Registro en Linux

El servicio systemd-journald recopila eventos desde diversas fuentes, incluyendo:

  • Kernel del sistema: Mensajes generados por el núcleo del sistema operativo.
  • Proceso de arranque: Salida de las primeras etapas del inicio del sistema.
  • Daemons: Registros de procesos en segundo plano.
  • Eventos de syslog: Mensajes generados por aplicaciones y servicios del sistema.

Estos registros se estructuran en un formato estándar y se almacenan en un diario del sistema. De manera predeterminada, este diario no persiste tras un reinicio, a menos que se configure para hacerlo.

Archivos de Registro en /var/log/

El servicio rsyslog lee los mensajes de syslog desde el diario y los almacena en archivos de registro dentro del directorio /var/log/. Estos archivos contienen información clave sobre el estado del sistema y eventos específicos.

Algunos archivos de registro importantes incluyen:

Archivo de Registro Tipo de Mensajes Almacenados
/var/log/messages Registra la mayoría de los eventos del sistema, excepto autenticación y correos electrónicos.
/var/log/secure Contiene eventos de seguridad y autenticación.
/var/log/maillog Registra eventos relacionados con el servidor de correo.
/var/log/cron Almacena registros de trabajos programados.
/var/log/boot.log Contiene mensajes de arranque del sistema.

Además de estos archivos, algunas aplicaciones almacenan sus propios registros en subdirectorios dentro de /var/log/. Por ejemplo, el servidor web Apache guarda sus registros en /var/log/httpd/.

Interpretación y Gestión de Registros Syslog

Clasificación de Mensajes en Syslog

El protocolo syslog clasifica los mensajes de registro según dos criterios:

  • Instalación: Indica qué subsistema generó el mensaje.
  • Prioridad: Define la gravedad del evento registrado.

Las instalaciones estándar incluyen:

Código Instalación Descripción
0 kern Mensajes del kernel del sistema.
1 user Mensajes de nivel de usuario.
3 daemon Mensajes de daemons del sistema.
4 auth Eventos de autenticación y seguridad.
9 cron Registros del daemon de reloj.
10 authpriv Mensajes de autorización privada.
16-23 local0-7 Mensajes personalizados.

Las prioridades de syslog, ordenadas de mayor a menor gravedad, incluyen:

Código Prioridad Descripción
0 emerg El sistema no se puede usar.
1 alert Se requiere acción inmediata.
2 crit Condición crítica.
3 err Error no crítico.
4 warning Advertencia.
5 notice Evento normal, pero importante.
6 info Evento informativo.
7 debug Mensaje de depuración.

Reglas de Registro en rsyslog.conf

El servicio rsyslog usa reglas para determinar cómo procesar los mensajes de syslog. Estas reglas se configuran en /etc/rsyslog.conf y en archivos dentro de /etc/rsyslog.d/.

Ejemplo de regla en rsyslog.conf:

authpriv.* /var/log/secure

Esta línea indica que todos los mensajes de autenticación (authpriv) se almacenarán en /var/log/secure.

Para evitar que ciertos mensajes se registren en un archivo, se usa la palabra clave none:

*.info;mail.none;authpriv.none;cron.none /var/log/messages

Esto excluye mensajes de correo (mail), autenticación privada (authpriv) y cron (cron) del archivo /var/log/messages.

Rotación de Archivos de Registro con logrotate

El comando logrotate evita que los archivos de registro ocupen demasiado espacio en /var/log/.

  • Los archivos se renombran con una extensión de fecha (por ejemplo, messages-20220320).
  • Después de cuatro semanas, los registros más antiguos se eliminan.
  • La rotación ocurre diariamente mediante un trabajo programado.

Ejemplo de configuración en /etc/logrotate.conf:

/var/log/messages {
    weekly
    rotate 4
    compress
    missingok
    notifempty
}

Esto rota messages semanalmente, mantiene cuatro versiones y comprime los archivos antiguos.

Monitoreo de Registros en Tiempo Real

Para observar eventos en tiempo real, se usa:

tail -f /var/log/secure

Esto muestra los intentos de inicio de sesión en el sistema.

Ejemplo de salida:

Mar 20 09:01:13 host sshd[2712]: Accepted password for root from 172.25.254.254 port 56801 ssh2
Mar 20 09:01:13 host sshd[2712]: pam_unix(sshd:session): session opened for user root by (uid=0)

Generación Manual de Mensajes de Registro

El comando logger permite enviar mensajes personalizados a rsyslog:

logger -p local7.notice "Log entry created on host"

Esto almacena el mensaje en /var/log/boot.log.

Búsqueda y Análisis de Registros con journalctl

Uso de journalctl para Consultar el Diario del Sistema

El servicio systemd-journald almacena registros en un archivo binario estructurado e indexado, conocido como diario del sistema. Este diario contiene información detallada sobre eventos del sistema, incluyendo mensajes de syslog, eventos del kernel y registros de daemons.

Para visualizar todos los mensajes del diario, se usa:

journalctl

Ejemplo de salida:

Mar 15 04:42:16 host.lab.example.com systemd[1]: Started User Manager for UID 0.
Mar 15 04:42:16 host.lab.example.com sshd[2110]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Mar 15 04:42:17 host.lab.example.com systemd[1]: Started Hostname Service.

Los mensajes con prioridad notice o warning aparecen en negrita, mientras que los mensajes error o superiores se muestran en rojo.

Filtrado de Registros por Prioridad

Para mostrar solo los mensajes con prioridad err o superior, se usa:

journalctl -p err

Ejemplo de salida:

Mar 15 04:22:20 host.lab.example.com smartd[669]: DEVICESCAN failed: glob(3) aborted matching pattern /dev/discs/disc*
Mar 15 04:22:20 host.lab.example.com smartd[669]: In the system's table of devices NO devices found to scan

Esto ayuda a identificar errores críticos en el sistema.

Filtrado de Registros por Unidad systemd

Para ver los registros de una unidad específica, como sshd.service, se usa:

journalctl -u sshd.service

Ejemplo de salida:

May 15 04:30:18 host.lab.example.com systemd[1]: Starting OpenSSH server daemon...
May 15 04:30:18 host.lab.example.com sshd[1142]: Server listening on 0.0.0.0 port 22.
May 15 04:30:18 host.lab.example.com sshd[1142]: Server listening on :: port 22.

Esto permite analizar eventos relacionados con un servicio específico.

Búsqueda de Registros por Rango de Tiempo

Para consultar registros desde un período específico, se usa --since y --until:

journalctl --since "2025-05-15 20:30" --until "2025-05-16 10:00"

También se pueden usar valores relativos:

journalctl --since "yesterday"
journalctl --since "-1 hour"

Esto facilita la revisión de eventos recientes.

Salida en Tiempo Real con journalctl -f

Para monitorear registros en tiempo real, se usa:

journalctl -f

Ejemplo de salida:

Mar 15 05:01:01 host.lab.example.com anacron[2208]: Will run job `cron.daily' in 29 min.
Mar 15 05:01:01 host.lab.example.com anacron[2208]: Will run job `cron.weekly' in 49 min.

Esto es útil para observar eventos a medida que ocurren.

Búsqueda Avanzada con Campos del Diario

Se pueden filtrar registros por campos específicos, como _PID, _COMM o _SYSTEMD_UNIT:

journalctl _SYSTEMD_UNIT=sshd.service _PID=2110

Ejemplo de salida:

Mar 15 04:42:16 host.lab.example.com sshd[2110]: Accepted publickey for root from 172.25.254.254 port 46224 ssh2
Mar 15 04:42:16 host.lab.example.com sshd[2110]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Esto permite realizar búsquedas detalladas sobre procesos específicos.

Resguardo del Diario del Sistema

Almacenamiento del Diario del Sistema

Por defecto, Red Hat Enterprise Linux 9 almacena los registros del sistema en /run/log/, un directorio temporal que se borra tras cada reinicio. Para conservar los registros después de un reinicio, es necesario modificar la configuración de systemd-journald.

El parámetro Storage en /etc/systemd/journald.conf define cómo se almacenan los registros:

  • persistent: Guarda los registros en /var/log/journal/, asegurando que persistan tras un reinicio.
  • volatile: Almacena los registros en /run/log/journal/, eliminándolos al reiniciar.
  • auto: Usa almacenamiento persistente si /var/log/journal/ existe; de lo contrario, usa almacenamiento volátil.
  • none: No almacena registros, pero permite reenviarlos.

Para verificar los límites de almacenamiento del diario, se usa:

journalctl | grep -E 'Runtime Journal|System Journal'

Ejemplo de salida:

Runtime Journal (/run/log/journal/) is 8.0M, max 113.3M, 105.3M free.
System Journal (/var/log/journal/) is 8.0M, max 4.0G, 4.0G free.

Configuración de Almacenamiento Persistente

Para conservar los registros tras un reinicio:

  1. Crear el directorio de almacenamiento persistente

    mkdir /var/log/journal
    
  2. Modificar la configuración en /etc/systemd/journald.conf:

    [Journal]
    Storage=persistent
    
  3. Reiniciar el servicio systemd-journald

    systemctl restart systemd-journald
    
  4. Verificar que los registros persisten tras un reinicio

    journalctl --list-boots
    

    Esto muestra los eventos de arranque reconocidos por journalctl.

    Para consultar registros de un arranque específico:

    journalctl -b 1
    

    Esto recupera los registros del primer arranque del sistema.

Conclusión

La correcta gestión de registros en Linux es esencial para la administración de sistemas, seguridad y auditoría. A través de herramientas avanzadas como journalctl, rsyslog y logrotate, los administradores pueden interpretar eventos, detectar anomalías y asegurar un almacenamiento eficiente de los registros.

Implementar prácticas de gestión de registros mejora la capacidad de respuesta ante incidentes y facilita la resolución de problemas, asegurando que los sistemas operen de manera estable y segura. Dominar estas técnicas es clave para el mantenimiento y administración efectiva de entornos Linux.