Команда 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.
Не ждите хороших значений метрики%. Это всего лишь счетчики, поэтому вам нужно рассчитать% от значений счетчика. Просто найдите счетчики, которые вам пригодятся (я думаю, * подождите * метрики), и вы сможете обнаружить узкое место ввода-вывода.
Вы можете применить аналогичную концепцию также для: