Configuración de los Límites del Diario de Systemd: Optimización del Uso del Disco y Rotación de Registros

Configure el tamaño del diario de systemd y los límites de retención con `journald.conf`, `journalctl` y comandos seguros de limpieza de registros.

Configuración de los Límites del Diario de Systemd: Optimización del Uso del Disco y Rotación de Registros

Los registros del sistema son útiles hasta que llenan silenciosamente el disco. En sistemas Linux que usan systemd, systemd-journald almacena registros indexados y puede imponer límites de tamaño y antigüedad para que su diario mantenga suficiente historial sin desplazar al resto del sistema.

Esta guía muestra dónde configurar los límites del diario de systemd, cómo difieren el almacenamiento persistente y volátil, y cómo verificar la limpieza con journalctl.

Comprensión de los Modos de Almacenamiento del Diario

Antes de establecer límites, es esencial entender dónde almacena el diario sus registros. systemd-journald admite dos modos principales de almacenamiento, definidos por la directiva Storage= en journald.conf.

1. Almacenamiento Volátil (/run/log/journal)

El almacenamiento volátil mantiene los registros en un sistema de archivos temporal, típicamente tmpfs o un directorio respaldado por memoria. Los registros almacenados aquí se pierden al reiniciar el sistema.

  • Caso de Uso: Registros altamente temporales, entornos con recursos limitados donde no se necesita historial persistente.
  • Configuración: Establezca Storage=volatile.

2. Almacenamiento Persistente (/var/log/journal)

El almacenamiento persistente asegura que los registros sobrevivan a los reinicios del sistema, lo que lo convierte en la opción estándar para servidores y sistemas de producción. El directorio /var/log/journal se crea si no existe.

  • Caso de Uso: Sistemas de producción que requieren pistas de auditoría y análisis histórico.
  • Configuración: Establezca Storage=persistent o Storage=auto (predeterminado, que activa el almacenamiento persistente si existe /var/log/journal).

Consejo: Si el sistema está configurado para Storage=auto y /var/log/journal no existe, los registros se almacenarán de forma volátil hasta que se cree el directorio persistente.

El Archivo de Configuración Principal

Todos los límites y comportamientos principales de systemd-journald se controlan a través del archivo de configuración principal, generalmente ubicado en /etc/systemd/journald.conf.

# Editar el archivo de configuración principal
sudo nano /etc/systemd/journald.conf

Para asegurar que las futuras actualizaciones del paquete no sobrescriban sus personalizaciones, es una buena práctica crear un archivo de anulación en el directorio /etc/systemd/journald.conf.d/. Por ejemplo, cree /etc/systemd/journald.conf.d/01-custom-limits.conf.

Implementación de Límites de Tamaño para la Optimización del Disco

El método más común para controlar el crecimiento del diario es establecer límites máximos de uso del disco. Cuando se excede el tamaño especificado, journald comienza automáticamente a eliminar los archivos de diario archivados más antiguos hasta que se cumpla el límite.

SystemMaxUse (El Límite Persistente Absoluto)

Esta directiva define el espacio máximo total en disco que pueden ocupar los archivos de diario persistentes (/var/log/journal). Este es el mecanismo principal para controlar el uso del disco persistente.

Los archivos de diario se rotarán y limpiarán si el tamaño total excede este valor. Las unidades comunes incluyen K (kilobytes), M (megabytes), G (gigabytes) y T (terabytes).

Directiva Descripción Valor de Ejemplo
SystemMaxUse Tamaño máximo para datos de diario persistente. 500M o 2G

Configuración de Ejemplo:

Para limitar el almacenamiento del diario persistente a un máximo de 1 Gigabyte:

[Journal]
SystemMaxUse=1G

SystemKeepFree (Amortiguador de Seguridad del Disco)

Mientras que SystemMaxUse establece un límite, SystemKeepFree actúa como una medida de seguridad crucial. Especifica la cantidad mínima de espacio en disco que debe permanecer libre en el sistema de archivos que contiene los archivos del diario.

Si el espacio libre disponible cae por debajo del valor de SystemKeepFree, journald limpiará los registros, incluso si aún no se ha alcanzado el límite de SystemMaxUse. Esto evita que el crecimiento de registros llene completamente el disco y detenga operaciones críticas del sistema.

Directiva Descripción Valor de Ejemplo
SystemKeepFree Espacio libre mínimo requerido en el sistema de archivos del diario. 10% o 4G

Mejor Práctica: Se recomienda encarecidamente establecer tanto SystemMaxUse como SystemKeepFree. Use un porcentaje (%) para SystemKeepFree en discos grandes para una mejor escalabilidad.

RuntimeMaxUse (Límite de Almacenamiento Volátil)

Si está utilizando almacenamiento volátil (/run/log/journal), o si está interesado en controlar el uso de memoria/tmpfs incluso con almacenamiento persistente habilitado, use RuntimeMaxUse. Esto controla el espacio en disco utilizado por los archivos de diario volátiles, que son temporales y residen en memoria o tmpfs.

Directiva Descripción Valor de Ejemplo
RuntimeMaxUse Tamaño máximo para datos de diario volátil. 300M

Implementación de Límites de Tiempo para la Retención de Registros

Los límites basados en tamaño aseguran que se mantenga el espacio en disco, pero no garantizan la antigüedad de los registros. Si el volumen de registros es bajo, los registros podrían persistir indefinidamente. Los límites basados en tiempo aseguran que los registros se roten después de una duración específica, independientemente del tamaño total.

MaxRetentionSec

Esta directiva especifica el tiempo máximo que deben conservarse los registros. Cualquier registro más antiguo que esta duración se purgará automáticamente, complementando los límites de tamaño.

Directiva Descripción Valor de Ejemplo
MaxRetentionSec Antigüedad máxima de los registros a conservar. 30 days, 1 month, 2 weeks

Configuración de Ejemplo:

Para asegurar que los registros nunca tengan más de 30 días de antigüedad y que el almacenamiento persistente total nunca exceda los 5 Gigabytes:

[Journal]
Storage=persistent
SystemMaxUse=5G
SystemKeepFree=10%
MaxRetentionSec=30 days

Nota: Si MaxRetentionSec se establece en 30 días y SystemMaxUse en 5G, journald cumplirá con el límite que se alcance primero. Si el límite de 5G se alcanza en 10 días, se purgan los registros con más de 10 días de antigüedad, anulando la política de retención de 30 días.

Pasos Prácticos: Aplicación y Verificación de la Configuración

1. Verificar el Uso Actual del Diario

Antes de realizar cambios, verifique el uso actual del disco del diario:

journalctl --disk-usage

Salida de Ejemplo:

Journals take up 3.4G of disk space.

2. Configurar Límites

Edite /etc/systemd/journald.conf (o su archivo de anulación) y descomente/establezca las directivas deseadas. Por ejemplo, para asegurar un uso máximo de 500MB y una retención de 30 días:

[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days

3. Reiniciar el Servicio del Diario

Para que los cambios surtan efecto, se debe reiniciar el servicio systemd-journald. Esto no afecta el registro activo, pero le indica al demonio que aplique inmediatamente las nuevas restricciones de tamaño e inicie el proceso de limpieza.

sudo systemctl restart systemd-journald

4. Forzar la Limpieza Manualmente

Si es necesario recuperar espacio en disco de inmediato según los nuevos límites, el reinicio del servicio suele ser suficiente. Alternativamente, puede limpiar explícitamente los archivos usando journalctl.

Para limpiar registros y recuperar espacio, dejando solo los últimos 500MB:

sudo journalctl --vacuum-size=500M

Para limpiar registros con más de 7 días de antigüedad:

sudo journalctl --vacuum-time=7d

Resumen de Directivas Clave

Directiva Alcance Propósito
Storage Global Define la ubicación de almacenamiento (persistente, volátil, automático).
SystemMaxUse Persistente (/var/log/journal) Tamaño máximo total absoluto para registros persistentes.
SystemKeepFree Persistente (/var/log/journal) Asegura que quede una cantidad mínima de espacio libre en disco.
RuntimeMaxUse Volátil (/run/log/journal) Tamaño máximo total absoluto para registros volátiles (en tiempo de ejecución).
MaxRetentionSec Ambos Define la antigüedad máxima para los registros retenidos.

Conclusión

Establezca límites del diario antes de que los registros se conviertan en una interrupción. Para la mayoría de los servidores, use un archivo de anulación en /etc/systemd/journald.conf.d/, establezca SystemMaxUse más SystemKeepFree, agregue MaxRetentionSec si tiene un objetivo de retención, reinicie systemd-journald y confirme el resultado con journalctl --disk-usage.