Как контролировать состояние ваших контейнеров с помощью бесплатных инструментов с открытым исходным кодом

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

В этой статье мы рассмотрим три наиболее известных и широко используемых инструмента мониторинга производительности Docker. Я сознательно выбрал только бесплатные инструменты с открытым исходным кодом. Есть еще много коммерческих - некоторые из них очень хорошие и популярные - с отличными возможностями анализа и приятным пользовательским интерфейсом.

Статистика Docker

Это утилита мониторинга, встроенная в Docker Engine и клиент. Он вызывается через dockerкомандную строку клиента с docker stats и не имеет другого пользовательского интерфейса, кроме того, что отображается непосредственно в вашей оболочке:

Столбцы по умолчанию содержат информацию о процессоре, памяти, сети, диске и количестве потоков, созданных контейнером. Вы можете быстро отфильтровать отображаемые контейнеры, передав их идентификатор или имя, и выбрать отображаемые столбцы с помощью параметра --format. Например:

docker stats — format “{{.Name}}\t{{.CPUPerc}}” nifi-dev mysql-dev

Вы можете называть docker stats метрикой бедняка. Однако, если ничего другого нет, он предоставляет множество деталей, которые помогут вам начать исследование проблемы.

cAdvisor

Container Advisor (cAdvisor) - это инструмент для мониторинга контейнеров от Google. Это один из старейших доступных инструментов, работающий за счет запуска демона, собирающего различные статистические данные. Что интересно, cAdvisor - это не инструмент только для мониторинга Docker. Он работает с любыми другими типами контейнеров. Однако он имеет встроенную поддержку Docker. Фактически это означает, что вы можете запускать cAdvisor (статический двоичный файл Go) как отдельную программу. Конечно, для простоты использования он также представлен в виде образа Docker. Для образа Docker cAdvisor необходимо смонтировать несколько томов, чтобы у него был надлежащий доступ к базовому модулю Docker Engine и показателям ОС, как показано ниже:

После запуска cAdvisor может быть доступен либо через его API на основе REST, либо через графический пользовательский интерфейс, доступный по адресу http: // localhost: 8080 (в соответствии с параметром
-p, который вы указали при создании экземпляра контейнера. ). Вот краткий обзор пользовательского интерфейса, предоставляемого cAdvisor:

Графический интерфейс пользователя cAdvisor приятен и богат информацией, представленной в различных форматах, например числами, датчиками и диаграммами.

Как упоминалось выше, cAdvisor предназначен не только для мониторинга Docker. Поэтому, когда вы открываете его главную страницу, вас приветствует иерархия ресурсов или подконтейнеров - благодаря lmctfy Google, одним из которых является ваш Docker Engine. Чтобы изучить статистику ваших контейнеров Docker, выберите ссылку /docker или ссылку Docker Containers в верхней части страницы. Затем вы можете выбрать именно тот контейнер, который вас интересует, чтобы получить дополнительную информацию и показатели.

Прометей

Два вышеупомянутых инструмента для получения метрик в реальном времени отлично работают, когда у вас есть один Docker Engine для мониторинга. Однако для более крупной инфраструктуры вам необходимо решение, способное получать метрики от нескольких модулей Docker, позволяющее генерировать индивидуальную или консолидированную статистику.

Вот тут-то и появляется Прометей:

Вот официальный обзор:

Prometheus - это набор инструментов для мониторинга и оповещения с открытым исходным кодом, созданный еще в 2012 году. Prometheus хорошо работает для записи любых чисто числовых временных рядов. Он подходит как для машинно-ориентированного мониторинга, так и для мониторинга высокодинамичных сервис-ориентированных архитектур. В мире микросервисов его поддержка многомерного сбора данных и запросов - это особая сила.

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

Экспорт показателей вашего Docker Engine в реальном времени в Prometheus прост, поскольку сам демон Docker способен экспортировать показатели в том формате, в котором их ожидает Prometheus. В качестве альтернативы вы можете воспользоваться контейнером cAdvisor, который мы развернули ранее, если Prometheus получит метрики. вместо этого в cAdvisor. Каждый подход создает уникальный набор показателей (с небольшим перекрытием), поэтому я предлагаю вам поэкспериментировать с обоими, чтобы увидеть, какая из них соответствует вашим потребностям.

Давайте теперь рассмотрим оба варианта.

Экспорт метрик через демон Docker

Ваш Docker Engine не настроен для экспорта показателей, но вы можете быстро включить его, добавив дополнительную строку в его daemon.json конфигурацию:

{
  "metrics-addr" : "0.0.0.0:9323",
  "experimental" : true
}

Примечание: имейте в виду, что в зависимости от того, когда вы будете читать эту статью, вы можете пропустить “experimental”: true. Также примите во внимание, что 0.0.0.0 означает, что метрики будут доступны для любого хоста. Вы также можете попробовать 127.0.0.1, если хотите разрешить только свой собственный хост.

Экспорт показателей через cAdvisor

Для того, чтобы cAdvisor мог экспортировать свои метрики, не требуется специальной конфигурации, поскольку она настраивается и включается по умолчанию при запуске образа cAdvisor Docker. Если вы запустили свой контейнер cAdvisor с помощью команды docker run, показанной выше, метрики будут доступны через порт 8080.

Запуск и подключение Прометея

На этом этапе мы создадим экземпляр образа Prometheus Docker и подключим его к экспортированным метрикам демона Docker и cAdvisor:

Прежде чем запускать Prometheus, давайте взглянем на рисунок выше. Как видите, Prometheus извлекает данные из Docker Engine. Это не Docker Engine, который продвигает показатели. Следовательно, Prometheus необходимо правильно настроить, чтобы он знал, откуда брать данные. Такая конфигурация осуществляется через prometheus.yml файл, который мы определяем следующим образом:

Примечание. Когда Prometheus настроен с использованием указанной выше конфигурации YAML, он попытается связаться с хостом, на котором запущен Docker Engine, для связи с демоном Docker, обслуживающим метрики. Имя хоста, которое вы должны использовать, зависит от вашей операционной системы. В примере файла, который используется здесь, я использую имя хоста, работающее на Mac, это docker.for.mac.host.internal. Если у вас Windows или Linux, вы можете заменить его IP-адресом вашего хоста.

Итак, пора запустить Prometheus в Docker. Для этой быстрой демонстрации мы будем использовать один и тот же базовый модуль Docker Engine, экспортирующий метрики параллельно через cAdvisor и демон Docker. Создайте prometheus.yml файл, используя приведенное выше содержимое, измененное для вашей операционной системы, и выполните:

Через несколько секунд вы сможете получить доступ к веб-интерфейсу Prometheus по адресу http: // localhost: 9090. Страница по умолчанию ожидает, что вы определите запрос для выполнения, чтобы вы могли видеть свои текущие метрики. Вот пример:

Веб-интерфейс Prometheus предоставляет несколько вариантов настройки поиска, например:

  1. Определите свой запрос для фильтрации данных по. Prometheus поддерживает богатый язык запросов, позволяющий видеть именно те данные, которые вам нужны.
  2. Все категории собранных показателей доступны для быстрого выбора из этого раскрывающегося списка.
  3. Вы можете просматривать результаты в виде графика или в виде таблицы.
  4. Определите период времени, за который отображаются показатели.

Теперь у вас настроен Prometheus и он получает данные из двух разных источников данных (хотя и из одного и того же Docker Engine). Расширяя используемый файл конфигурации, вы можете определить все дополнительные источники данных и контролировать весь свой парк Docker Engine. Если вы хотите создавать более сложные графики, чем то, что Prometheus предоставляет из коробки, Grafana прекрасно интегрируется с Prometheus и предоставляет множество дополнительных опций визуализации.

Заключение

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

Встроенный docker stats служит отправной точкой для быстрого знакомства с вашим Docker Engine. cAdvisor можно легко интегрировать в вашу среду, предоставляя веб-интерфейс с несколькими различными диаграммами и датчиками. Наконец, если вы хотите отслеживать несколько модулей Docker, Prometheus предоставляет мощную инфраструктуру для сбора и визуализации метрик для большого количества источников данных.

Спасибо, что прочитали эту статью. Надеюсь увидеть вас в следующем.