Существует несколько способов мониторинга контейнеров Docker. Этот блог расскажет о нескольких простых и удобных опциях:
- команда
docker stats
- Docker Remote API
- cAdvisor
- Прометей
- InfluxDB
- Docker Универсальная плоскость управления
Давайте посмотрим на каждого из них.
Мы будем использовать сервер Couchbase для сбора данных мониторинга.
Позволяет запустить сервер как:
1
|
docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name couchbase arungupta /couchbase |
arungupta/couchbase
поясняется по адресу github.com/arun-gupta/docker-images/tree/master/couchbase . Он выполняет:
- Настраивает память для службы индексирования и данных
- Настраивает сервер Couchbase для службы индексирования, данных и запросов
- Устанавливает имя пользователя и пароль
Теперь давайте соберем данные мониторинга.
статистика докера
docker stats
отображает прямую трансляцию следующих статистических данных об использовании ресурсов контейнера (ов):
- Использование процессора
- Использование памяти, лимит,% использования
- Сетевой ввод / вывод
- Дисковый ввод / вывод
Статистика обновляется каждую секунду.
Вот пример вывода:
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 |
По умолчанию эта команда отображает статистику для всех запущенных контейнеров. Можно указать список имен или идентификаторов контейнеров, разделенных пробелом, чтобы ограничить поток подмножеством работающих контейнеров.
Например, статистика только для контейнера Couchbase может выглядеть следующим образом:
1
|
docker stats couchbase |
где couchbase
— это имя контейнера.
И вывод выглядит так:
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
может быть указана, когда отображается только первый снимок, а результаты не передаются.
Контейнер Docker Logentries может быть использован для сбора этих данных.
Docker Remote API
Демон Docker предоставляет API Remote REST. Этот API используется Клиентом для связи с движком. Этот API также может быть вызван другими инструментами, такими как curl или Chrome Postman REST Client . Если вы создаете демоны Docker с помощью Docker Machine на OSX Mavericks, то заставить этот API работать немного сложнее.
Если вы работаете на Mac, следуйте инструкциям в « Включить Docker Remote API», чтобы curl мог вызвать этот REST API.
API, который предоставляет статистику о контейнере, — это /containers/{id}/stats
или /containers/{name}/stats.
Тогда больше статистики о контейнере можно получить как:
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 |
Будет показан следующий результат (отформатированный):
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
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 } } } |
Существует гораздо больше деталей о памяти, диске и сети. Новый набор метрик выдвигается каждую секунду.
cAdvisor
cAdvisor или Container Advisor предоставляют метрики хоста и контейнера. Это работающий демон, который собирает, объединяет, обрабатывает и экспортирует информацию о запущенных контейнерах.
Давайте запустим контейнер cAdvisor:
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 |
Панель инструментов cAdvisor показывает данные только за последние 60 секунд. Тем не менее , поддерживается несколько бэкэндов, таких как Prometheus и InfluxDB , что позволяет осуществлять долгое хранение, поиск и анализ.
Используйте Couchbase Query Tool для соединения с Couchbase Server:
1
2
3
|
~ > docker run -it --link couchbase:db arungupta /couchbase cbq --engine http: //db :8093 Couchbase query shell connected to http: //db :8093/ . Type Ctrl-D to exit . cbq> |
01
02
03
04
05
06
07
08
09
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 хранит только одну минуту данных, а вот снимок панели:
И использование памяти:
Существует множество инструментов, которые могут использовать данные, сгенерированные cAdvisor, и отображать их на удобной панели инструментов.
Более подробная информация доступна на github.com/google/cadvisor/tree/master/docs .
Docker Универсальная плоскость управления
Docker Universal Control Plane (DUCP) позволяет управлять и развертывать Dockerized распределенные приложения, все изнутри брандмауэра. Он интегрируется с ключевыми системами, такими как LDAP / AD, для управления пользователями, а также предоставляет и взаимодействует с ИТ-отделами для развертывания и управления. RBAC, интеграция SSO с Docker Trusted Registry, простой и удобный веб-интерфейс — вот некоторые из ключевых функций. Прочитайте обзор продукта для полного набора функций.
Docker Universal Control Plan с Docker Machine — это самый простой способ испытать это на вашей локальной машине. Инструкции очень подробны и работают из коробки. Вот некоторые изображения после развертывания образа Couchbase.
Установка DUCP состоит из контроллера DUCP и одного или нескольких хостов. Они настроены в кластере Docker Swarm. И тогда контейнеры запускаются на этих кластерах:
Сопоставление портов легко определить:
После запуска контейнера можно просмотреть статистику мониторинга:
И наконец симпатичная приборная панель:
Предоставляется клиентский пакет, который отображает информацию о кластере Docker Swarm в виде:
01
02
03
04
05
06
07
08
09
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 |
Существует множество инструментов, которые предоставляют данные мониторинга:
Статистика docker и Docker Remote API — это, безусловно, самый простой способ дать вам первый снимок ваших данных мониторинга. И это только становится интересным оттуда!
Ссылка: | Мониторинг контейнеров Docker — статистика докеров, cAdvisor, универсальная плоскость управления от нашего партнера JCG Аруна Гупты в блоге Miles to go 2.0… . |