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:
-
Crear el directorio de almacenamiento persistente
mkdir /var/log/journal -
Modificar la configuración en
/etc/systemd/journald.conf:[Journal] Storage=persistent -
Reiniciar el servicio systemd-journald
systemctl restart systemd-journald -
Verificar que los registros persisten tras un reinicio
journalctl --list-bootsEsto muestra los eventos de arranque reconocidos por journalctl.
Para consultar registros de un arranque específico:
journalctl -b 1Esto 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.