Статьи

Мониторинг Docker-контейнеров — статистика докеров, cAdvisor, универсальная плоскость управления

Существует несколько способов мониторинга контейнеров Docker. Этот блог расскажет о нескольких простых и удобных опциях:

  1. команда docker stats
  2. Docker Remote API
  3. cAdvisor
    1. Прометей
    2. InfluxDB
  4. 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>

Вызовите запрос N1QL :

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-CPU-использование-1024x701

И использование памяти:

cadvisor-всего-памяти-использование-1024x429

Существует множество инструментов, которые могут использовать данные, сгенерированные 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. И тогда контейнеры запускаются на этих кластерах:

ducp-изображения 1024x397

Сопоставление портов легко определить:

ducp-порт-отображение-1024x459

После запуска контейнера можно просмотреть статистику мониторинга:

ducp-статистика-1024x593

И наконец симпатичная приборная панель:

ducp-панель-1024x724

Предоставляется клиентский пакет, который отображает информацию о кластере 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 — это, безусловно, самый простой способ дать вам первый снимок ваших данных мониторинга. И это только становится интересным оттуда!