Introdução
Neste laboratório, você aprenderá como usar efetivamente o comando docker service logs para visualizar e gerenciar os logs gerados pelos serviços Docker e suas tarefas individuais. Começaremos criando um serviço Docker simples usando a imagem alpine e o comando ping.
Após a criação do serviço, você explorará como visualizar os logs de todo o serviço, fornecendo uma visão consolidada da saída de todas as tarefas em execução. Em seguida, você aprenderá como restringir seu foco para visualizar os logs de uma tarefa específica dentro do serviço. Finalmente, o laboratório demonstrará como aproveitar várias opções com o comando docker service logs para filtrar e formatar a saída do log de acordo com suas necessidades.
Criar um serviço Docker simples
Nesta etapa, criaremos um serviço Docker simples usando o comando docker service create. Um serviço Docker é um grupo de contêineres da mesma imagem. Ao criar um serviço, você define qual imagem de contêiner usar e quais comandos executar dentro dos contêineres.
Primeiro, vamos baixar a imagem alpine, que é uma distribuição Linux leve comumente usada em contêineres Docker.
docker pull alpine
Você deve ver uma saída indicando que a imagem está sendo baixada.
Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
Agora, criaremos um serviço Docker chamado my-service usando a imagem alpine. Também especificaremos o comando ping labex.io para ser executado dentro de cada contêiner do serviço. A flag --name atribui um nome ao serviço, e a parte alpine ping labex.io especifica a imagem e o comando a ser executado.
docker service create --name my-service alpine ping labex.io
Após executar o comando, você verá uma saída semelhante a esta, indicando que o serviço foi criado. A longa sequência de caracteres é o ID do serviço.
p1234567890abcdefghijklmnopqrstu
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
Para verificar se o serviço está em execução, você pode usar o comando docker service ls. Este comando lista todos os serviços em execução no seu swarm Docker.
docker service ls
Você deve ver uma saída semelhante a esta, mostrando seu my-service listado com 1 réplica em execução.
ID NAME MODE REPLICAS IMAGE PORTS
p1234567890 my-service replicated 1/1 alpine:latest
Isso confirma que seu serviço Docker my-service foi criado com sucesso e está em execução com uma tarefa (contêiner) executando o comando ping labex.io.
Visualizar logs para todo o serviço
Na etapa anterior, criamos um serviço Docker chamado my-service que executa um contêiner executando o comando ping labex.io. Este comando gera saída (logs) enquanto é executado. Nesta etapa, aprenderemos como visualizar os logs para todo o serviço.
Para visualizar os logs de um serviço Docker, você usa o comando docker service logs seguido pelo nome do serviço.
docker service logs my-service
A execução deste comando exibirá os logs gerados por todas as tarefas (contêineres) pertencentes ao serviço my-service. Como nosso serviço atualmente tem apenas uma tarefa, você verá a saída do comando ping labex.io em execução nesse contêiner.
my-service.1.abcdefghijkl PING labex.io (1.2.3.4): 56 data bytes
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=1 ttl=50 time=123.456 ms
...
A saída mostra as entradas de log, prefixadas com o nome do serviço, o número da tarefa e um ID de tarefa único. Isso ajuda você a identificar qual tarefa gerou qual entrada de log, especialmente quando você tem várias tarefas em execução para um serviço.
Você também pode usar a flag -f ou --follow para transmitir os logs em tempo real. Isso é útil para monitorar a atividade do serviço conforme ela acontece.
docker service logs -f my-service
Este comando exibirá continuamente novas entradas de log à medida que são geradas pelas tarefas do serviço. Para parar de acompanhar os logs, pressione Ctrl+C.
Visualizar os logs para todo o serviço é útil para obter uma visão geral da integridade e atividade do serviço.
Visualizar logs para uma tarefa específica dentro do serviço
Na etapa anterior, visualizamos os logs para todo o my-service. Quando um serviço tem várias tarefas (réplicas), visualizar os logs combinados pode ser avassalador. Nesta etapa, aprenderemos como visualizar logs para uma tarefa específica dentro de um serviço.
Primeiro, precisamos identificar o ID da tarefa para a qual queremos visualizar os logs. Podemos obter essa informação usando o comando docker service ps, que lista as tarefas associadas a um serviço.
docker service ps my-service
Este comando mostrará as tarefas em execução para my-service. A saída será semelhante a esta:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
abcdefghijkl my-service.1 alpine:latest labex-vm Running Running 2 minutes ago
Nesta saída, abcdefghijkl é o ID da tarefa, e my-service.1 é o nome da tarefa. O nome da tarefa é composto pelo nome do serviço e pelo número da tarefa.
Para visualizar os logs para uma tarefa específica, você usa o comando docker service logs seguido pelo ID da tarefa.
docker service logs abcdefghijkl
Nota: Substitua abcdefghijkl pelo ID da tarefa real que você obteve da saída do comando docker service ps.
A execução deste comando exibirá apenas os logs gerados pelo contêiner em execução para essa tarefa específica. Isso é útil para depurar problemas com tarefas individuais.
my-service.1.abcdefghijkl PING labex.io (1.2.3.4): 56 data bytes
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=1 ttl=50 time=123.456 ms
...
Você também pode usar a flag -f aqui para acompanhar os logs da tarefa específica em tempo real.
docker service logs -f abcdefghijkl
Visualizar logs para tarefas individuais permite que você isole problemas e entenda o comportamento de instâncias específicas do seu serviço.
Usar opções para filtrar e formatar os logs do serviço
Nesta etapa, exploraremos algumas opções úteis para filtrar e formatar a saída do comando docker service logs. Essas opções podem ajudá-lo a encontrar informações específicas nos logs e tornar a saída mais legível.
Um requisito comum é visualizar apenas as entradas de log mais recentes. Você pode usar a opção --tail para especificar o número de linhas a serem exibidas do final dos logs. Por exemplo, para visualizar as últimas 5 linhas de logs para my-service:
docker service logs --tail 5 my-service
Isso exibirá as últimas 5 entradas de log do serviço.
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=10 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=11 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=12 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=13 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=14 ttl=50 time=123.456 ms
Outra opção útil é --since, que permite visualizar logs gerados após um carimbo de data/hora (timestamp) ou duração específica. Por exemplo, para visualizar logs gerados nos últimos 5 minutos:
docker service logs --since 5m my-service
Você também pode especificar um carimbo de data/hora específico no formato RFC3339Nano, data (AAAA-MM-DD) ou data e hora (AAAA-MM-DDTHH:MM:SS).
Para incluir carimbos de data/hora na saída, use a flag --timestamps ou -t:
docker service logs -t my-service
Isso adicionará um carimbo de data/hora ao início de cada entrada de log.
2023-10-27T10:30:00.123456789Z my-service.1.abcdefghijkl PING labex.io (1.2.3.4): 56 data bytes
2023-10-27T10:30:01.123456789Z my-service.1.abcdefghijkl 64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
...
Finalmente, você pode combinar essas opções para refinar a visualização dos seus logs. Por exemplo, para visualizar as últimas 10 entradas de log com carimbos de data/hora:
docker service logs --tail 10 -t my-service
Essas opções fornecem flexibilidade na forma como você visualiza e analisa seus logs de serviço Docker, tornando mais fácil monitorar e solucionar problemas em seus aplicativos.
Antes de concluir o laboratório, vamos limpar o serviço que criamos. Podemos remover o serviço usando o comando docker service rm.
docker service rm my-service
Você verá a saída confirmando a remoção do serviço.
my-service
Este comando para e remove todas as tarefas associadas ao serviço.
Resumo
Neste laboratório, aprendemos como criar um serviço Docker simples usando o comando docker service create, especificando a imagem e o comando a ser executado nas tarefas do serviço. Verificamos a criação e o status do serviço usando docker service ls.
Em seguida, exploramos como visualizar logs para todo o serviço usando docker service logs <service_name> e como visualizar logs para uma tarefa específica dentro do serviço, primeiro identificando o ID da tarefa usando docker service ps <service_name> e, em seguida, usando docker service logs <task_id>. Finalmente, aprendemos como usar várias opções com docker service logs para filtrar e formatar a saída do log, como --follow para transmitir logs, --since para visualizar logs a partir de um horário específico e --tail para visualizar as últimas N linhas de logs.



