Назад | Перейти на главную страницу

Мониторинг производительности Docker - как запросить время занятости ввода-вывода и точное чтение / запись блока?

Команда docker stats предоставляет базовую информацию о контейнерах. Например:

CONTAINER ID        NAME                                                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
2c73c2e10c53        container_name                                      0.46%               1.422GiB / 31.39GiB   4.53%               350MB / 227MB       534MB / 1.42GB      63

Собираю эту информацию программой ( https://github.com/nagylzs/pysysinfo_influxdb ) и отправив его в базу данных InfluxDb. Мне нужно запустить тесты производительности на нескольких серверах с этой настройкой и проанализировать результаты: найти возможные узкие места на всех серверах (ЦП / скорость сети / память / дисковый ввод-вывод и т. Д.). Информация, предоставляемая «статистикой докеров», очень приблизительна. Вот проблемы:

Я также пытался получить информацию с помощью «docker inspect», но я не вижу здесь полезной ценности.

Что касается сетевых интерфейсов, я могу представить, что это МОЖЕТ работать (хотя это сложно реализовать):

Как сделать то же самое для дискового ввода-вывода? Как сделать ввод / вывод занятым? Эта информация должна быть доступна, потому что она отображается в "статистике докеров". Просто не в лучшем формате. Любые идеи?

Контейнеры Docker основаны на cgroup Linux, поэтому считывайте метрики из файлов cgroup. Например: см. Документ cgroup v1 для контроллера блочного ввода-вывода - https://www.kernel.org/doc/Documentation/cgroup-v1/blkio-controller.txt

Пример из моей ОС:

[root@dockerhost c2241e5663e04cbf0154b06ecb4fe7f31f67918748c3123ea7104ac8db004dae]# ls
blkio.io_merged                   blkio.io_serviced_recursive      blkio.reset_stats                blkio.throttle.write_bps_device   cgroup.event_control
blkio.io_merged_recursive         blkio.io_service_time            blkio.sectors                    blkio.throttle.write_iops_device  cgroup.procs
blkio.io_queued                   blkio.io_service_time_recursive  blkio.sectors_recursive          blkio.time                        notify_on_release
blkio.io_queued_recursive         blkio.io_wait_time               blkio.throttle.io_service_bytes  blkio.time_recursive              tasks
blkio.io_service_bytes            blkio.io_wait_time_recursive     blkio.throttle.io_serviced       blkio.weight
blkio.io_service_bytes_recursive  blkio.leaf_weight                blkio.throttle.read_bps_device   blkio.weight_device
blkio.io_serviced                 blkio.leaf_weight_device         blkio.throttle.read_iops_device  cgroup.clone_children
[root@dockerhost c2241e5663e04cbf0154b06ecb4fe7f31f67918748c3123ea7104ac8db004dae]# cat blkio.throttle.io_service_bytes
253:4 Read 1540096
253:4 Write 0
253:4 Sync 0
253:4 Async 1540096
253:4 Total 1540096
Total 1540096

Документ для файла blkio.throttle.io_service_bytes:

- blkio.throttle.io_service_bytes
    - Number of bytes transferred to/from the disk by the group. These
      are further divided by the type of operation - read or write, sync
      or async. First two fields specify the major and minor number of the
      device, third field specifies the operation type and the fourth field
      specifies the number of bytes.

Не ждите хороших значений метрики%. Это всего лишь счетчики, поэтому вам нужно рассчитать% от значений счетчика. Просто найдите счетчики, которые вам пригодятся (я думаю, * подождите * метрики), и вы сможете обнаружить узкое место ввода-вывода.

Вы можете применить аналогичную концепцию также для: