Сбор метрик для мониторинга работы контейнеров в среде Docker

Путь движения приложения от разработки к продуктивному использованию не всегдя прост и прямолинеен. Кроме решения задачи обеспечения работоспособности приложения в различных средах, существуют еще проблемы определения зависимостей, обновления компонент, маштабирование приложения.

Где скачать образы для Docker?

Итак, для того, чтобы начать работать с системой виртуализации Docker, необходимо скачать образы или так называемые images контейнеров. Их существует огромное количество, различных сборок, урезанные и полноценные, функциональные и не очень, кастомные и официальные. Так что же это такой за ресурс, который содержит в себе все эти имаги? Называется он  . Сразу скажу, что на главной странице данного сайта (кстати он официальный), можете не пытаться ввести что-то в строке поиска, потому что поиск нерабочий. Может это связано с версией браузера или с еще чем-либо, но лично у меня он не работает. Поэтому на главной странице в самой верхней строке нажимаем кнопку Explore и переходим на страницу с образами:

На этой странице сразу видны образы, и кстати именно на этой странице, поиск уже работает:

С поиском вроде разобрались. Что остается? Остается узнать команду для того, чтобы скачать образы для Docker. Для того, чтобы получить тот или иной образ вам достаточно зайти в любой из репозиториев, где вы – во-первых: получите полную информацию об образе, его особенностях и деталях. Во-вторых узнаете команду для скачивания самого образа. Для примера я зайду в самый первый репозиторий kafka от wurstmeister (нет, это не реклама :)), что мы тут увидим:

Краткое описание, полное описание по разделам, ссылка на репозиторий, его владелец и самое главное команда в блоке Docker Pull Command – это то, что нам нужно. Копируем строку и вставляем на своей линуксовой машине:

Читайте также:  Как обновить Айпад 2 до iOS 10 без компьютера: подробная инструкция

Примечание: если вам необходимо запускать установку с повышенными правами или прав просто не хватает, не забывайте писать sudo перед любой командой.

Нажимаем Enter и ждем окончания скачивания:

Весь процесс, занял менее минуты.

Примечание: как видите при скачивании использовался дефолтный тег latest. Это означает, что была скачана последняя версия данного репозитория. Иногда вам может понадобиться указывать тег с версией репозитория, в случае, если в последних версия например ошибки. Или вы просто не уверены в его корректной работоспособности.

Плюсы контейнеризации docker

Абстрагирование приложение  от хоста

Задумка в контейнера – полная стандартизация. Контейнер соединяется с хостом определенным интерфейсом, контейнеризорованное приложение не зависит от архитектуры или ресурсов хоста. Для хоста же контейнер некий «черный ящик», не имеет значение что в нем.

Маштабирование

В продолжение преимущества абстрагирования приложения от хоста, является возможность простого и линейного маштабирования. Т.е на одной машине может быть запущено несколько контейнеров в то же время они могут быть запущены и на тестовом сервере. В продуктивной среде они так же можно их маштабировать.

Управление версиями и зависимостями

Благодаря использованию контейнеров, разработчик привязывает все компоненты и зависимости к приложению, что позволяет работать как цельным объектом. На  хосте не нужны установки дополнительных компонент или зависимосте для запуска приложения, которое находится внутри контейнера, достаточно возможности запуска докер контейнера.

Изолирование среды

Изоляция в контенерах не достигает такого же уровня как в виртуализации, но тем не менее обладает легкой средой выполнения и относится к изоляции на уровне процессов. При этом контейнер работает на том же самом ядре, что позвоялет ему очень быстро запускаться. Запуск сотни контейнеров на рабочей машине не будет проблемой.

Читайте также:  Что делать, если с флешки пропали файлы, но место занято

Использование слоев

Легкость контейнеров заключатеся в их послойности. То есть когда несколько контейнеров используют одинаковый слой, они могут им пользоваться без дублирования, это минимизирует использование дискового пространства.

Компоновка

Возможность написания задания конкретных действий доя создания нового образа. Т.е. настройки среды можно писат как код и сохранять в системе контроля версий.

Метрики из cgroup: память, CPU, блочный I/O

Для каждой подсистемы (память, CPU и блок ввода-вывода) есть один или несколько псевдофайлов со статистикой.

