Existen múltiples formas de monitorizar los contenedores Docker. Este blog explicará algunas opciones sencillas y fáciles de usar:
Veamos cada una de ellas.
Utilizaremos un Servidor Couchbase para recopilar los datos de monitorización. Vamos a iniciar el servidor como:
|
1 |
docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name couchbase arungupta/couchbase |
arungupta/couchbase imagen se explica en github.com/arun-gupta/docker-images/tree/master/couchbase. Realiza:
- Configura la memoria para el servicio de índices y datos
- Configura el servidor Couchbase para el servicio de índices, datos y consultas.
- Establece las credenciales de nombre de usuario y contraseña
Ahora vamos a recopilar datos de seguimiento.
estadísticas de docker
estadísticas de docker mostrar una transmisión en directo de las siguientes estadísticas de uso de recursos de contenedor(es):
- Uso de la CPU %
- Uso de memoria, límite, uso de %
- Red i/o
- Disco i/o
Las estadísticas se actualizan cada segundo. A continuación se muestra un ejemplo:
|
1 2 |
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK 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 defecto, este comando muestra las estadísticas de todos los contenedores en ejecución. Se puede especificar una lista de nombres o ids de contenedores, separados por un espacio, para restringir el flujo a un subconjunto de contenedores en ejecución. Por ejemplo, sólo se mostrarán las estadísticas de
Contenedor Couchbase puede ser visto como:
|
1 |
docker stats couchbase |
donde couchbase es el nombre del contenedor. Y la salida se ve así:
|
1 2 |
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK 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 en la que sólo se muestra la primera instantánea y no se transmiten los resultados. La dirección Contenedor Docker Logentries puede utilizarse para recoger
estos datos.
API remota de Docker
El demonio Docker proporciona un API REST remota. El cliente utiliza esta API para comunicarse con el motor. Esta API también puede ser invocada por otras herramientas, tales como
rizo o Cliente REST Postman para Chrome.
Si estás creando demonios Docker usando Docker Machine en OSX Mavericks, entonces conseguir que esta API funcione es un poco complicado. Si estás en Mac, sigue las instrucciones en Activar la API remota de Docker a
asegúrese de que curl puede invocar esta API REST. La API que proporciona estadísticas sobre el contenedor es /contenedores/{id}/estadisticas o /contenedores/{nombre}/estadisticas.
Entonces se pueden obtener más estadísticas sobre el contenedor como:
|
1 |
~ > curl 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 |
Se muestra el siguiente resultado (formateado):
|
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 |
{ "read": "2016-02-07T13:26:56.142981314Z", "precpu_stats": { "cpu_usage": { "total_usage": 0, "percpu_usage": null, "usage_in_kernelmode": 0, "usage_in_usermode": 0 }, "system_cpu_usage": 0, "throttling_data": { "periods": 0, "throttled_periods": 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": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "memory_stats": { "usage": 693821440, "max_usage": 818733056, "stats": { "active_anon": 282038272, "active_file": 28938240, "cache": 82534400, "hierarchical_memory_limit": 9223372036854771712, "hierarchical_memsw_limit": 9223372036854771712, "inactive_anon": 329543680, "inactive_file": 53284864, "mapped_file": 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, "unevictable": 0, "writeback": 0 }, "failcnt": 0, "limit": 1044574208 }, "blkio_stats": { "io_service_bytes_recursive": [{ "major": 8, "minor": 0, "op": "Read", "value": 301649920 }, { "major": 8, "minor": 0, "op": "Write", "value": 248315904 }, { "major": 8, "minor": 0, "op": "Sync", "value": 201003008 }, { "major": 8, "minor": 0, "op": "Async", "value": 348962816 }, { "major": 8, "minor": 0, "op": "Total", "value": 549965824 }], "io_serviced_recursive": [{ "major": 8, "minor": 0, "op": "Read", "value": 41771 }, { "major": 8, "minor": 0, "op": "Write", "value": 72796 }, { "major": 8, "minor": 0, "op": "Sync", "value": 61246 }, { "major": 8, "minor": 0, "op": "Async", "value": 53321 }, { "major": 8, "minor": 0, "op": "Total", "value": 114567 }], "io_queue_recursive": [], "io_service_time_recursive": [], "io_wait_time_recursive": [], "io_merged_recursive": [], "io_time_recursive": [], "sectors_recursive": [] }, "pids_stats": {}, "networks": { "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 } } } |
Hay muchos más detalles sobre memoria, disco y red. Cada segundo se envía un nuevo conjunto de métricas.
cAdvisor
cAdvisor o Container Advisor proporcionan métricas de hosts y contenedores. Es un demonio en ejecución que recopila, agrega, procesa y exporta información sobre los contenedores en ejecución. Iniciemos el cAdvisor
contenedor:
|
1 |
docker run -d --name=cadvisor -p 8080:8080 --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro google/cadvisor:latest |
El cuadro de mandos de cAdvisor sólo muestra datos de los últimos 60 segundos. Sin embargo múltiples backends, como Prometheus e InfluxDB,
que permiten el almacenamiento, la recuperación y el análisis a largo plazo.
Utilice Herramienta de consulta Couchbase para conectar con el servidor Couchbase:
|
1 2 3 |
~ > docker run -it --link couchbase:db arungupta/couchbase cbq --engine https://db:8093 Couchbase query shell connected to https://db:8093/ . Type Ctrl-D to exit. cbq> |
Invocar un 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> select * from `travel-sample` limit 1; { "requestID": "7af2d1b1-c37e-4c75-a913-cfaa99dcabdd", "signature": { "*": "*" }, "results": [ { "travel-sample": { "callsign": "MILE-AIR", "country": "United States", "iata": "Q5", "icao": "MLA", "id": 10, "name": "40-Mile Air", "type": "airline" } } ], "status": "success", "metrics": { "elapsedTime": "10.292951ms", "executionTime": "10.232921ms", "resultCount": 1, "resultSize": 300 } } |
cAdvisor sólo almacena un minuto de datos y aquí tiene una captura del cuadro de mandos:

