Há várias maneiras de monitorar os contêineres do Docker. Este blog explicará algumas opções simples e fáceis de usar:
estatísticas da plataforma
comando- API remota do Docker
- cAdvisor
- Plano de controle universal do Docker
Vamos dar uma olhada em cada uma delas.
Usaremos um Servidor Couchbase para coletar os dados de monitoramento. Vamos iniciar o servidor como:
1 |
doca executar -d -p 8091-8093:8091-8093 -p 11210:11210 --nome couchbase arungupta/couchbase |
arungupta/couchbase
A imagem é explicada em github.com/arun-gupta/docker-images/tree/master/couchbase. Ele funciona:
- Configura a memória para o serviço de índice e dados
- Configura o servidor Couchbase para o serviço de índice, dados e consulta
- Configura as credenciais de nome de usuário e senha
Agora vamos coletar dados de monitoramento.
estatísticas da plataforma
estatísticas da plataforma
exibir uma transmissão ao vivo das estatísticas de uso de recursos do(s) contêiner(es) a seguir:
- Uso da CPU %
- Uso de memória, limite, uso de %
- E/S de rede
- E/S de disco
As estatísticas são atualizadas a cada segundo. Aqui está um exemplo de saída:
1 2 |
CONTAINER CPU % MEM USO / LIMITE MEM % NET I/O BLOQUEIO I/O 4827f0139b1f 10.94% 706.2 MB / 1.045 GB 67.61% 299.7 kB / 2.473 MB 456 MB / 327.3 MB |
Por padrão, esse comando exibe estatísticas de todos os contêineres em execução. Uma lista de nomes ou IDs de contêineres pode ser especificada, separada por um espaço, para restringir o fluxo a um subconjunto de contêineres em execução. Por exemplo, estatísticas apenas para o contêiner
O contêiner do Couchbase pode ser visto como:
1 |
doca estatísticas couchbase |
onde couchbase
é o nome do contêiner. E o resultado é semelhante:
1 2 |
CONTAINER CPU % MEM USO / LIMITE MEM % NET I/O BLOQUEIO I/O couchbase 12.50% 708.2 MB / 1.045 GB 67.80% 301 kB / 2.477 MB 456 MB / 327.6 MB |
--no-stream
pode ser especificada quando apenas o primeiro instantâneo é exibido e os resultados não são transmitidos. A opção Contêiner Docker Logentries pode ser usado para coletar
esses dados.
API remota do Docker
O daemon do Docker fornece um API REST remota. Essa API é usada pelo cliente para se comunicar com o mecanismo. Essa API também pode ser invocada por outras ferramentas, como
enrolar ou Cliente REST do Postman para Chrome.
Se você estiver criando daemons do Docker usando o Docker Machine no OSX Mavericks, fazer com que essa API funcione é um pouco complicado. Se você estiver no Mac, siga as instruções em Ativar a API remota do Docker para
garantir que o curl possa invocar essa API REST. A API que fornece estatísticas sobre o contêiner é /containers/{id}/stats
ou /containers/{name}/stats.
Em seguida, mais estatísticas sobre o contêiner podem ser obtidas como:
1 |
~ > enrolar https://192.168.99.100:2376/containers/42d1414883af/stats --cert $DOCKER_CERT_PATH/cert2.p12 --pass mypass --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem |
O seguinte resultado (formatado) é exibido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
{ "ler": "2016-02-07T13:26:56.142981314Z", "precpu_stats": { "cpu_usage": { "total_usage": 0, "percpu_usage": nulo, "usage_in_kernelmode": 0, "usage_in_usermode": 0 }, "system_cpu_usage": 0, "throttling_data": { "períodos": 0, "throttled_periods" (períodos limitados): 0, "throttled_time": 0 } }, "cpu_stats": { "cpu_usage": { "total_usage": 242581854769, "percpu_usage": [242581854769], "usage_in_kernelmode": 33910000000, "usage_in_usermode": 123040000000 }, "system_cpu_usage": 3367860000000, "throttling_data": { "períodos": 0, "throttled_periods" (períodos limitados): 0, "throttled_time": 0 } }, "memory_stats": { "uso": 693821440, "max_usage": 818733056, "estatísticas": { "active_anon": 282038272, "active_file" (arquivo ativo): 28938240, "cache": 82534400, "hierarchical_memory_limit" (limite de memória hierárquica): 9223372036854771712, "hierarchical_memsw_limit": 9223372036854771712, "inactive_anon": 329543680, "inactive_file" (arquivo inativo): 53284864, "mapped_file" (arquivo mapeado): 26558464, "pgfault": 809513, "pgmajfault": 2559, "pgpgin": 1015608, "pgpgout": 940757, "rss": 611270656, "rss_huge": 136314880, "swap": 249049088, "total_active_anon": 282038272, "total_active_file": 28938240, "total_cache": 82534400, "total_inactive_anon": 329543680, "total_inactive_file": 53284864, "total_mapped_file": 26558464, "total_pgfault": 809513, "total_pgmajfault": 2559, "total_pgpgin": 1015608, "total_pgpgout": 940757, "total_rss": 611270656, "total_rss_huge": 136314880, "total_swap": 249049088, "total_unevictable": 0, "total_writeback": 0, "Inevitável": 0, "writeback": 0 }, "failcnt": 0, "limite": 1044574208 }, "blkio_stats": { "io_service_bytes_recursive": [{ "major": 8, "menor": 0, "op": "Ler", "valor": 301649920 }, { "major": 8, "menor": 0, "op": "Escrever", "valor": 248315904 }, { "major": 8, "menor": 0, "op": "Sync" (sincronização), "valor": 201003008 }, { "major": 8, "menor": 0, "op": "Async", "valor": 348962816 }, { "major": 8, "menor": 0, "op": "Total", "valor": 549965824 }], "io_serviced_recursive": [{ "major": 8, "menor": 0, "op": "Ler", "valor": 41771 }, { "major": 8, "menor": 0, "op": "Escrever", "valor": 72796 }, { "major": 8, "menor": 0, "op": "Sync" (sincronização), "valor": 61246 }, { "major": 8, "menor": 0, "op": "Async", "valor": 53321 }, { "major": 8, "menor": 0, "op": "Total", "valor": 114567 }], "io_queue_recursive": [], "io_service_time_recursive": [], "io_wait_time_recursive": [], "io_merged_recursive": [], "io_time_recursive": [], "sectors_recursive": [] }, "pids_stats": {}, "redes": { "eth0": { "rx_bytes": 40192, "rx_packets": 285, "rx_errors": 0, "rx_dropped": 0, "tx_bytes": 222138, "tx_packets": 150, "tx_errors": 0, "tx_dropped": 0 } } } |
Há muito mais detalhes sobre memória, disco e rede. Um novo conjunto de métricas é enviado a cada segundo.
cAdvisor
cAdvisor ou Container Advisor fornecem métricas de host e contêineres. Ele é um daemon em execução que coleta, agrega, processa e exporta informações sobre os contêineres em execução. Vamos iniciar o cAdvisor
contêiner:
1 |
doca executar -d --nome=cadvisor -p 8080:8080 --volume=/var/executar:/var/executar:rw --volume=/sistema:/sistema:ro --volume=/var/lib/doca/:/var/lib/doca:ro google/cadvisor:mais recente |
O painel do cAdvisor mostra apenas os dados dos últimos 60 segundos. No entanto, vários back-ends, como o Prometheus e o InfluxDB,
que permite o armazenamento, a recuperação e a análise de longo prazo.
Uso Ferramenta de consulta do Couchbase para se conectar ao servidor Couchbase:
1 2 3 |
~ > doca executar -ele --link couchbase:db arungupta/couchbase cbq --motor http://db:8093 Couchbase consulta casca conectado para http://db:8093/ . Digite Ctrl-D para sair. cbq> |
Invocar um Consulta N1QL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
cbq> selecionar * de `viagens-amostra` limite 1; { "requestID": "7af2d1b1-c37e-4c75-a913-cfaa99dcabdd", "assinatura": { "*": "*" }, "resultados": [ { "amostra de viagem": { "indicativo": "MILE-AIR", "país": "Estados Unidos", "iata": "Q5", "icao": "MLA", "id": 10, "name" (nome): "40 milhas aéreas", "tipo": "companhia aérea" } } ], "status": "sucesso", "métricas": { "elapsedTime" (tempo decorrido): "10.292951ms", "executionTime": "10.232921ms", "resultCount": 1, "resultSize": 300 } } |
O cAdvisor armazena apenas um minuto de dados e aqui está uma captura do painel:
E uso de memória:
Há muitas ferramentas que podem usar os dados gerados pelo cAdvisor e exibi-los em um bom painel. Mais detalhes estão disponíveis em github.com/google/cadvisor/tree/master/docs.
Plano de controle universal do Docker
O Docker Universal Control Plane (DUCP) permite gerenciar e implantar aplicativos distribuídos Dockerizados, tudo de dentro do firewall. Ele se integra aos principais sistemas, como LDAP/AD, para gerenciar usuários e fornece uma interface para que as equipes de operações de TI
implementar e gerenciar. RBAC, integração SSO com o Docker Trusted Registry, interface de usuário da Web simples e fácil de usar são alguns dos principais recursos. Leia mais Visão geral do produto para uma completa
conjunto de recursos.
Plano de controle universal do Docker com a máquina do Docker é a maneira mais fácil de experimentar isso em seu computador local. As instruções são muito detalhadas e funcionam imediatamente. Veja a seguir
algumas imagens após a implantação de uma imagem do Couchbase.
A instalação do DUCP consiste em um controlador DUCP e um ou mais hosts. Eles são configurados em um Docker Swarm cluster. Em seguida, os contêineres são iniciados nesses clusters:
A pacote de clientes é fornecido e mostra as informações sobre o cluster do Docker Swarm como:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Contêineres: 10 Em execução: 10 Em pausa: 0 Parado: 0 Imagens: 15 Servidor Versão: enxame/1.1.3 Função: primário Estratégia: propagação Filtros: saúde, porto, dependência, afinidade, restrição Nós: 2 nó1: 192.168.99.101:12376 └ Status: Saudável └ Contêineres: 7 └ Reservado CPUs: 0 / 1 └ Reservado Memória: 0 B / 2.004 GiB └ Rótulos: driver de execução=nativo-0.2, versão do kernel=4.1.19-boot2docker, sistema operacional=Boot2Docker 1.10.3 (TCL 6.4.1); mestre : 625117e - Assim Mar 10 22:09:02 UTC 2016, provedor=caixa virtual, rio armazenado=aufs └ Erro: (nenhum) └ UpdatedAt: 2016-04-09T00:12:53Z nó2: 192.168.99.102:12376 └ Status: Saudável └ Contêineres: 3 └ Reservado CPUs: 0 / 1 └ Reservado Memória: 0 B / 2.004 GiB └ Rótulos: driver de execução=nativo-0.2, versão do kernel=4.1.19-boot2docker, sistema operacional=Boot2Docker 1.10.3 (TCL 6.4.1); mestre : 625117e - Assim Mar 10 22:09:02 UTC 2016, provedor=caixa virtual, rio armazenado=aufs └ Erro: (nenhum) └ UpdatedAt: 2016-04-09T00:12:48Z Aglomerado Gerentes: 1 192.168.99.101: Saudável └ Orca Controlador: https://192.168.99.101:443 └ Enxame Gerente: tcp://192.168.99.101:3376 └ KV: etcd://192.168.99.101:12379 Plugins: Volume: Rede: Kernel Versão: 4.1.19-boot2docker Operacional Sistema: linux Arquitetura: amd64 CPUs: 2 Total Memória: 4.008 GiB Nome: ucp-controlador-nó1 ID: 6LTO:GVZJ:2M6Z:DONM:ZAKR:2JIL:ZWJG:KY7R:G3EL:AS2Y:X22F:RXM3 Rótulos: com.doca.ucp.chave_de_licença=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX com.doca.ucp.license_max_engines=1 com.doca.ucp.license_expires=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
Há muitas ferramentas que fornecem dados de monitoramento:
estatísticas da plataforma e API remota do Docker são, sem dúvida, os mais fáceis de lhe dar uma primeira visão geral de
seus dados de monitoramento.
E, a partir daí, tudo fica mais interessante!