Метрики памяти

Метрики памяти находятся в контрольной группе “memory”. Эта группа создает дополнительную небольшую нагрузку на систему, потому что производит подробный учет использования памяти на вашем хосте. Таким образом, во многих дистрибутивах ее по умолчанию отключают. Как правило, чтобы ее включить, достаточно добавить параметры командной строки ядра: cgroup_enable=memory swapaccount=1.

Метрики сохраняются в псевдофайл и выглядят следующим образом:

cache 11492564992 rss 1930993664 mapped_file 306728960 pgpgin 406632648 pgpgout 403355412 swap 0 pgfault 728281223 pgmajfault 1724 inactive_anon 46608384 active_anon 1884520448 inactive_file 7003344896 active_file 4489052160 unevictable 32768 hierarchical_memory_limit 9223372036854775807 hierarchical_memsw_limit 9223372036854775807 total_cache 11492564992 total_rss 1930993664 total_mapped_file 306728960 total_pgpgin 406632648 total_pgpgout 403355412 total_swap 0 total_pgfault 728281223 total_pgmajfault 1724 total_inactive_anon 46608384 total_active_anon 1884520448 total_inactive_file 7003344896 total_active_file 4489052160 total_unevictable 32768

Первая половина показателей, без префикса total_, содержит статистику процессов, относящихся к контрольной группе, не включая подгруппы. Вторая половина метрик, с префиксом total_, включает в себя итоговую статистику, включая подгруппы.

Некоторые показатели отражают текущие значения, то есть могут увеличиваться или уменьшаться. Например, swap – размер файла подкачки, используемого участниками контрольной группы. Другие показатели являются “счетчиками”, то есть значениями, которые могут только увеличиваться и сбрасываться, потому что они подсчитывают некоторые события. Например, pgfault указывает количество промахов страниц виртуальной памяти, которые произошли с момента создания группы.

Метрики CPU

Метрики использования ресурсов процессора для каждого контейнера содержится в псевдофайле Они аккумулируют использование процессора всеми процессами контейнера и разбиты по времени по нахождению процессов в пространстве пользователя и пространстве ядра:

  • user – период времени, в течение которого процесс использует процессор для выполнения непривилегированного кода процесса;
  • system – период времени, в течение которого ядро выполняет системные вызовы от имени процесса.
Читайте также:  Вышла iOS 10 beta 2 для iPhone и iPad: что нового?

Время подсчитывается в единицах, равных 1/100 секунды, также известных как jiffies или тики. Количество тиков в секунду определяется переменной USER_HZ, и в системах x86 USER_HZ равен 100. Раньше это количество соответствовало количеству тиков планировщика в секунду, но с повышением частоты и появлением бестиковых ядер показатель стал полностью синтетическим.

Метрики блочного I/O

Метрики блочного ввода/вывода учитываются в подсистеме blkio. В разных файлах сохраняются разные метрики. Подробнее о них можно узнать из документации ядра. Ниже представлен краткий список наиболее часто используемых метрик:

Метрика Описание
Содержит количество 512-байтовых секторов, считанных и записанных процессами контрольной группы для каждого устройства. Операции чтения и записи учитываются в одном показателе.
_service_bytes Определяет количество байт, считанных и записанных контрольной группой. Имеет 4 счетчика для каждого устройства, поскольку для каждого устройства отдельно учитываются синхронные и асинхронные операции ввода/вывода, а также операции чтения и записи.
_serviced Число произведенных операций ввода/вывода, вне зависимости от их размера. Также имеет 4 счетчика для каждого устройства.
_queued Определяет количество запросов ввода/вывода, инициированных контрольной группой, которые на данный момент поставлены в очередь.

докер пауза

Эта команда используется для приостановки процессов в работающем контейнере.

Синтаксис

docker pause ContainerID

Параметры

  • ContainerID — это идентификатор контейнера, для которого необходимо приостановить процессы в контейнере.

Возвращаемое значение

ContainerID приостановленного контейнера.

пример

sudo docker pause 07b0b6f434fe

Приведенная выше команда приостановит процессы в работающем контейнере 07b0b6f434fe .

Выход

Когда мы запустим указанную выше команду, она выдаст следующий результат: