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=persistentoStorage=auto(predeterminado, que activa el almacenamiento persistente si existe/var/log/journal).
Consejo: Si el sistema está configurado para
Storage=autoy/var/log/journalno 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
MaxRetentionSecse establece en 30 días ySystemMaxUseen 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.