implant logrotate

Configura a rotação dos logs do sistema (syslog, kern.log, auth.log e outros) com limite de tamanho (maxsize) calculado a partir do tamanho do disco raiz.

A rotação padrão das distribuições é por tempo (diária ou semanal). Um pico de log — um serviço em loop de erro, um scan agressivo gerando entradas de firewall — pode encher o disco entre uma rotação e outra. Com maxsize, o arquivo é rotacionado também quando passa do teto, na próxima execução do logrotate.

Uso

implant logrotate [OPTIONS] <SUBCOMANDO>

Requer root. As opções do comando (--dry-run) vêm antes do subcomando.

Subcomandos

Subcomando Descrição
apply Grava /etc/logrotate.d/implant-logs e desativa a config de rotação do rsyslog
revert Remove a config do implant e restaura a do rsyslog
status Mostra se está configurado, o disco detectado e se o rsyslog foi desativado

Flags

Flag Descrição
--dry-run Simula sem aplicar mudanças: lista as operações de arquivo que faria
-o, --output <FORMATO> human (padrão), json ou yaml
-v, --verbose Mostra os comandos executados
-c, --config <ARQUIVO> Arquivo de configuração (padrão /etc/protocolo-implant/config.toml)
-t, --token <TOKEN> Token de identificação do servidor (ou PROTOCOLO_TOKEN)

Dry-run

apply e revert montam primeiro um plano de operações de arquivo (criar diretório, copiar, escrever, mover, remover) e só então o executam. Com --dry-run, nada é alterado: a saída mostra Faria: seguido da lista, e no JSON a mesma lista vem no campo planned.

sudo implant logrotate --dry-run apply

O que é aplicado

Quando o `apply` age

O apply não faz nada se a rotação já tem limite de tamanho, ou seja, se:

  • /etc/logrotate.d/implant-logs já existe com maxsize; ou
  • não existe a config do implant, mas /etc/logrotate.d/rsyslog já usa maxsize.

Limites calculados

O tamanho do disco raiz é lido com df (50 GB se não for possível detectar):

Grupo maxsize Rotações mantidas
Principais (syslog, kern.log) — diário ~1% do disco, mín. 50 MB, máx. 500 MB 2 (< 50 GB), 3 (50–99 GB), 4 (≥ 100 GB)
Autenticação e sistema (auth.log, user.log, mail.log, cron.log) — semanal ~0,5% do disco, mín. 20 MB, máx. 100 MB 4 (< 50 GB), 5 (50–99 GB), 7 (≥ 100 GB)
Debug e daemon (debug, daemon.log, messages) — semanal igual ao grupo anterior 2

Exemplos de resultado:

Disco Principais Autenticação e sistema
20 GB 200 MB × 2 100 MB × 4
80 GB 500 MB × 3 100 MB × 5
160 GB 500 MB × 4 100 MB × 7

Todos os grupos usam compress, delaycompress, missingok e notifempty. Os dois primeiros recarregam o rsyslog após a rotação (postrotate). O cabeçalho do arquivo registra o tamanho de disco usado no cálculo.

Arquivos tocados

Arquivo O que acontece
/etc/logrotate.d/implant-logs Criado com a configuração acima
/var/lib/implant/backups/logrotate/rsyslog Cópia da config original do rsyslog (criada uma única vez)
/etc/logrotate.d/rsyslog Renomeado para rsyslog.disabled, para que os mesmos arquivos não sejam rotacionados por duas configs

Depois de gravar, o implant valida a config com logrotate -d.

O backup fica fora de /etc/logrotate.d de propósito: o logrotate lê como configuração todo arquivo desse diretório, exceto os de extensões ignoradas (como .disabled). Até a 2.54.0, o backup ficava em /etc/logrotate.d/rsyslog.backup.implant, era lido como uma segunda config do rsyslog e o logrotate acusava duplicate log entry. Se esse arquivo antigo existir, o próximo apply o move para /var/lib/implant/backups/logrotate/ (ou só o remove, se já houver backup lá). O check --auto-fix faz a mesma migração mesmo quando a rotação já está configurada.

Arquivos que a config original do rsyslog rotacionava e que não estão nas listas acima deixam de ser rotacionados enquanto ela estiver desativada. Confira o backup em /var/lib/implant/backups/logrotate/rsyslog se o seu host grava logs em outros arquivos via rsyslog.

Status

Campo Significado
configured /etc/logrotate.d/implant-logs existe
disk_gb Tamanho do disco raiz detectado
implant_conf Caminho da config do implant
rsyslog_disabled /etc/logrotate.d/rsyslog.disabled existe
planned Em apply/revert: operações de arquivo feitas (ou, em dry-run, as que seriam feitas); omitido quando vazio

Como reverter

sudo implant logrotate revert

O revert:

  1. apaga /etc/logrotate.d/implant-logs e /etc/logrotate.d/protocolo-implant (rotação dos logs do próprio implant, criada pelo check --auto-fix);
  2. devolve a config do rsyslog: se existir rsyslog.disabled, renomeia de volta para /etc/logrotate.d/rsyslog; se não existir e também não houver um rsyslog, copia o backup (o de /var/lib/implant/backups/logrotate/ ou, na falta dele, o antigo rsyslog.backup.implant);
  3. apaga os backups, inclusive o antigo de dentro de /etc/logrotate.d.

Arquivos já rotacionados e comprimidos não são alterados. O revert também respeita o --dry-run. implant reset --logrotate faz a mesma reversão.

A rotação de logs não faz parte do emergency-mode; para desfazê-la, use revert.

Exemplos

# Ver o estado atual (não altera nada)
sudo implant logrotate status

# Ver o que o apply faria, sem alterar nada
sudo implant logrotate --dry-run apply

# Aplicar
sudo implant logrotate apply

# Testar a rotação sem executar
logrotate -d /etc/logrotate.d/implant-logs

# Reverter
sudo implant logrotate revert

Saída JSON do status (resumida):

{
  "success": true,
  "command": "logrotate",
  "data": {
    "action": "status",
    "target": "logrotate",
    "result": "completed",
    "dry_run": false,
    "state": {
      "disk_gb": 79.5,
      "implant_conf": "/etc/logrotate.d/implant-logs",
      "configured": true,
      "rsyslog_disabled": true
    }
  }
}

Trecho do state de um --dry-run apply num host ainda sem a config do implant:

{
  "configured": false,
  "rsyslog_disabled": false,
  "planned": [
    "criar diretório /var/lib/implant/backups/logrotate",
    "copiar /etc/logrotate.d/rsyslog para /var/lib/implant/backups/logrotate/rsyslog",
    "escrever /etc/logrotate.d/implant-logs",
    "mover /etc/logrotate.d/rsyslog para /etc/logrotate.d/rsyslog.disabled"
  ]
}

Veja também

  • docker-limits — limites de logs dos containers
  • check — aplica a rotação no --auto-fix
  • reset — --logrotate