Configurando Limites do Journal do Systemd: Otimizando o Uso de Disco e a Rotação de Logs
Configure o tamanho do journal do systemd e os limites de retenção com `journald.conf`, `journalctl` e comandos seguros de limpeza de logs.
Configurando Limites do Journal do Systemd: Otimizando o Uso de Disco e a Rotação de Logs
Os logs do sistema são úteis até que silenciosamente preencham o disco. Em sistemas Linux que usam systemd, o systemd-journald armazena logs indexados e pode impor limites de tamanho e idade para que seu journal mantenha histórico suficiente sem ocupar espaço desnecessário no resto do sistema.
Este guia mostra onde configurar os limites do journal do systemd, como o armazenamento persistente e volátil diferem e como verificar a limpeza com journalctl.
Entendendo os Modos de Armazenamento do Journal
Antes de definir limites, é essencial entender onde o journal armazena seus logs. O systemd-journald suporta dois modos principais de armazenamento, definidos pela diretiva Storage= no journald.conf.
1. Armazenamento Volátil (/run/log/journal)
O armazenamento volátil mantém os logs em um sistema de arquivos temporário, tipicamente tmpfs ou um diretório baseado em memória. Os logs armazenados aqui são perdidos na reinicialização do sistema.
- Caso de Uso: Logs altamente temporários, ambientes com recursos limitados onde o histórico persistente não é necessário.
- Configuração: Defina
Storage=volatile.
2. Armazenamento Persistente (/var/log/journal)
O armazenamento persistente garante que os logs sobrevivam às reinicializações do sistema, tornando-o a escolha padrão para servidores e sistemas de produção. O diretório /var/log/journal é criado se não existir.
- Caso de Uso: Sistemas de produção que exigem trilhas de auditoria e análise histórica.
- Configuração: Defina
Storage=persistentouStorage=auto(padrão, que ativa o armazenamento persistente se/var/log/journalexistir).
Dica: Se o sistema estiver configurado para
Storage=autoe/var/log/journalnão existir, os logs usarão o armazenamento volátil até que o diretório persistente seja criado.
O Arquivo de Configuração Principal
Todos os limites e comportamentos principais do systemd-journald são controlados através do arquivo de configuração principal, geralmente localizado em /etc/systemd/journald.conf.
# Edite o arquivo de configuração principal
sudo nano /etc/systemd/journald.conf
Para garantir que futuras atualizações de pacotes não sobrescrevam suas personalizações, é uma boa prática criar um arquivo de substituição no diretório /etc/systemd/journald.conf.d/. Por exemplo, crie /etc/systemd/journald.conf.d/01-custom-limits.conf.
Implementando Limites de Tamanho para Otimização de Disco
O método mais comum para controlar o crescimento do journal é definir limites máximos de uso de disco. Quando o tamanho especificado é excedido, o journald automaticamente começa a deletar os logs arquivados mais antigos até que o limite seja atingido.
SystemMaxUse (O Limite Persistente Absoluto)
Esta diretiva define o espaço total máximo em disco que os arquivos de journal persistentes (/var/log/journal) podem ocupar. Este é o mecanismo principal para controlar o uso persistente de disco.
Os arquivos de journal serão rotacionados e limpos se o tamanho total exceder este valor. Unidades comuns incluem K (kilobytes), M (megabytes), G (gigabytes) e T (terabytes).
| Diretiva | Descrição | Exemplo de Valor |
|---|---|---|
SystemMaxUse |
Tamanho máximo para dados de journal persistentes. | 500M ou 2G |
Exemplo de Configuração:
Para limitar o armazenamento persistente do journal a um máximo de 1 Gigabyte:
[Journal]
SystemMaxUse=1G
SystemKeepFree (Buffer de Segurança do Disco)
Enquanto SystemMaxUse define um limite, SystemKeepFree atua como uma medida de segurança crucial. Ele especifica a quantidade mínima de espaço em disco que deve permanecer livre no sistema de arquivos que contém os arquivos de journal.
Se o espaço livre disponível cair abaixo do valor de SystemKeepFree, o journald limpará os logs, mesmo que o limite SystemMaxUse ainda não tenha sido atingido. Isso impede que o crescimento dos logs preencha completamente o disco e pare operações críticas do sistema.
| Diretiva | Descrição | Exemplo de Valor |
|---|---|---|
SystemKeepFree |
Espaço livre mínimo necessário no sistema de arquivos do journal. | 10% ou 4G |
Melhor Prática: É altamente recomendável definir tanto SystemMaxUse quanto SystemKeepFree. Use uma porcentagem (%) para SystemKeepFree em discos grandes para melhor escalabilidade.
RuntimeMaxUse (Limite de Armazenamento Volátil)
Se você estiver usando armazenamento volátil (/run/log/journal), ou se estiver interessado em controlar o uso de memória/tmpfs mesmo com armazenamento persistente ativado, use RuntimeMaxUse. Isso controla o espaço em disco usado pelos arquivos de journal voláteis, que são temporários e residem na memória ou tmpfs.
| Diretiva | Descrição | Exemplo de Valor |
|---|---|---|
RuntimeMaxUse |
Tamanho máximo para dados de journal voláteis. | 300M |
Implementando Limites de Tempo para Retenção de Logs
Limites baseados em tamanho garantem que o espaço em disco seja mantido, mas não garantem a idade dos logs. Se o volume de logs for baixo, os logs podem persistir indefinidamente. Limites baseados em tempo garantem que os logs sejam rotacionados após uma duração específica, independentemente do tamanho total.
MaxRetentionSec
Esta diretiva especifica o tempo máximo que os logs devem ser retidos. Quaisquer logs mais antigos que esta duração serão automaticamente removidos, complementando os limites de tamanho.
| Diretiva | Descrição | Exemplo de Valor |
|---|---|---|
MaxRetentionSec |
Idade máxima dos logs a serem mantidos. | 30 days, 1 month, 2 weeks |
Exemplo de Configuração:
Para garantir que os logs nunca sejam mais antigos que 30 dias e que o armazenamento persistente total nunca exceda 5 Gigabytes:
[Journal]
Storage=persistent
SystemMaxUse=5G
SystemKeepFree=10%
MaxRetentionSec=30 days
Nota: Se
MaxRetentionSecfor definido como 30 dias eSystemMaxUsecomo 5G, o journald respeitará o limite que for atingido primeiro. Se o limite de 5G for atingido em 10 dias, logs mais antigos que 10 dias serão removidos, substituindo a política de retenção de 30 dias.
Passos Práticos: Aplicando e Verificando a Configuração
1. Verifique o Uso Atual do Journal
Antes de fazer alterações, verifique o uso atual de disco do journal:
journalctl --disk-usage
Exemplo de Saída:
Journals take up 3.4G of disk space.
2. Configure os Limites
Edite /etc/systemd/journald.conf (ou seu arquivo de substituição) e descomente/defina as diretivas desejadas. Por exemplo, para garantir uso máximo de 500MB e retenção de 30 dias:
[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days
3. Reinicie o Serviço do Journal
Para que as alterações entrem em vigor, o serviço systemd-journald deve ser reiniciado. Isso não afeta o registro ativo de logs, mas instrui o daemon a aplicar imediatamente as novas restrições de tamanho e iniciar o processo de limpeza.
sudo systemctl restart systemd-journald
4. Force a Limpeza Manualmente
Se o espaço em disco precisar ser recuperado imediatamente com base nos novos limites, a reinicialização do serviço geralmente é suficiente. Alternativamente, você pode limpar explicitamente os arquivos usando journalctl.
Para limpar logs e recuperar espaço, deixando apenas os últimos 500MB:
sudo journalctl --vacuum-size=500M
Para limpar logs mais antigos que 7 dias:
sudo journalctl --vacuum-time=7d
Resumo das Diretivas Principais
| Diretiva | Escopo | Propósito |
|---|---|---|
Storage |
Global | Define o local de armazenamento (persistente, volátil, automático). |
SystemMaxUse |
Persistente (/var/log/journal) |
Tamanho máximo absoluto total para logs persistentes. |
SystemKeepFree |
Persistente (/var/log/journal) |
Garante que uma quantidade mínima de espaço livre em disco permaneça. |
RuntimeMaxUse |
Volátil (/run/log/journal) |
Tamanho máximo absoluto total para logs voláteis (tempo de execução). |
MaxRetentionSec |
Ambos | Define a idade máxima para logs retidos. |
Conclusão
Defina limites do journal antes que os logs se tornem uma interrupção. Para a maioria dos servidores, use um arquivo de substituição em /etc/systemd/journald.conf.d/, defina SystemMaxUse mais SystemKeepFree, adicione MaxRetentionSec se você tiver um alvo de retenção, reinicie o systemd-journald e confirme o resultado com journalctl --disk-usage.