Onde o Docker mantém os arquivos de log?


0

A depuração da maioria dos programas Linux geralmente envolve a verificação dos arquivos de log, o que pode ser um processo complexo. No entanto, ao executar em um ambiente em contêiner no Docker, você precisará usar ferramentas mais específicas para depurar aplicativos em produção.

Onde os registros são armazenados?

A resposta simples é que o Docker armazena logs de contêiner em seu local de armazenamento principal, /var/lib/docker/. Cada contêiner tem um log específico para seu ID (o ID completo, não o abreviado que geralmente é exibido) e você pode acessá-lo da seguinte forma:

/var/lib/docker/containers/ID/ID-json.log

Isso é Onde eles estão armazenados, mas como estão no formato JSON, não são facilmente legíveis e ter que usar o ID completo do contêiner é irritante. O Docker fornece um comando integrado para visualizá-los:

docker logs -f e4bd48ef3103

Aqui o -f flag irá manter o prompt aberto e “seguir” quaisquer novas entradas no arquivo. Você também pode --tail o arquivo, ou use --timestamps para exibir o tempo de registro, ou use --until e --since para filtrar com base no tempo.

Se você estiver usando o Docker Compose, poderá usar o comando log para visualizar todos os registros facilmente:

docker-compose logs
Propaganda

No entanto, uma coisa que você notará é que se trata de STDOUT e STDERR, que é útil para muitas coisas, mas só mostra a saída do console do ponto de entrada especificado por “CMD” no arquivo Docker. Muitos aplicativos têm seus próprios sistemas de registro dedicados, que muitas vezes registram em arquivos como /var/log/nginx/access.log. O acesso a registros como esse ainda é possível do lado do host por meio do Docker.

Ver registros de aplicativos dentro de contêineres

Dependendo do contêiner, isso pode não ser necessário. Por exemplo, o contêiner NGINX padrão é configurado para enviar seus logs do Docker para STDOUT para tornar a verificação de log mais fácil. Ele faz isso com um link simbólico de /dev/stdout ao arquivo de log e você pode configurar algo semelhante para seus contêineres.

RUN ln -sf /dev/stdout /var/log/nginx/access.log 
&& ln -sf /dev/stderr /var/log/nginx/error.log

Mas, se quiser fazer check-out de arquivos específicos dentro de um contêiner, você pode fazer isso. Docker fornece o exec -it comando para permitir que você execute qualquer comando dentro de qualquer processo Docker em execução. Usando isso, você pode seguir um arquivo de log dentro de um contêiner do Docker:

docker exec -it e4bd48ef3103 tail -f log.txt

Como isso permite que você execute qualquer comando, você pode usar journalctl ou qualquer outra estratégia de depuração que você deseja, contanto que você inicie com docker exec -it. Você pode até correr /bin/bash se você quiser entrar e dar uma espiada.

Uma solução mais permanente que funciona melhor com serviços de host é usar uma montagem de volume Docker. Você pode vincular um diretório como /var/log/nginx para um volume que é visível do host. Primeiro, crie um novo volume:

docker volume create nginx-logs

E execute o contêiner com o --mount:

docker run -d 
--name devtest 
--mount source=nginx-logs,target=/var/log/nginx 
nginx:latest

Se você estiver usando o Docker Compose, o processo pode ser automatizado:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-logs:/var/log/nginx/
volumes:
  nginx-logs:
Propaganda

Dessa forma, os arquivos de log serão ingeridos diretamente por qualquer serviço de agregação de log na máquina host.

Ver registros do Docker Daemon

Se, em vez disso, você quiser ver os registros específicos do serviço Docker geral em seu servidor, e não qualquer aplicativo específico em contêiner, você vai querer ver o journalctl Histórico:

sudo journalctl -fu docker.service

É onde ele é armazenado na maioria dos sistemas, mas está em um local diferente em alguns:

  • Amazon Linux: /var/log/docker
  • CentOS / RHEL: /var/log/messages | grep docker
  • Mac OS: ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
  • Janelas: AppDataRoamingDockerlogvmdockerd.log

Like it? Share with your friends!

0

0 Comments

Your email address will not be published. Required fields are marked *