Como usar o comando docker stats para monitorar os recursos do contêiner

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como monitorar efetivamente o uso de recursos de seus contêineres Docker usando o comando docker stats. Você explorará como exibir o uso de recursos em tempo real para todos os contêineres em execução, bem como para contêineres específicos por nome ou ID.

Além disso, você descobrirá como visualizar o uso de recursos para todos os contêineres, incluindo os parados, e como personalizar o formato de saída do comando docker stats usando um template (modelo) personalizado. Por fim, você aprenderá como obter um único snapshot (instantâneo) das estatísticas do contêiner sem streaming contínuo.

Exibir o uso de recursos em tempo real para todos os contêineres em execução

Nesta etapa, você aprenderá como exibir o uso de recursos em tempo real para todos os contêineres Docker em execução usando o comando docker stats. Este comando fornece um fluxo em tempo real de dados de uso de recursos do contêiner, incluindo CPU, memória, I/O de rede e I/O de bloco.

Primeiro, vamos iniciar alguns contêineres para que tenhamos algo para monitorar. Usaremos a imagem ubuntu e os executaremos no modo detached (-d) para que sejam executados em segundo plano. Também daremos nomes a eles para facilitar a identificação.

docker pull ubuntu
docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity
docker run -d --name container3 ubuntu sleep infinity

Agora que temos alguns contêineres em execução, podemos usar o comando docker stats para ver o uso de seus recursos.

docker stats

Você verá uma tabela com informações sobre cada contêiner em execução, incluindo seu ID, nome, uso da CPU, uso da memória, I/O de rede, I/O de bloco e PIDs. Esta saída é atualizada em tempo real.

Para parar o comando docker stats, pressione Ctrl+C.

Exibir o uso de recursos em tempo real para contêineres específicos por nome ou ID

Na etapa anterior, você aprendeu como exibir o uso de recursos para todos os contêineres em execução. Nesta etapa, você aprenderá como exibir o uso de recursos para contêineres específicos, fornecendo seus nomes ou IDs ao comando docker stats.

Para exibir as estatísticas de um único contêiner, basta fornecer seu nome ou ID após o comando docker stats. Por exemplo, para ver as estatísticas de container1:

docker stats container1

Você verá o uso de recursos em tempo real apenas para container1. Pressione Ctrl+C para parar a saída.

Você também pode especificar vários nomes ou IDs de contêineres para ver as estatísticas de vários contêineres de uma vez. Por exemplo, para ver as estatísticas de container1 e container2:

docker stats container1 container2

Isso exibirá o uso de recursos em tempo real para container1 e container2. Pressione Ctrl+C para parar a saída.

Usar nomes de contêineres é geralmente mais fácil de lembrar e trabalhar do que IDs de contêineres, especialmente quando você tem vários contêineres em execução.

Exibir o uso de recursos para todos os contêineres (em execução e parados)

Por padrão, docker stats exibe apenas estatísticas para contêineres em execução. Nesta etapa, você aprenderá como exibir o uso de recursos para todos os contêineres, incluindo aqueles que estão parados, usando a flag -a ou --all.

Primeiro, vamos parar um dos contêineres que iniciamos nas etapas anteriores.

docker stop container3

Agora, se você executar docker stats sem nenhuma flag, você verá apenas container1 e container2, pois eles ainda estão em execução.

docker stats

Pressione Ctrl+C para parar a saída.

Para ver as estatísticas de todos os contêineres, incluindo o container3 parado, use a flag -a:

docker stats -a

Você agora verá container1, container2 e container3 listados. Para contêineres parados, a maioria dos campos de uso de recursos mostrará 0% ou 0B, pois eles não estão consumindo recursos ativamente.

Isso é útil para obter uma visão geral completa de todos os contêineres em seu sistema e seu último uso de recursos conhecido antes de serem parados.

Formatar a saída das estatísticas do contêiner usando um template personalizado

Nesta etapa, você aprenderá como formatar a saída do comando docker stats usando um template (modelo) Go personalizado. Isso permite que você exiba apenas as informações que você precisa e em um formato que seja fácil de analisar ou ler.

O comando docker stats suporta a flag --format, que recebe uma string de template Go como argumento. Você pode usar vários placeholders (marcadores) dentro do template para representar diferentes partes das informações do contêiner. Alguns placeholders comuns incluem:

  • .ContainerID: O ID do contêiner.
  • .Name: O nome do contêiner.
  • .CPUPerc: A porcentagem de uso da CPU.
  • .MemUsage: O uso de memória.
  • .NetIO: O I/O de rede.
  • .BlockIO: O I/O de bloco.
  • .PIDs: O número de PIDs.

Vamos tentar formatar a saída para mostrar apenas o nome do contêiner, o uso da CPU e o uso da memória.

docker stats --format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

Neste comando:

  • --format especifica que queremos usar um formato personalizado.
  • "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" é a string do template Go.
    • {{.Name}} exibe o nome do contêiner.
    • \t insere um caractere de tabulação para separação.
    • {{.CPUPerc}} exibe a porcentagem de uso da CPU.
    • {{.MemUsage}} exibe o uso de memória.

Você verá um fluxo em tempo real do nome do contêiner, uso da CPU e uso da memória, separados por tabulações. Pressione Ctrl+C para parar a saída.

Você pode experimentar com diferentes placeholders e formatação para obter a saída que você precisa. Por exemplo, para incluir o ID do contêiner e o I/O de rede:

docker stats --format "ID: {{.ContainerID}}\tName: {{.Name}}\tNetIO: {{.NetIO}}"

Isso fornece uma visão mais personalizada das estatísticas do contêiner.

Obter um único snapshot das estatísticas do contêiner sem streaming

Por padrão, docker stats fornece um fluxo em tempo real do uso de recursos. No entanto, às vezes você pode precisar apenas de um único snapshot (instantâneo) das estatísticas atuais sem as atualizações contínuas. Nesta etapa, você aprenderá como conseguir isso usando a flag --no-stream.

A flag --no-stream informa ao docker stats para coletar as estatísticas uma vez e, em seguida, sair, em vez de atualizar continuamente a saída.

Vamos obter um único snapshot das estatísticas para todos os contêineres em execução:

docker stats --no-stream

Você verá a tabela de estatísticas do contêiner aparecer uma vez, e então o comando sairá. Isso é útil para scripting (criação de scripts) ou quando você só precisa de uma olhada rápida no uso atual de recursos.

Você pode combinar --no-stream com outras flags, como -a para ver um snapshot de todos os contêineres (em execução e parados):

docker stats -a --no-stream

Isso exibirá um único snapshot de todos os contêineres.

Você também pode combiná-lo com a especificação de contêineres específicos:

docker stats container1 container2 --no-stream

Isso fornecerá um único snapshot das estatísticas para container1 e container2.

Usar --no-stream é eficiente quando você não precisa das atualizações em tempo real e só quer capturar o estado atual do uso de recursos.

Resumo

Neste laboratório, você aprendeu como usar efetivamente o comando docker stats para monitorar o uso de recursos de seus contêineres Docker. Você começou exibindo o uso de recursos em tempo real para todos os contêineres em execução, observando fluxos de dados em tempo real para CPU, memória, I/O de rede e I/O de bloco.

Posteriormente, você refinou seu monitoramento, concentrando-se em contêineres específicos, usando seus nomes ou IDs para visualizar seu consumo individual de recursos. Isso permitiu uma análise direcionada do desempenho do contêiner.