[ad_1]
Os contêineres do Docker de longa duração podem acumular rapidamente um grande número de linhas de log. Eles consomem a capacidade de armazenamento e reduzem o desempenho acessando e filtrando dados. Embora o Docker inclua ferramentas internas para exibir logs, não há mecanismo interno para limpá-los.
Neste artigo, você aprenderá como limpar os logs de contêineres do Docker em execução, sem reiniciá-los ou substituí-los. Você também verá algumas técnicas para lidar com registros grandes com mais eficiência, mantendo os dados antigos.
entenda o problema
O Docker coleta logs da saída padrão e fluxos de erros dos processos em primeiro plano do contêiner. a docker logs
O comando é usado para recuperar esses registros, mas não permite remover linhas antigas.
O Docker oferece suporte a muitos drivers de registro diferentes, portanto, não é possível fornecer um mecanismo de limpeza padronizado. Este artigo se concentra no padrão json-file
log handler, onde as linhas de log são armazenadas em um arquivo JSON no sistema de arquivos do host do seu contêiner. Consulte a documentação do controlador de armazenamento se precisar limpar os logs transmitidos para um host remoto.
Arquivos de log criados pelo json-file
controlador são armazenados sob o /var/lib/docker/containers
diretório. Cada contêiner obtém seu próprio arquivo de log que é usado ao longo de sua vida útil. Não há rotação de log configurada por padrão.
Simplesmente excluir o arquivo de log não é uma solução eficaz. O Docker espera que o arquivo esteja continuamente disponível e não o recriará automaticamente se for excluído. É mais seguro Claro o conteúdo do registrador existente para evitar afetar as gravações atuais.
Descubra o caminho do arquivo de log
Primeiro, encontre o caminho para o arquivo de log do seu contêiner de destino. Você pode recuperar o caminho do arquivo de log para um contêiner chamado my-app
executando o seguinte comando:
$ docker inspect --format="{{.LogPath}}" my-app /var/lib/containers/1380d936...-json.log
Limpar arquivo de registro
Você pode limpar o conteúdo do log sem excluí-lo fazendo eco de uma string vazia em seu conteúdo. O arquivo será de propriedade de root
então você precisará executar esta operação em um shell raiz. O comando a seguir liberará o arquivo de log para você:
$ sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" my-app)'
A interpolação do shell é usada para recuperar dinamicamente o caminho do arquivo de log para o my-app
recipiente. Em vez disso, você pode substituir manualmente no caminho recuperado anteriormente.
quando você corre docker logs my-app
agora você verá uma saída vazia, a menos que o contêiner tenha retomado a escrita de linhas nesse meio tempo.
Limitação de saída de log
a docker logs
O comando aceita alguns argumentos que podem ser usados para limitar a saída de logs ruidosos. Isso ajuda a mitigar a necessidade de limpar o registro e evitar que seu terminal seja inundado com linhas antigas toda vez que você acessar o arquivo.
--tail
– Este sinalizador diz ao Docker para emitir apenas um número específico de linhas de log antigas, começando com a mais recente.--until
S--since
– Esses sinalizadores restringem a saída às linhas de log emitidas durante um período de tempo específico. Eles são úteis quando você conhece o período de tempo aproximado em que um evento ocorreu.
aqui estão alguns exemplos:
Mostrar as 100 linhas de log mais recentes
docker logs my-app --tail 100
Mostrar linhas de log escritas na última hora
docker logs my-app --since 1h
Mostra até 100 linhas de log escritas na última hora
docker logs my-app --tail 100 --since 1h
Configurações de rotação de log
Ter que limpar regularmente os arquivos de log dessa maneira geralmente indica que os logs de seu aplicativo são excessivamente detalhados ou simplesmente há muita atividade para armazenar em um arquivo.
Muitos drivers de registro do Docker, incluindo json-file
tem suporte opcional de rotação de log que você pode habilitar globalmente para o daemon do Docker ou por contêiner.
As configurações do daemon são definidas em /etc/docker/daemon.json
. Este é um exemplo que alterna os logs do contêiner quando atingem 8 MB. Até cinco arquivos serão mantidos ao mesmo tempo, com arquivos antigos automaticamente excluídos à medida que novas rotações ocorrerem.
{ "log-opts": { "max-size": "8m", "max-file": "5" } }
Reinicie o daemon do Docker para aplicar a alteração:
$ sudo service docker restart
A rotação no nível do daemon se aplica a todos os contêineres recém-criados. As alterações não afetarão nenhum contêiner que já exista em seu host.
A rotação pode ser definida para recipientes individuais usando --log-opts
sinalizadores Eles substituirão as configurações padrão do daemon do Docker.
docker run --name app --log-driver json-file --log-opts max-size=8M --log-opts max-file=5 app-image:latest
Resumo
Os logs de contêiner do Docker podem ficar ruidosos quando aplicativos ocupados gravam uma saída grande. O acesso a logs detalhados é útil para depuração, mas eles consomem espaço de armazenamento, dificultam a seleção de dados e podem diminuir o desempenho.
Você pode limpar arquivos de log sob demanda usando comandos shell para esvaziar seu conteúdo. No entanto, é uma prática recomendada configurar a rotação de log para ocorrer automaticamente quando os arquivos atingirem um tamanho especificado. a docker logs
O comando também oferece suporte a sinalizadores que podem ajudar a controlar logs complicados no ponto de acesso.
[ad_2]