Economize GBs no Linux: como configurar o journald

Aprenda como configurar o journald no Linux para controlar a retenção de logs, limitar o uso de disco no systemd e recuperar espaço de forma segura.

Economize GBs no Linux: como configurar o journald
Fonte (Acervo pessoal/maiastudios.com.br)

Quem administra servidores ou estações de trabalho no Linux já passou pela incômoda surpresa de receber um alerta de partição raiz cheia sem ter instalado nenhum pacote novo. Em distribuições modernas como o Debian 13.7 e o Ubuntu 26.04.1, um dos principais vilões silenciosos por trás desse consumo exagerado de armazenamento é o coletor de logs nativo do systemd. Saber como configurar o journald é uma habilidade fundamental para qualquer desenvolvedor ou administrador de sistemas que deseja manter o sistema estável, previsível e livre do esgotamento repentino de espaço em disco.

O systemd-journald é um serviço do sistema responsável por capturar mensagens de stdout, stderr, syslog e do kernel de todos os processos gerenciados pelo systemd. Ele centraliza as informações de diagnóstico em arquivos binários indexados, o que torna as buscas extremamente rápidas quando utilizadas com o utilitário journalctl. Porém, a configuração padrão out-of-the-box de muitas distribuições permite que o journald ocupe até 10% do tamanho total do sistema de arquivos ou até 4 GB de armazenamento persistentemente. Em um servidor web ou em um ambiente de desenvolvimento rodando contêineres e microsserviços de alto tráfego, esse limite padrão pode ser atingido em poucas semanas, consumindo dezenas de gigabytes que poderiam ser aproveitados por bancos de dados e aplicações.

Por que o /var/log/journal cresce sem parar?

O crescimento desenfreado da pasta /var/log/journal ocorre devido à forma como o systemd-journald lida com o ciclo de vida dos arquivos de log. Por padrão, o serviço cria arquivos de log estruturados e binários organizados sob um diretório nomeado com o identificador único da máquina (Machine ID). Diferente dos arquivos de texto puro tradicionais gerenciados pelo antigo utilitário logrotate, os logs do journald mantêm índices internos que garantem a busca rápida por metadados, como UID, PID e unidade do systemd.

Fotografia em foco fechado de um SSD NVMe instalado em uma placa-mãe sobre bancada de manutenção com iluminação suave.
Fonte (Acervo pessoal/maiastudios.com.br)

Quando um serviço gera logs continuamente, o arquivo de log ativo atinge um tamanho pré-determinado, é fechado e rotacionado para o status de arquivo arquivado (archived). Se nenhuma regra explícita de cota for definida, o journald continuará criando novos arquivos até atingir o limite global calculado com base na capacidade da partição. Em servidores de produção com discos NVMe de 500 GB ou 1 TB, uma cota de 10% pode resultar em 50 GB a 100 GB de dados históricos guardados sem necessidade real.

Além disso, serviços com falhas em loop (crash loops), aplicações em Python registrando stack traces extensas a cada segundo, ou depuradores ativados em ambiente de homologação aceleram exponencialmente esse acúmulo. Entender a diferença entre logs voláteis (armazenados em memória RAM sob /run/log/journal) e logs persistentes (armazenados em disco sob /var/log/journal) é o primeiro passo para assumir o controle da retenção.

Como diagnosticar o espaço consumido pelos logs do journalctl?

Antes de alterar qualquer arquivo de configuração, precisamos mensurar o tamanho exato que os logs do journald estão ocupando no disco rígido ou SSD do sistema. O próprio ecossistema do systemd oferece ferramentas nativas para essa auditoria.

O comando primário para checar a pegada de armazenamento do journal é o journalctl --disk-usage. Ao executá-lo no terminal, o utilitário varre o diretório de armazenamento e retorna o total exato consumido por arquivos ativos e arquivados:

journalctl --disk-usage

A saída desse comando apresentará uma mensagem semelhante a:

Archived and active journals take up 4.2G in the file system.

