¿Cómo Usar journalctl vacuum para Limpiar y Controlar Logs en Linux?

El mantener logs es fundamental para el troubleshooting en Linux. Aunque si no se controlan, los registros de "systemd journal" pueden convertirse en un monstruo de varios gigabytes que consume silenciosamente tu disco.

La buena noticia es, que journalctl incluye la opción --vacuum diseñada para limpiar logs antiguos según tamaño, tiempo o cantidad de archivos.

Si administras servidores Linux, VPS o entornos de laboratorio, aprender a controlar el journal es esencial para evitar sorpresas desagradables como un “Disk Space Low” en producción.

Opciones Más Importantes de journalctl –vacuum

OpciónQué HaceEjemplo
--disk-usageMuestra el tamaño actual de los logsjournalctl --disk-usage
--vacuum-sizeReduce logs a un tamaño específicosudo journalctl --vacuum-size=500M
--vacuum-timeConserva logs durante un tiempo determinadosudo journalctl --vacuum-time=30d
--vacuum-filesMantiene un número específico de archivossudo journalctl --vacuum-files=10

¿Cómo verificar cuánto espacio ocupan los logs?

Antes de limpiar, revisa el uso actual:

journalctl --disk-usage

Si el resultado supera los 500 MB y no estás depurando un problema activo, probablemente sea momento de hacer limpieza.

📌 Los logs del journal se almacenan en..

/var/log/journal

¿Qué Significa “Vacuum” en journalctl?

El término vacuum simplemente significa:

eliminar logs archivados hasta cumplir un criterio determinado.

Importante:

--vacuum solo elimina archivos archivados, no el log activo actual.

Si quieres asegurarte de que los logs recientes también sean elegibles para limpieza:

sudo journalctl --rotate
sudo journalctl --vacuum-size=500M

1. ¿Cómo Limpiar por tamaño? (–vacuum-size)

Es el método más utilizado.

Ejemplo:

sudo journalctl --vacuum-size=500M

Esto indica:

Mantener solo 500 MB de logs. Eliminar lo más antiguo hasta cumplir ese límite.

Ideal para:

  • Servidores con SSD pequeños
  • VPS con almacenamiento limitado
  • Sistemas embebidos

2. ¿Cómo limpiar por tiempo? (–vacuum-time)

Si prefieres conservar solo un histórico reciente:

sudo journalctl --vacuum-time=2weeks

También puedes usar:

  • 30d (30 días)
  • 3months
  • 1year

Ejemplo común:

sudo journalctl --vacuum-time=30d

Perfecto para:

  • Cumplimiento de políticas internas
  • Sistemas donde errores antiguos ya no son relevantes

3. ¿Cómo limpiar por cantidad de archivos? (–vacuum-files)

El journal divide logs en múltiples archivos según el parámetro SystemMaxFileSize.

Puedes limitar cuántos archivos mantener:

sudo journalctl --vacuum-files=100

Es menos común, pero útil si quieres mantener el índice del filesystem más ligero.

¿Cómo combinar métodos?

Puedes aplicar múltiples criterios. Se aplicará el límite más estricto:

sudo journalctl --vacuum-size=500M --vacuum-time=30d

Esto eliminará logs que:

  • Superen 500 MB
  • O tengan más de 30 días

Automatizar la Limpieza de Logs

Limpiar manualmente está bien… hasta que lo olvidas. Existen dos métodos principales para automatizarlo.

Método 1: Usando Cron (Clásico)

Edita el crontab del usuario root:

sudo crontab -e

Añade:

0 2 * * 0 /usr/bin/journalctl --vacuum-time=30d

Significa:

  • A las 02:00 AM
  • Cada domingo
  • Eliminar logs con más de 30 días

Método 2 (Recomendado): Configuración Nativa en journald.conf

Este método es más eficiente porque actúa automáticamente al alcanzar el límite. Consulta la configuración actual:

systemd-analyze cat-config systemd/journald.conf

Edita el archivo de configuración:

sudo nano /etc/systemd/journald.conf

Busca la sección:

[Journal]

Y ajusta:

SystemMaxUse=500M

Reinicia el servicio:

sudo systemctl restart systemd-journald

Ahora el sistema eliminará automáticamente logs antiguos cuando supere 500 MB.

Ventaja:

  • No depende de fechas
  • Actúa en tiempo real
  • Es más elegante y robusto

⚠️ Advertencia Importante

Si estás investigando un problema crítico ❌ No limpies los logs, puesto que esto podría eliminar la evidencia necesaria para diagnosticar el fallo.

Buenas Prácticas para Gestionar Logs en Linux

✔️ Revisa periódicamente el uso de disco
✔️ Combina límites por tiempo y tamaño
✔️ Automatiza la limpieza
✔️ Ajusta SystemMaxUse en servidores productivos
✔️ Supervisa /var/log con herramientas como du o ncdu


Conclusión

El comando journalctl --vacuum es una herramienta esencial para:

  • Liberar espacio en disco
  • Gestionar políticas de retención
  • Mantener rendimiento óptimo del sistema

Controlar el crecimiento del journal evita que tu servidor Linux consuma espacio de forma inesperada.

Al combinar límites por tamaño, tiempo y número de archivos, y automatizar el proceso con systemd, puedes mantener tus logs bajo control sin intervención manual constante.