Configurando Limites do Systemd Journal: Otimizando o Uso do Disco e a Rotação de Logs
O registro eficiente de sistema é um aspecto crítico da administração de sistemas Linux, fornecendo os dados históricos necessários para solução de problemas, auditoria e análise de desempenho. Nas distribuições Linux modernas que utilizam Systemd, o gerenciamento de logs é tratado pelo serviço centralizado de registro, systemd-journald.
Embora o systemd-journald ofereça desempenho e indexação superiores em comparação com arquivos de log tradicionais baseados em texto (como os gerenciados pelo rsyslog), o crescimento descontrolado do journal pode consumir rapidamente um espaço significativo em disco, levando potencialmente à instabilidade do sistema ou degradação do desempenho. Este guia oferece um passo a passo especializado na configuração de limites do journal com base em tamanho e tempo, implementação de políticas de rotação e gerenciamento de opções de armazenamento para garantir o uso ideal do disco.
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 primários de armazenamento, definidos pela diretiva Storage= em journald.conf.
1. Armazenamento Volátil (/run/log/journal)
O armazenamento volátil mantém os logs em um sistema de arquivos temporário, geralmente tmpfs ou um diretório baseado em memória. Os logs armazenados aqui são perdidos após a 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 ainda 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 serão definidos como voláteis por padrão até que o diretório persistente seja criado.
O Arquivo de Configuração Principal
Todos os limites e comportamentos primários para systemd-journald são controlados através do arquivo de configuração principal, geralmente localizado em /etc/systemd/journald.conf.
# Editar o arquivo de configuração principal
sudo nano /etc/systemd/journald.conf
Para garantir que futuras atualizações de pacotes não substituam 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 excluir os logs arquivados mais antigos até que o limite seja atingido.
SystemMaxUse (O Limite Persistente Absoluto)
Esta diretiva define o espaço máximo total em disco que os arquivos de journal persistentes (/var/log/journal) podem ocupar. Este é o principal mecanismo para controlar o uso de disco persistente.
Os arquivos do 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 | Valor de Exemplo |
|---|---|---|
SystemMaxUse |
Tamanho máximo para dados do journal persistente. | 500M ou 2G |
Exemplo de Configuração:
Para limitar o armazenamento do journal persistente a um máximo de 1 Gigabyte:
[Journal]
SystemMaxUse=1G
SystemKeepFree (Buffer de Segurança de 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 do journal.
Se o espaço livre disponível cair abaixo do valor de SystemKeepFree, o journald limpará os logs, mesmo que o limite de SystemMaxUse ainda não tenha sido atingido. Isso impede que o crescimento dos logs preencha completamente o disco e interrompa as operações críticas do sistema.
| Diretiva | Descrição | Valor de Exemplo |
|---|---|---|
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 o 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 | Valor de Exemplo |
|---|---|---|
RuntimeMaxUse |
Tamanho máximo para dados do journal volátil. | 300M |
Implementando Limites de Tempo para Retenção de Logs
Os 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 com mais de essa duração serão automaticamente excluídos, complementando os limites de tamanho.
| Diretiva | Descrição | Valor de Exemplo |
|---|---|---|
MaxRetentionSec |
Idade máxima dos logs a serem mantidos. | 30 dias, 1 mês, 2 semanas |
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 eSystemMaxUsefor definido como 5G, o journald seguirá o limite que for atingido primeiro. Se o limite de 5G for atingido em 10 dias, logs com mais de 10 dias são excluídos, substituindo a política de retenção de 30 dias.
Passos Práticos: Aplicando e Verificando a Configuração
1. Verificar o Uso Atual do Journal
Antes de fazer alterações, verifique o uso atual do disco do journal:
journalctl --disk-usage
Exemplo de Saída:
Journals ocupam 3.4G de espaço em disco.
2. Configurar Limites
Edite /etc/systemd/journald.conf (ou seu arquivo de substituição) e descomente/defina as diretivas desejadas. Por exemplo, para garantir 500MB de uso máximo e retenção de 30 dias:
[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days
3. Reiniciar o Serviço Journal
Para que as alterações entrem em vigor, o serviço systemd-journald deve ser reiniciado. Isso não afeta o registro ativo, 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. Forçar 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, mantendo apenas os últimos 500MB:
sudo journalctl --vacuum-size=500M
Para limpar logs com mais de 7 dias:
sudo journalctl --vacuum-time=7d
Resumo das Diretivas Principais
| Diretiva | Escopo | Propósito |
|---|---|---|
Storage |
Global | Define a localização do armazenamento (persistente, volátil, automático). |
SystemMaxUse |
Persistente (/var/log/journal) |
Tamanho total máximo absoluto 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 total máximo absoluto para logs voláteis (em tempo de execução). |
MaxRetentionSec |
Ambos | Define a idade máxima para logs retidos. |
Conclusão
Otimizar os limites do systemd-journald é um passo obrigatório para a saúde do sistema a longo prazo, especialmente em ambientes com alto volume de logs ou recursos de disco limitados. Ao definir criteriosamente SystemMaxUse e MaxRetentionSec, os administradores podem encontrar um equilíbrio entre manter dados históricos abrangentes e prevenir a proliferação de logs, garantindo desempenho estável do sistema e utilização gerenciável do disco.