Guia: implementar políticas de retenção e compactação de logs do systemd-journald em servidores Ubuntu (VPS) — passo a passo
Por Kevin Marcondes · Publicado em · 8 min de leitura
Guia: implementar políticas de retenção e compactação de logs do systemd-journald em servidores Ubuntu (VPS). Você vai entender limites por tamanho e tempo, compressão, controle de rajadas e como aplicar com segurança. No fim, aprenderá a verificar o efeito e monitorar o uso de disco, mantendo rastreabilidade local para suporte e auditoria sem desperdiçar espaço.
Quando ajustar as políticas do journald
Em VPS, espaço de disco é finito. Picos de log podem lotar a partição raiz e degradar serviços. O journald rotaciona por padrão, mas valores genéricos raramente refletem seu risco e orçamento.
Sinais de que é hora de ajustar: crescimento acelerado, alertas de pouco espaço e dificuldade em investigar incidentes mais antigos.
Se você centraliza logs, mantenha uma janela local pequena para diagnóstico rápido. Para retenção longa e busca full‑text, use um pipeline dedicado como no guia Fluentd + Elasticsearch: logs PHP em VPS (guia).
O objetivo é limitar tamanho e idade, manter folga no filesystem e ativar compressão com impacto previsível de CPU.
- Alertas de disco cheio após deploys verbosos
- Serviços rodando em nível debug por engano
- Auditorias exigindo janela mínima local
- Apps que só escrevem no journald, sem logrotate
Pré-requisitos e checagem inicial
Você precisa de acesso root, systemd ativo e Ubuntu suportado. Antes de mudar, descubra versão do systemd, uso atual de disco e se o armazenamento é persistente.
Guarde um snapshot do estado. Assim você compara o efeito após aplicar a política. Operações de vacuum removem histórico antigo. Faça consciente.
# 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
Como o journald armazena, rotaciona e comprime
O journald usa arquivos binários e faz rotação automática. As políticas combinam três eixos: limite de espaço total, tamanho e quantidade dos arquivos e idade máxima das entradas.
A compressão reduz espaço de entradas grandes, com custo moderado de CPU em gravação e leitura. Defina limites que caibam com folga no disco.
| Opção | O que controla | Quando usar |
|---|---|---|
| Storage | Onde guardar: persistent (/var/log/journal) ou volatile | Para manter logs entre reboots, use persistent |
| SystemMaxUse | Teto total de espaço em /var/log/journal | Prever uso e caber em discos pequenos |
| SystemKeepFree | Folga mínima no filesystem raiz | Evitar consumir a última reserva de espaço |
| SystemMaxFileSize | Tamanho máximo de cada arquivo | Arquivos menores e rotações mais frequentes |
| SystemMaxFiles | Quantidade máxima de arquivos | Limitar fragmentação e histórico por contagem |
| RuntimeMaxUse | Teto em /run/log/journal (volátil) | Controlar uso no boot e em storage volátil |
| RuntimeKeepFree | Folga mínima em /run | Evitar pressão em tmpfs durante picos |
| Compress | Compacta entradas grandes | Reduz espaço e I/O quando CPU comporta |
| Seal | Assina arquivos para integridade | Ambientes com requisitos de integridade |
| RateLimitIntervalSec / RateLimitBurst | Tolerância a rajadas repetitivas | Reduz ruído e I/O de mensagens repetidas |
| MaxRetentionSec | Idade máxima do histórico | Definir janela fixa por tempo, quando suportado |
Perfis práticos para VPS (exemplos iniciais)
Ajuste valores ao tamanho do disco e criticidade do ambiente. Use estes pontos de partida e teste sob sua carga. Todos assumem storage persistente e compressão ativada.
Se você centraliza logs, mantenha janela local menor e dependa do agregador para buscas. Para métricas e correlação, veja também Logs estruturados (JSON) e correlação: guia.
- 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
- Amigável à auditoria: SystemMaxUse=2G, SystemKeepFree=1G, SystemMaxFileSize=200M, SystemMaxFiles=80, RuntimeMaxUse=400M, MaxRetentionSec=60d
Configuração por drop-in em /etc/systemd/journald.conf.d
Use um drop-in para manter o arquivo padrão intacto e facilitar auditorias. O exemplo abaixo é um perfil balanceado. Ajuste tamanhos e prazos ao seu contexto.
Após salvar, reinicie o serviço para aplicar. Este guia cobre exatamente como implementar políticas de retenção e compactação de logs do systemd-journald em servidores Ubuntu (VPS) sem surpresa de espaço.
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 agora, rotacionar e recuperar espaço
A nova política rege rotações futuras. Para liberar espaço imediatamente, rode rotação e vacuum. Vacuum remove arquivos antigos. Confirme que o histórico necessário já foi coletado externamente, se for o caso.
Use valores conservadores primeiro. Valide e só então reduza ainda mais a janela ou o teto 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
Verificação e monitoramento contínuo
Valide se o journald leu o drop-in e se o consumo de espaço está no alvo. Monitore periodicamente a folga mínima e o uso dos journals.
Para métricas e alertas de capacidade, monte um dashboard. Veja uma abordagem prática em Guia prático: configurar Prometheus e Grafana com Docker Compose em VPS.
Como parte de hardening e operação segura, revise políticas junto com o Checklist de segurança para VPS Linux. Para comparar stacks de observabilidade por logs e traces, consulte o Comparativo: Prometheus+Grafana vs Loki+Tempo.
- Cheque a configuração efetiva mesclada
- Garanta storage persistente e permissões corretas
- Monitore folga mínima e uso total do 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
Solução de problemas comuns
Problemas frequentes envolvem armazenamento volátil inesperado, permissões incorretas, chaves desconhecidas em versões antigas e corrupção após panes.
Se sua aplicação gera logs demais, reduza a verbosidade no próprio serviço. As políticas do journald atenuam impacto global, mas a causa deve ser corrigida na origem.
Quando necessário, reaplique a política e rode vacuum com cuidado. Este guia de implementar políticas de retenção e compactação de logs do systemd-journald em servidores Ubuntu (VPS) ajuda a evitar surpresas.
- Journald usa storage volátil: crie /var/log/journal com permissões adequadas
- Chave desconhecida (ex.: MaxRetentionSec): remova a opção ou atualize o SO
- Arquivos corrompidos após queda de energia: verifique integridade e faça vacuum
- Limpeza agressiva demais: aumente SystemKeepFree ou 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
Perguntas frequentes
Compressão no journald consome muita CPU?
Em geral, o custo é moderado em gravação e leitura. Costuma compensar pela redução de I/O e espaço. Em VPS com CPU limitada, ative em janela de menor carga e monitore o impacto antes de adotar globalmente.
É melhor limitar por tamanho ou por tempo?
Ambos ajudam e podem coexistir. Em discos pequenos, um teto por tamanho traz previsibilidade. Se há exigência de janela mínima, combine com tempo. Em versões antigas sem MaxRetentionSec, use apenas limites de espaço e vacuum por tempo.
O journald substitui o rsyslog?
Para muitos servidores, o journald cobre coleta, rotação e consulta local. Se você precisa de protocolos legados ou integrações específicas, mantenha rsyslog ou um agente dedicado em paralelo ao journald.
Como conter um serviço que gera logs demais?
Ajuste o nível de log na aplicação ou unidade systemd correspondente. As políticas de RateLimit do journald reduzem rajadas repetitivas, mas a solução real é corrigir a verbosidade no serviço.
Posso excluir logs manualmente?
Prefira os comandos de vacuum do journalctl para manter consistência. Apagar arquivos diretamente pode causar inconsistências. Se precisar manipular arquivos, pare o journald antes e reinicie depois. Avalie o impacto em auditoria.
Precisa revisar sua política de logs da VPS?
Descreva seu cenário, limites de disco e janelas exigidas. Vamos discutir opções seguras de retenção e compressão do journald para equilibrar auditoria e capacidade.
Falar sobre meu cenárioVeja também
- Guia prático: como configurar failover ativo-passivo entre duas VPS com Keepalived, HAProxy e lsyncd para uploads sincronizados
- Guia: checklist técnico para preparar VPS Debian com Docker Compose para aplicações PHP em produção
- Guia prático para dimensionamento de VPS e tuning de PHP‑FPM para lojas Magento/OpenMage com picos sazonais: do sizing ao teste de carga
- guia prático: reconstruir índices no PostgreSQL em produção usando CREATE INDEX CONCURRENTLY e índices parciais (passo a passo seguro)