Como monitorar o uso de recursos de contêineres Docker
Embora o Docker seja muito mais leve do que as VMs tradicionais, muitos contêineres podem consumir rapidamente os recursos do seu host. Veja como verificar a utilização de hardware e monitorar as contagens de processos dentro de seus contêineres.
O comando Docker Stats
O mecanismo integrado do Docker para visualizar o consumo de recursos é o docker stats. Este comando oferece uma visão tabulada de seus contêineres. Cada contêiner exibe um feed ao vivo de suas métricas críticas.A saída do comando inclui o consumo de CPU e uma medida do uso de rede e armazenamento de cada contêiner durante sua vida útil. A coluna Memória mostra o uso de memória ativa, bem como o limite de memória configurado no contêiner. Quando nenhum limite for definido, você verá a quantidade de RAM disponível em seu host. A coluna final, PIDS, é uma contagem do número de processos iniciados pelo contêiner.
Os contêineres parados são excluídos por padrão. Você pode adicioná-los à tabela passando o sinalizador -a (--all) para o comando. O uso da CPU e da memória não estará disponível, mas você poderá ver as métricas que são agregadas ao longo da vida do contêiner, como a atividade da rede.
Você pode visualizar as estatísticas de um ou vários contêineres da mesma maneira que outros comandos comuns da CLI do docker. Passe uma lista de IDs ou nomes de contêineres separados por espaço. A saída mostrará as métricas para os contêineres especificados, removendo todo o resto.
docker stats primeiro contêiner segundo contêiner
Publicidade
O docker stats suporta formatação personalizada para que você possa selecionar apenas as colunas de que precisa. O sinalizador --format aceita uma string de espaço reservado Go que permite criar visualizações de dados personalizadas.
Veja aqui como mostrar nomes de contêineres com métricas de uso de CPU e memória:
docker stats --format "tabela {{. Name}} \ t {{. CPUPerc}} \ t {{. MemUsage}}"
O tipo de formatação da tabela adiciona cabeçalhos de coluna à saída. Omita isso se quiser os dados brutos sem tabulação. Se você usa a mesma string de formatação regularmente, considere adicioná-la como um alias de shell para facilitar o acesso.
Obtendo mais informações
Informações mais detalhadas sobre o uso de recursos de um contêiner podem ser obtidas inspecionando seu grupo de controle (cgroup). Este mecanismo de kernel rastreia o consumo de um grupo de processos, expondo as métricas coletadas em um pseudo-sistema de arquivos.
Duas versões do sistema cgroup estão disponíveis. v2 só é compatível com Docker 20.10 ou posterior com Linux kernel v4.15. Versões mais antigas usarão v1. A documentação da v2 ainda está incompleta, então a v1 pode ser mais fácil de trabalhar.
Para encontrar o cgroup de um contêiner, você precisa determinar qual versão está ativa e saber o ID completo do contêiner. Esta deve ser a versão completa, não a forma truncada mostrada em docker ps e docker stats output. Você pode encontrá-lo executando docker ps --no-trunc.
Publicidade
Combine o ID do contêiner com o caminho para o diretório de grupos de controle do seu sistema. Os caminhos para v1 e v2 são documentados pelo Docker. Em seguida, você pode inspecionar o pseudo-sistema de arquivos para encontrar estatísticas detalhadas de recursos. Este é o caminho para encontrar o uso de memória de um contêiner ao usar cgroups v1:
cat / sys / fs / cgroup / memory / docker / < id do contêiner completo > /memory. stat
O arquivo de memória fornece informações detalhadas sobre consumo, limites, paginação e uso de troca.
Encontrando métricas de recursos com a API Docker
Uma maneira mais direta de acessar essas informações é por meio da API Docker. Isso é habilitado por padrão por meio do soquete Unix do daemon do Docker. O endpoint / containers // stats fornece detalhes detalhados de utilização de recursos. Substitua pelo ID do seu contêiner.
curl --unix-socket /var/run/docker. sock "http: //localhost/v1.41/containers//stats" | jq
Estamos usando curl neste exemplo. Ele é instruído a usar o soquete daemon do Docker por meio do sinalizador --unix-socket. A API Docker retornará dados no formato JSON; isso é canalizado para jq para torná-lo mais legível no terminal.
Cada resposta da API contém informações detalhadas sobre a utilização atual e anterior de recursos do contêiner. São dados numéricos destinados ao consumo por máquinas-ferramentas. Os valores são apresentados “ brutos ” e pode não ser imediatamente inteligível sem processamento adicional ou ingestão em uma ferramenta de painel.
Visualização de processos em execução
Um comando separado, docker top, permite que você veja a lista de processos atual de um contêiner especificado:
docker superior my-container
Publicidade
Enumera a lista de processos do contêiner no momento em que o comando é executado. Ao contrário das estatísticas, ele não fornece um fluxo de dados ao vivo. Você pode ver cada processo &’ ID, o usuário que o iniciou e o comando que está sendo executado.
Você também pode obter essas informações na API. Use a mesma abordagem descrita acima, substituindo o endpoint / containers // stats por / containers // top.
O Docker não fornece uma maneira integrada de visualizar a utilização de recursos por processo. Se você deseja essas informações, é melhor anexar ao contêiner e instalar o top ou htop. Essas ferramentas fornecerão uma visão muito mais detalhada da atividade do contêiner.
docker exec -it my-container sh # substitui os comandos do gerenciador de pacotes para atualizar & & apt install htop -y htop
Resumo
O daemon do Docker coleta e expõe estatísticas de consumo de recursos históricos e em tempo real sobre seus contêineres. Você pode acessar uma visualização gráfica básica dos dados usando estatísticas do docker, mas para leituras mais avançadas é necessária a API do Docker ou a inspeção manual do grupo de controle.
Você também pode listar os processos em execução de um contêiner, mas o comando docker top não fornece nenhuma indicação de métricas de recursos. Isso significa que é de uso limitado ao inspecionar por que um contêiner está mantendo CPU ou memória excessiva. Você precisará anexá-lo manualmente e inspecionar por dentro.
As ferramentas do Docker têm como objetivo o monitoramento geral e a capacidade de observação, não a inspeção detalhada para facilitar a resolução de problemas. Na maioria das vezes, eles são perfeitamente adequados, mas um bom conhecimento de ferramentas de monitoramento Linux mais amplas que funcionam dentro de contêineres será mais eficaz na resolução de problemas.
Nenhum comentário