Guía: implementar políticas de retención y compresión de logs de systemd-journald en servidores Ubuntu (VPS) — paso a paso
Por Kevin Marcondes · Publicado el · 8 min de lectura
Guía para implementar políticas de retención y compresión de logs de systemd-journald en servidores Ubuntu (VPS). Entenderás límites por tamaño y tiempo, compresión, control de ráfagas y cómo aplicar con seguridad. Al final sabrás verificar el efecto y monitorizar el uso de disco, manteniendo trazabilidad local para soporte y auditoría sin desperdiciar espacio.
Cuándo ajustar las políticas del journald
En VPS el espacio en disco es limitado. Picos de logging pueden llenar la partición raíz y degradar servicios. El journald rota por defecto, pero los valores genéricos rara vez reflejan tu riesgo y presupuesto.
Señales de que es momento de ajustar: crecimiento acelerado de logs, alertas de poco espacio y dificultad para investigar incidentes antiguos.
Si centralizas logs, mantén una ventana local pequeña para diagnósticos rápidos. Para retención prolongada y búsqueda full‑text, usa un pipeline dedicado como en la guía Fluentd y Elasticsearch: logs PHP en VPS (guía) (/es/fluentd-elasticsearch-logs-php-vps).
- Alertas de disco lleno tras despliegues verborreicos
- Servicios corriendo en nivel debug por error
- Auditorías que exigen una ventana mínima local
- Aplicaciones que solo escriben en journald, sin logrotate
Prerequisitos y comprobación inicial
Necesitas acceso root, systemd activo y una versión de Ubuntu soportada. Antes de cambiar, averigua la versión de systemd, el uso actual de disco y si el almacenamiento es persistente.
Guarda un snapshot del estado. Así compararás el efecto después de aplicar la política. Operaciones de vacuum eliminan historial antiguo: hazlo con conocimiento de causa.
# Versão do systemd e recursos
systemd --version
# Uso atual de disco pelos journals
journalctl --disk-usage
# Espaço livre na partição raiz
df -h /
# Verifica se o armazenamento é persistente (/var/log/journal)
[ -d /var/log/journal ] && echo "persistente" || echo "volátil"
# Quem é mais verboso (amostra)
journalctl -n 200 --priority=info --no-pager | awk '{print $5}' | sort | uniq -c | sort -nr | head
Cómo el journald almacena, rota y comprime
El journald usa ficheros binarios y realiza rotación automática. Las políticas combinan tres ejes: límite de espacio total, tamaño y cantidad de ficheros, y edad máxima de las entradas.
La compresión reduce el espacio de entradas grandes, con coste moderado de CPU en escritura y lectura. Define límites que dejen holgura en el disco.
| Opción | Qué controla | Cuándo usar |
|---|---|---|
| Storage | Dónde guardar: persistent (/var/log/journal) o volatile | Para mantener logs entre reboots, usa persistent |
| SystemMaxUse | Techo total de espacio en /var/log/journal | Prever uso y encajar en discos pequeños |
| SystemKeepFree | Reserva mínima en el filesystem raíz | Evitar consumir la última reserva de espacio |
| SystemMaxFileSize | Tamaño máximo de cada fichero | Ficheros más pequeños y rotaciones más frecuentes |
| SystemMaxFiles | Cantidad máxima de ficheros | Limitar fragmentación e historial por conteo |
| RuntimeMaxUse | Techo en /run/log/journal (volátil) | Controlar uso en el arranque y en storage volátil |
| RuntimeKeepFree | Reserva mínima en /run | Evitar presión en tmpfs durante picos |
| Compress | Comprime entradas grandes | Reduce espacio y I/O cuando la CPU lo permite |
| Seal | Firma ficheros para integridad | Entornos con requisitos de integridad |
| RateLimitIntervalSec / RateLimitBurst | Tolerancia a ráfagas repetitivas | Reduce ruido e I/O de mensajes repetidos |
| MaxRetentionSec | Edad máxima del historial | Definir ventana fija por tiempo, cuando esté soportado |
Perfiles prácticos para VPS (ejemplos iniciales)
Ajusta valores al tamaño del disco y a la criticidad del entorno. Usa estos puntos de partida y prueba bajo tu carga. Todos asumen storage persistente y compresión activada.
Si centralizas logs, mantén una ventana local menor y depende del agregador para búsquedas. Para métricas y correlación, consulta también Logs estructurados (JSON) y correlación: guía (/es/logs-json-correlacion-produccion).
- Económico: SystemMaxUse=300M, SystemKeepFree=200M, SystemMaxFileSize=50M, SystemMaxFiles=20, RuntimeMaxUse=100M, MaxRetentionSec=7d
- Balanceado: SystemMaxUse=1G, SystemKeepFree=500M, SystemMaxFileSize=100M, SystemMaxFiles=50, RuntimeMaxUse=200M, MaxRetentionSec=30d
- Amigable a auditoría: SystemMaxUse=2G, SystemKeepFree=1G, SystemMaxFileSize=200M, SystemMaxFiles=80, RuntimeMaxUse=400M, MaxRetentionSec=60d
Configuración por drop-in en /etc/systemd/journald.conf.d
Usa un drop-in para mantener el archivo estándar intacto y facilitar auditorías. El ejemplo abajo es un perfil balanceado. Ajusta tamaños y plazos a tu contexto.
Tras guardar, reinicia el servicio para aplicar. Esta guía muestra cómo implementar políticas de retención y compresión de logs de systemd-journald en servidores Ubuntu (VPS) sin sorpresas de espacio.
sudo mkdir -p /etc/systemd/journald.conf.d
sudo tee /etc/systemd/journald.conf.d/10-retencao-compressao.conf > /dev/null <<'EOF'
[Journal]
# Armazenamento persistente
Storage=persistent
# Limites em /var/log/journal
SystemMaxUse=1G
SystemKeepFree=500M
SystemMaxFileSize=100M
SystemMaxFiles=50
# Limites em /run/log/journal (volátil)
RuntimeMaxUse=200M
RuntimeKeepFree=50M
# Compressão e integridade
Compress=yes
Seal=yes
# Rajadas de mensagens repetidas
RateLimitIntervalSec=30s
RateLimitBurst=1000
# Janela máxima por tempo (se suportado na sua versão)
MaxRetentionSec=30d
EOF
# Aplica a nova configuração
sudo systemctl restart systemd-journald.service
Aplicar ahora, rotar y recuperar espacio
La nueva política regirá las rotaciones futuras. Para liberar espacio inmediatamente, ejecuta rotación y vacuum. Vacuum elimina ficheros antiguos: confirma que el histórico necesario ya está centralizado si es el caso.
Usa valores conservadores al principio. Valida y solo entonces reduce más la ventana o el techo de uso.
# Uso atual
journalctl --disk-usage
# Força rotação imediata
yes | sudo journalctl --rotate
# Limpa por tamanho/tempo/quantidade (ajuste conforme sua política)
sudo journalctl --vacuum-size=1G
sudo journalctl --vacuum-time=30d
sudo journalctl --vacuum-files=50
# Confere novamente
journalctl --disk-usage
Verificación y monitorización continua
Valida que el journald haya leído el drop-in y que el consumo de espacio esté dentro del objetivo. Monitoriza periódicamente la reserva mínima y el uso de los journals.
Para métricas y alertas de capacidad, monta un dashboard. Ve una aproximación práctica en la Guía práctica: configurar Prometheus y Grafana con Docker Compose en VPS (/es/configurar-prometheus-grafana-docker-compose-vps).
Como parte del hardening y la operación segura, revisa las políticas junto al Checklist de seguridad para VPS Linux (/es/checklist-seguranca-vps-linux). Para comparar stacks de observabilidad por logs y traces, consulta la Comparativa: Prometheus+Grafana vs Loki+Tempo (/es/comparativa-prometheus-grafana-vs-loki-tempo-php).
- Comprueba la configuración efectiva combinado
- Asegura storage persistente y permisos correctos
- Monitoriza la reserva mínima y el uso total del journal
# Configuração efetiva (inclui drop-ins)
systemd-analyze cat-config systemd/journald.conf
# Diretório persistente e arquivos presentes
test -d /var/log/journal && ls -lh /var/log/journal/*/*.journal || echo "armazenamento volátil"
# Uso total e por arquivo
journalctl --disk-usage
sudo du -h /var/log/journal/* --max-depth=1 2>/dev/null | sort -h
Solución de problemas comunes
Los problemas frecuentes incluyen almacenamiento volátil inesperado, permisos incorrectos, claves desconocidas en versiones antiguas y corrupción tras caídas.
Si tu aplicación genera demasiados logs, reduce la verbosidad en el propio servicio. Las políticas del journald mitigan el impacto global, pero la causa debe corregirse en origen.
Cuando sea necesario, reaplica la política y ejecuta vacuum con cuidado. Esta guía para implementar políticas de retención y compresión de logs de systemd-journald en servidores Ubuntu (VPS) ayuda a evitar sorpresas.
- Journald usa storage volátil: crea /var/log/journal con permisos adecuados
- Clave desconocida (p. ej. MaxRetentionSec): elimina la opción o actualiza el SO
- Ficheros corruptos tras corte de energía: verifica integridad y haz vacuum
- Limpieza demasiado agresiva: aumenta SystemKeepFree o SystemMaxUse
# 1) Garantir armazenamento persistente
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo chown root:systemd-journal /var/log/journal
sudo chmod 2755 /var/log/journal
sudo systemctl restart systemd-journald
# 2) Conferir mensagens sobre chaves desconhecidas
journalctl -u systemd-journald -b | grep -i "unknown" || true
# 3) Verificar integridade e limpar excedentes
sudo journalctl --verify || true
yes | sudo journalctl --vacuum-size=1G --vacuum-time=30d
Preguntas frecuentes
¿La compresión en journald consume mucha CPU?
En general el coste es moderado en escritura y lectura. Suele compensar por la reducción de I/O y espacio. En VPS con CPU limitada, actívala en una ventana de menor carga y monitoriza el impacto antes de aplicarla globalmente.
¿Es mejor limitar por tamaño o por tiempo?
Ambos ayudan y pueden coexistir. En discos pequeños, un límite por tamaño aporta previsibilidad. Si necesitas una ventana mínima por obligación, combina con tiempo. En versiones antiguas sin MaxRetentionSec, usa solo límites por espacio y vacuum por tiempo.
¿El journald reemplaza a rsyslog?
Para muchos servidores, journald cubre recolección, rotación y consulta local. Si precisas protocolos legados o integraciones específicas, mantén rsyslog o un agente dedicado en paralelo al journald.
¿Cómo contener un servicio que genera demasiados logs?
Ajusta el nivel de log en la aplicación o en la unidad systemd correspondiente. Las políticas de RateLimit del journald reducen ráfagas repetitivas, pero la solución real es corregir la verbosidad en el servicio.
¿Puedo eliminar logs manualmente?
Mejor usa los comandos vacuum de journalctl para mantener consistencia. Borrar ficheros directamente puede causar inconsistencias. Si necesitas manipular ficheros, para el journald antes y vuelve a iniciarlo después. Valora el impacto en auditoría.
¿Necesitas revisar la política de logs de tu VPS?
Describe tu escenario, límites de disco y ventanas exigidas. Hablemos de opciones seguras de retención y compresión para equilibrar auditoría y capacidad.
Hablar sobre mi escenarioVer también
- Guía práctica: configurar failover activo‑pasivo entre dos VPS con Keepalived, HAProxy y lsyncd para uploads sincronizados
- Guía: checklist técnico para preparar un VPS Debian con Docker Compose para aplicaciones PHP en producción
- Guía práctica para dimensionamiento de VPS y tuning de PHP‑FPM para tiendas Magento/OpenMage con picos estacionales: del dimensionamiento a la prueba de carga
- Guía práctica para implementar retries exponenciales y circuit breaker en integraciones entre ERP y marketplaces