Troubleshooting Docker

Standard

O Docker é uma solução muito recente e talvez por isso que tenha tão pouca documentação sobre coisas não triviais. Com base nisso, farei um pequeno resumo dos passos que pode seguir para analisar seu ambiente para encontrar a causa raiz em caso do problema.

troubleshooting-astro

Parâmetro PS

Como o básico, temos o comando “docker ps” ele nos mostra o estado dos containers. Ele por padrão (sem parâmetros) mostra quais estão em execução, mas com os parâmetro -a ele mostra todos os containers, incluindo os que não estão em execução:

Seleção_025Os containers que tiverem a informação “Exited” na coluna “STATUS” não estão mais em execução e o número que aparece entre parentes é o código de saída do processo, ou seja, qualquer coisa diferente de “0” indica um problema.

Log

Você pode analisar o log também. O Docker por padrão envia logs via syslog, ou seja, acesse o arquivo de log geral do seu GNU/Linux, que no caso do Debian é o “/var/log/syslog”:

# tail -f /var/log/syslog | grep -i “docker”

Logs

Diferente de apenas analisar o log do host docker, você pode ver o resultado do comando executando no container. Isso pode ser muito útil para entender a saída de erro, que normalmente não aparece no log do syslog:

# docker logs <container ID>

No meu caso abaixo, ficou fácil:

Seleção_026

Stats

Caso você suspeite de uso irresponsável dos recursos, pode usar o parâmetro “stats” do docker. Com o comando abaixo listará todos os containers e seus respectivos usos do recurso do host:

docker ps -q | xargs docker stats

Sysdig

Não conhece Sysdig? Veja esse vídeo.

Caso esteja usando Debian, será necessário instalar o pacote mais novo. Você pode fazer tudo com o comando abaixo:

# wget http://ftp.us.debian.org/debian/pool/main/s/sysdig/sysdig_0.1.99-1_amd64.deb ; wget http://ftp.us.debian.org/debian/pool/main/s/sysdig/sysdig-dkms_0.1.99-1_all.deb ; dpkg -i sysdig*

Depois será necessário reiniciar o módulo do sysdig:

# rmmod sysdig-probe; modprobe sysdig-probe

Processamento

Para analisar o alto consumo de processador é simples. Use o comando abaixo:

# sudo sysdig -pc -c topprocs_cpu

O parâmetro “-pc” adiciona o contexto de containers, ou seja, é o mesmo comando padrão de processamento do sysdig, porém com o adendo sobre containers.

Veja o retorno desse comando:

Seleção_028

Eu executei um grep recursivo no container “trusting_mayer” apenas para efeito de teste. E veja nosso container como o processo que mais consome processador.

Rede

É possível saber quem são os maiores utilizadores de recurso de redes com o comando abaixo:

# sysdig -pc -c topprocs_net

Veja o retorno:

Seleção_030

Resumindo. Uso de rede não é o problema aqui, certo? 😛

Caso tenha interesse em saber quais as conexões abertas nesse momento, use o comando abaixo:

# sysdig -pc -c topconns

Veja o retorno:

Seleção_031

Interessado em ir um pouco mais fundo nessa analise? Que tal ver os dados que trafegam nessas conexões?

# sysdig -A -cecho_fds container.name=tender_elion and fd.port=80

No lugar de “tender_elion” coloque o nome do seu container e o mesmo para a porta.

Veja o retorno:

Seleção_032

Como podemos ver, é apenas o apt-get instalando pacotes. 🙂

Disco

E se o problema for algo relacionado a uso do disco?

Com o comando abaixo é possível ter uma pista:

# sysdig -pc -c topprocs_file

Veja o retorno:

Seleção_033

Podemos ver que tem alguém ali consumindo bastante disco.

E se eu quiser mais informação sobre quais são os arquivos maiores e afins?

# sysdig -pc -c topfiles_bytes

Veja o retorno:

Seleção_035

Agora temos mais informações.

Segurança

Suspeitou de algum problema de segurança? Analise todos os comandos executados, tanto no host, como no container com o comando abaixo:

# sysdig -pc -c spy_users

Veja o retorno:

Seleção_036

Mais logs

Quer analisar todos os logs em apenas um tela? Simples assim:

# sysdig -pc -cspy_logs

Veja o retorno:

Seleção_037

Muito dado, certo? Quer ver os logs de um container em específico?

# sysdig -pc -cspy_logs container.name=condescending_einstein

Lembre-se de mudar o nome do container.

Veja o retorno:

Seleção_038

Com todo esses dados, acho que agora sua analise da causa raiz do problema fique mais fácil.

Referência

https://sysdig.com/let-light-sysdig-adds-container-visibility/

http://www.sysdig.org/wiki/