implant traefik-accesslog
Configura o access log do Traefik no formato que o auto-ban le, com permissao restrita e rotacao do arquivo onde ele realmente mora no host.
Uso
implant traefik-accesslog [OPTIONS]Flags
| Flag | Descricao |
|---|---|
| (nenhuma) | Status: ligado/desligado, formato, addInternals, query string, arquivo no host, permissao e rotacao |
--enable |
Liga o access log ou, se ja estiver ligado, acrescenta o que falta ao bloco existente |
--force |
Com --enable: troca valores escritos explicitamente pelo operador (format: common, addInternals: false) (v2.61.0+) |
--to file|stdout |
Com --enable, ao ligar: file (padrao, /var/log/traefik montado no host) ou stdout (sem mount: o Docker guarda o log e o auto-ban le de la) (v2.62.0+) |
--status all|faixas |
Com --enable: o que registrar. all inclui 2xx; faixas como 200-299,400-599. Padrao ao ligar: 400-599; num bloco existente so muda quando passado (v2.62.0+) |
--yes, -y |
Com --enable/--disable: aplica sem perguntar, para automacao sem terminal. Sem ela e sem TTY, a confirmacao e recusada e nada muda (v2.61.1+) |
--disable |
Desabilitar access log |
--fix-perms |
Apenas logrotate e permissao. Idempotente, sem prompt, sem tocar no traefik.yml e sem reiniciar o Traefik |
--dry-run |
Mostra o plano sem aplicar |
Exemplos
implant traefik-accesslog # status
sudo implant traefik-accesslog --enable --dry-run # plano
sudo implant traefik-accesslog --enable
sudo implant traefik-accesslog --fix-perms
sudo implant traefik-accesslog --fix-perms --dry-run -o json
sudo implant traefik-accesslog --disableRequisitos
- Traefik instalado e configurado no servidor
traefik.ymlno caminho padrao (config por linha de comando ou TOML nao e editada: o implant mostra a flag/chave a acrescentar)
Quando nao da para montar o diretorio de log (v2.62.0+)
O volume /var/log/traefik so entra por docker-compose. Em Traefik criado por docker run ou por outra ferramenta, o --enable recusa sem alterar nada e sugere:
--to stdout: sem mount e sem recriar o container (so reinicia o Traefik). O Docker guarda o log no host e o auto-ban le de la. A rotacao passa a ser a do log do Docker: confira omax-sizedo container (--log-opt max-size=50m --log-opt max-file=5);- montar
-v /var/log/traefik:/var/log/traefikonde o container e criado e rodar o--enablede novo; - passar o container para um orquestrador que gerencie o Traefik.
Quando o traefik.yml e gerado por um orquestrador a partir de um template, o implant nao o edita (o proximo deploy desfaria a mudanca). Desde a v2.64.0, com o orquestrador que tem a opcao de access log no template, o --enable pede a ele o redeploy (com --status 400-599 ou all), confere o resultado e cuida do logrotate; se o novo Traefik falha, o orquestrador devolve o anterior e o JSON diz se houve volta. Sem essa opcao, o --enable recusa e mostra o comando.
Com mais de um Traefik no host, o comando recusa sem indicacao (traefik_ambiguous, uma sugestao por instancia). Indique com --traefik <container>, --for-container <app> (o Traefik que roteia para o app) ou IMPLANT_TRAEFIK_CONTAINER=<nome> (v2.65.0+).
Access log desligado
Antes de gravar, o implant confere se consegue montar /var/log/traefik no container. O volume so entra por docker-compose; em container criado por outra ferramenta (docker run, orquestrador com manifesto proprio) o --enable recusa sem alterar nada, com o motivo e codigo de saida 1 (v2.61.2+). Se o volume ou o restart falharem depois de gravar, o traefik.yml volta ao original. No fim, ele confere que o Traefik ficou de pe e que o arquivo de log apareceu no host (traefik_up, log_written no JSON).
O --enable grava o bloco do implant: formato JSON, so 4xx/5xx, headers sensiveis fora, addInternals: true no Traefik 3 e a query string fora do log no Traefik que aceita. Monta o diretorio de log se faltar, instala o logrotate e reinicia o Traefik.
Access log ja ligado (v2.61.0+)
O --enable acrescenta so o que falta, sem reescrever o bloco do operador — comentarios, ordem e os demais campos ficam (edicao por linha, conferida pelo parser; forma que nao da para editar com seguranca, como accessLog: {…} inline, e relatada e nao tocada):
| Falta | Quando entra | Por que |
|---|---|---|
format: json |
bloco sem format (o padrao do Traefik e texto) |
o sinal traefik_http do auto-ban so le JSON |
addInternals: true |
Traefik >= 3 | sem ela o 403 da guarda do `traefik-edge` (noop@internal) nao e logado e o auto-ban nao ve o scanner |
fields.queryParameters.defaultMode: drop |
Traefik >= 3.6.18 / 3.7.2 | token ou credencial na query nao vai para o disco |
Tudo numa gravacao so: plano na tela (e no --dry-run, que nao grava nem reinicia), confirmacao, backup em /var/lib/implant/backups/, um restart do Traefik e conferencia de que ele voltou — se nao voltar, o arquivo original e restaurado e o Traefik reiniciado de novo.
Nunca grava: addInternals no Traefik 2 (ele nao sobe com a chave) nem com versao nao identificada (avisa). Valor escrito explicitamente pelo operador (format: common, addInternals: false) so muda com --force. Em Traefik anterior a 3.6.18 / 3.7.2 a chave de query nao e escrita e o implant check pede a atualizacao do Traefik.
Onde o log mora no host (v2.61.0+)
O caminho vem dos mounts do container (docker inspect): bind ou volume nomeado (/var/lib/docker/volumes/<nome>/_data), o mount mais especifico que cobre o filePath. E esse diretorio que o logrotate cobre e onde a permissao 0640 e aplicada. Log sem mount no host (so dentro do container) ou no stdout aparece no status e no check; se o arquivo no host nao for o que o auto-ban le, o status avisa.
Rotacao
/etc/logrotate.d/traefik: diario, 7 dias, maximo 50 MB, create 0640 root adm, e postrotate mandando USR1 ao container detectado (v2.61.0+; antes o nome era fixo). USR1 para o container errado deixa o Traefik escrevendo no arquivo rotacionado: o access.log novo fica vazio e o auto-ban para de ver.
Um logrotate existente e corrigido pelo --enable, --fix-perms e fix --auto, com backup e sem restart do Traefik:
createaberto (bit de outros ou escrita de grupo) viracreate 0640 root adm;- nome do container no USR1;
- o padrao antigo
/var/log/traefik/*.logpassa a apontar para o diretorio real quando o log esta em outro lugar (padrao escrito pelo operador nao e tocado).
O --enable instala o logrotate que faltar, salvo se outro arquivo de /etc/logrotate.d ja cobrir o diretorio. Arquivos de log com modo aberto viram 0640 grupo adm; o diretorio perde o que excede 0755; nada que ja esteja mais restrito e afrouxado.
Em JSON (envelope traefik-accesslog.fix-perms): antes/depois do logrotate (patterns_before/patterns_after, signal_before/signal_after/signal_expected, covers_dir), location, dir.path e restarted_traefik: false. Sai com codigo 1 se alguma escrita falhar.
Saida JSON do `--enable` / `--disable` (v2.61.1+)
Com -o json o stdout e so o envelope (o texto humano vai para o stderr). Comandos traefik-accesslog.enable e traefik-accesslog.disable, com o mesmo formato no --dry-run e na aplicacao:
| Campo | Significado |
|---|---|
result |
applied, unchanged, dry_run, cancelled, failed, manual (config por linha de comando: o implant so aponta), unsupported (labels), not_found |
mode |
install (grava o bloco do implant), complete (completa o bloco do operador), remove (--disable) ou null |
container, config_path |
Traefik detectado e o traefik.yml |
added[] |
{key, value}: chaves acrescentadas (ou que seriam, em dry-run) |
replaced[] |
{key, from, to}: valores do operador trocados pelo --force |
block |
install: o YAML acrescentado |
adds_log_volume |
install sem mount do log: acrescenta o volume e recria o container |
restart_planned, restarted |
restart previsto / feito |
backup |
backup do traefik.yml |
restored_original, traefik_up |
o Traefik nao voltou com a config nova e o original foi restaurado; o Traefik ficou de pe no fim (null: nao se aplica) |
logrotate |
action (created, would_create, exists, covered, unavailable, failed, none), path, pattern, signal_container |
perms |
o mesmo objeto do --fix-perms |
destination, status_filter, docker_log |
file ou stdout; filtro em vigor; com stdout, o log do Docker (driver, path, max_size, max_file) (v2.62.0+) |
warnings[], errors[] |
o que nao sera feito e por que; falhas |
failure |
code estavel, reason e suggestions[] (id, title, detail, command, available): o motivo e as saidas, para um console mostrar ao operador (v2.62.0+) |
Em falha: success: false, error com os erros e codigo de saida 1. Fluxo tipico de automacao: --enable --dry-run -o json para mostrar o plano, confirmacao do operador, --enable --yes -o json para aplicar.
O estado do access log (formato, addInternals, query, rotacao, permissao) fica nos itens Access log do Traefik: … do implant check -o json.
Itens do `check`
Modulo traefik_accesslog: permissao, rotacao, query, formato e addInternals. Os de formato e addInternals saem como Fail com o comando implant traefik-accesslog --enable; o fix --auto corrige permissao e rotacao e nao reinicia o Traefik por formato nem addInternals.
Ao desabilitar
- Remove a secao
accessLogdotraefik.yml - Reinicia o Traefik para aplicar a alteracao
Codigos de Saida
| Codigo | Significado |
|---|---|
| 0 | Configuracao aplicada com sucesso |
| 1 | Erro (Traefik nao encontrado ou configuracao invalida) |