Y el uso de memoria:
Hay muchas herramientas que pueden utilizar los datos generados por cAdvisor y mostrarlos en un bonito cuadro de mandos. Encontrará más información en github.com/google/cadvisor/tree/master/docs.
Plano de control universal de Docker
Docker Universal Control Plane (DUCP) permite gestionar y desplegar aplicaciones distribuidas Dockerizadas, todo ello desde dentro del cortafuegos. Se integra con sistemas clave como LDAP/AD para gestionar usuarios y proporciona y una interfaz para que los equipos de operaciones de TI puedan
desplegar y gestionar. RBAC, integración SSO con Docker Trusted Registry, interfaz de usuario web sencilla y fácil de usar son algunas de las características clave. Leer resumen de productos para completar
conjunto de características.
Plan de control universal Docker con Docker Machine es la forma más fácil de experimentar esto en tu máquina local. Las instrucciones son muy detalladas y funcionan a la primera. Aquí tienes
algunas imágenes después de desplegar una imagen de Couchbase.
La instalación de DUCP consta de un controlador DUCP y uno o varios hosts. Éstos se configuran en un Enjambre Docker cluster. Y luego se inician los contenedores en estos clústeres:

A paquete de clientes que muestra la información sobre el clúster 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 |
Containers: 10 Running: 10 Paused: 0 Stopped: 0 Images: 15 Server Version: swarm/1.1.3 Role: primary Strategy: spread Filters: health, port, dependency, affinity, constraint Nodes: 2 node1: 192.168.99.101:12376 └ Status: Healthy └ Containers: 7 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 2.004 GiB └ Labels: executiondriver=native-0.2, kernelversion=4.1.19-boot2docker, operatingsystem=Boot2Docker 1.10.3 (TCL 6.4.1); master : 625117e - Thu Mar 10 22:09:02 UTC 2016, provider=virtualbox, storagedriver=aufs └ Error: (none) └ UpdatedAt: 2016-04-09T00:12:53Z node2: 192.168.99.102:12376 └ Status: Healthy └ Containers: 3 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 2.004 GiB └ Labels: executiondriver=native-0.2, kernelversion=4.1.19-boot2docker, operatingsystem=Boot2Docker 1.10.3 (TCL 6.4.1); master : 625117e - Thu Mar 10 22:09:02 UTC 2016, provider=virtualbox, storagedriver=aufs └ Error: (none) └ UpdatedAt: 2016-04-09T00:12:48Z Cluster Managers: 1 192.168.99.101: Healthy └ Orca Controller: https://192.168.99.101:443 └ Swarm Manager: tcp://192.168.99.101:3376 └ KV: etcd://192.168.99.101:12379 Plugins: Volume: Network: Kernel Version: 4.1.19-boot2docker Operating System: linux Architecture: amd64 CPUs: 2 Total Memory: 4.008 GiB Name: ucp-controller-node1 ID: 6LTO:GVZJ:2M6Z:DONM:ZAKR:2JIL:ZWJG:KY7R:G3EL:AS2Y:X22F:RXM3 Labels: com.docker.ucp.license_key=XXXXXXXXXXXXXXXXXXXXXXXX com.docker.ucp.license_max_engines=1 com.docker.ucp.license_expires=XXXXXXXXXXXXXXXXXXXXXXXX |
Hay muchas herramientas que proporcionan datos de seguimiento:
estadísticas de docker y API remota de Docker son sin duda los más fáciles de dar una primera instantánea de
sus datos de seguimiento.
Y a partir de ahí la cosa se pone interesante.