Para obter uma visão detalhada dos arquivos individuais e verificar se há contaminação ou arquivos corrompidos, você pode listar diretamente o diretório de destino usando os utilitários padrão do shell Linux:

sudo du -sh /var/log/journal/*
sudo ls -lh /var/log/journal/$(cat /etc/machine-id)

Outra verificação útil consiste em inspecionar o cabeçalho das instâncias de log para compreender a janela temporal que esses arquivos cobrem. Ao executar journalctl --header, o sistema exibe os limites do primeiro e do último registro armazenados no arquivo ativo, permitindo identificar se você está mantendo logs desnecessários de seis meses atrás.

Passo a passo: como configurar o journald para controlar o uso do disco

A forma recomendada de alterar as regras do systemd-journald não envolve modificar diretamente o arquivo principal /etc/systemd/journald.conf, pois atualizações do sistema operacional podem sobrescrevê-lo. Em vez disso, a boa prática moderna no Linux consiste em utilizar diretórios de sobreposição (drop-in configuration files) dentro de /etc/systemd/journald.conf.d/.

Siga as etapas abaixo para aplicar limites rígidos e seguros ao consumo de armazenamento:

1. Criar o diretório de configurações customizadas

Abra o terminal com privilégios de administrador ou utilize sudo para criar o diretório de drop-in se ele ainda não existir:

sudo mkdir -p /etc/systemd/journald.conf.d

2. Criar o arquivo de limitação de armazenamento

Crie um arquivo chamado 00-storage-limit.conf usando o seu editor de texto preferido (como nano ou vim):

sudo nano /etc/systemd/journald.conf.d/00-storage-limit.conf

3. Inserir os parâmetros de controle de quota

Adicione o bloco de configuração abaixo no arquivo. Estas diretivas instruem o systemd a manter o diário em disco, mas restringem rigorosamente o tamanho máximo global, a quantidade de espaço livre obrigatória e o tamanho de cada arquivo individual:

[Journal]
Storage=persistent
SystemMaxUse=1G
SystemKeepFree=2G
SystemMaxFileSize=100M
SystemMaxFiles=10

Entenda o papel de cada parâmetro definido:

  • Storage=persistent: Garante que os logs serão salvos no disco em /var/log/journal e sobreviverão a reinicializações do sistema.
  • SystemMaxUse=1G: Define o teto máximo absoluto que todos os arquivos de log combinados podem ocupar no sistema de arquivos. Neste exemplo, limitamos a no máximo 1 Gigabyte.
  • SystemKeepFree=2G: Garante que o journald nunca usará espaço se o disco estiver com menos de 2 Gigabytes livres na partição.
  • SystemMaxFileSize=100M: Restringe o tamanho individual de cada arquivo de log binário a 100 Megabytes. Quando esse tamanho é atingido, o arquivo é rotacionado.
  • SystemMaxFiles=10: Limita a quantidade total de arquivos de log mantidos (entre ativos e arquivados) a no máximo 10 arquivos.

4. Validar e aplicar as alterações

Após salvar e fechar o arquivo, valide se a sintaxe da configuração está correta e reinicie o serviço do systemd-journald para aplicar as novas regras imediatamente:

sudo systemd-analyze cat journald.conf
sudo systemctl restart systemd-journald

Verifique novamente o consumo de disco com o comando journalctl --disk-usage. O systemd aplicará a limpeza automática imediatamente para enquadrar os logs nos novos limites estabelecidos.

Como aplicar limites temporais e de arquivos no journald.conf?

Além de definir cotas baseadas em bytes e megabytes, é crucial estabelecer limites baseados no tempo de retenção das mensagens. Em muitos ambientes sujeitos a regulamentações de conformidade ou em servidores de desenvolvimento, manter logs por mais de 14 ou 30 dias é completamente desnecessário e desperdiça recursos.

A tabela a seguir resume as principais diretivas de tempo e controle de rajada disponíveis no journald.conf para aperfeiçoar sua estratégia de retenção:

Diretiva Descrição do Comportamento Valor Recomendado Cenário de Uso
MaxRetentionSec Tempo máximo absoluto para manter qualquer registro de log. 14d ou 1month Servidores web e APIs gerais
MaxFileSec Tempo máximo de duração de um único arquivo ativo antes da rotação. 1day Ambientes com tráfego moderado
RateLimitIntervalSec Janela de tempo para monitorar rajadas extremas de logs. 30s Proteção contra crash loops
RateLimitBurst Número máximo de mensagens permitidas dentro da janela de tempo. 10000 Prevenção de negação de serviço em logs

Para incluir o limite temporal de retenção de 14 dias e configurar a taxa limite contra serviços ruidosos, atualize o seu arquivo /etc/systemd/journald.conf.d/00-storage-limit.conf adicionando as opções de tempo:

[Journal]
Storage=persistent
SystemMaxUse=1G
SystemKeepFree=2G
SystemMaxFileSize=100M
MaxRetentionSec=14d
RateLimitIntervalSec=30s
RateLimitBurst=10000

O parâmetro RateLimitBurst impede que uma aplicação Python em loop infinito de erro trave o subsistema de E/S (I/O) do disco rígido ao tentar gravar centenas de milhares de linhas por segundo.

Como limpar o journald manualmente sem reiniciar o sistema?

Se o seu servidor já está com a partição em 100% de uso e você precisa liberar espaço de emergência antes mesmo de configurar os arquivos de controle permanente, o journalctl disponibiliza flags de limpeza rápida conhecidas como parâmetros de vacuuming.

Você pode executar a limpeza emergencial utilizando critérios de tamanho, tempo ou número de arquivos sem interromper a execução do sistema operacional nem afetar o funcionamento das suas aplicações em execução.

Para reduzir imediatamente o tamanho total acumulado no diário para um valor fixo, utilize a opção --vacuum-size:

sudo journalctl --vacuum-size=500M

Para deletar qualquer log que tenha sido registrado há mais de uma semana, utilize o argumento --vacuum-time:

sudo journalctl --vacuum-time=7d

Caso prefira limitar pela quantidade bruta de arquivos arquivados restantes, utilize --vacuum-files:

sudo journalctl --vacuum-files=5

Antes de rodar qualquer comando de remoção por vacuuming, uma técnica avançada importante é forçar o systemd-journald a fechar o arquivo binário atualmente ativo e abrir um novo. Isso garante que todo o histórico recente seja marcado como rotacionado e possa ser limpo sem travar manipuladores de arquivos abertos (file descriptors):

sudo journalctl --rotate
sudo journalctl --vacuum-size=500M
Ilustração vetorial esquemática mostrando o fluxo de processamento, rotação e limpeza automatizada de arquivos de log do sistema.
Fonte (Acervo pessoal/maiastudios.com.br)

Aviso de segurança: Nunca execute rm -rf /var/log/journal/* manualmente enquanto o daemon do systemd estiver em execução. Apagar os arquivos de log diretamente com o comando rm sem informar o daemon pode causar corrupção nos catálogos de metadados, deixar descritores de arquivos abertos apontando para blocos orfãos e impedir a gravação de novos registros até a próxima reinicialização da máquina.

Conclusão

Gerenciar o armazenamento de um sistema Linux de forma proativa é a diferença entre uma infraestrutura estável e uma parada não planejada em produção. Compreender como configurar o journald permite ajustar com precisão cirúrgica a retenção de logs, garantindo que o systemd-journald retenha apenas as informações estritamente necessárias para diagnósticos sem devorar o espaço em disco.

Ao aplicar limites com SystemMaxUse, restringir a retenção temporal com MaxRetentionSec e utilizar arquivos de configuração em /etc/systemd/journald.conf.d/, você transforma a manutenção de servidores Debian 13.7 e Ubuntu 26.04.1 em um processo automatizado e previsível. Adote essas diretivas nas suas imagens base de servidor e evite para sempre o pânico de partições cheias por acúmulo de logs.

Gostou? Compartilhe

Mais em GNU/Linux