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

 

Мониторинг

Запуск ПО в продакшене без мониторинга в чем-то похож на вождение с завязанными глазами: когда-нибудь точно врежешься. Традиционные решения для мониторинга покрывают две проблемы: сбор метрик хоста и мониторинг конкретного приложения. Но контейнеры Docker находятся по положению где-то между ними, это не хост и не приложение, а значит, оба эти способа неэффективны. Кроме того, контейнеры постоянно появляются и исчезают, следить за каждым обычным способом нельзя. То есть без специальных средств не обойтись.

Docker предоставляется со встроенными функциями мониторинга, позволяющими контролировать все важные показатели CPU, Mem, I/O и сеть. Причем предлагает для их считывания аж три способа: при помощи sysfs (расположены в /sys/fs/cgroup), команды stat и API:

$ cat /sys/fs/cgroup/cpuacct/docker/CONTAINER_ID/cpuacct.stat
$ docker stats CONTAINER_ID

Доступ к API также получить очень просто. Достаточно прочитать данные из сокета:

$ echo -e "GET /containers/[CONTAINER_ID]/stats HTTP/1.0\r\n" | nc -U /var/run/docker.sock

Кроме этого, часть stdout/stderr информации Docker выводит в файл журнала. В Ubuntu это /var/lib/docker.log.

Статистика работы контейнера
Статистика работы контейнера

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

Одно из самых популярных, cAdvisor представляет собой специальный демон, который собирает статистику об общем использовании ресурсов, сетевом трафике и установленных пределах и отображает информацию в графическом виде. Новый контейнер автоматически подхватывается cAdvisor, и по нему выводится временной ряд. В отдельной вкладке предоставляются данные по конкретному контейнеру. Поддерживает потоки событий — создание, удаление, аномальные события. По умолчанию данные на графиках в скользящем окне показываются только за одну минуту. Нет возможности посмотреть более долгосрочные тенденции и получить предупреждение о достижении лимита. Хотя, вероятно, для разработки этого вполне и достаточно. Для хранения долгосрочных метрик cAdvisor интегрируется с InfluxDB и планируется с Google BigQuery. Для интеграции с InfluxDB достаточно указать в строке запуска -storage_driver=influxdb.

cAdvisor реализован и как контейнер Docker, поэтому его получить проще простого (есть возможность запуска вне Docker):

$ docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 --detach=true --name=cadvisor google/cadvisor

Теперь, чтобы подключиться, достаточно набрать http://localhost:8080. Кроме ограничения в периоде выводимой информации, у cAdvisor есть еще один недостаток — он может контролировать только один хост Docker. Поэтому он не совсем подходит для использования в кластере из нескольких установок Docker.

Axibase Time-Series Database — решение, использующее метрики производительности, снятые cAdvisor (собственной доработанной версии), но умеющее их хранить, анализировать и визуализировать. Один экземпляр ATSD может собрать метрики нескольких хостов Docker и cAdvisor. Статистика отправляется по протоколу TCP, по умолчанию это локальный адрес, но удаленную систему можно указать при запуске с помощью параметров --atsd_storage_url и --atsd_storage_write_host. Также ATSD может собирать данные с демонов collectd, tcollector или Nmon, запущенных внутри контейнеров. Это позволит получать и анализировать в последующем еще большую информацию.

Среди open source решений следует вспомнить о системе мониторинга Prometheus, описанной в сентябрьском номере. Она полностью ориентирована на микросервисную архитектуру и поддерживает Docker из коробки.

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

Вывод статистики в cAdvisor
Вывод статистики в cAdvisor
 

Журналы

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

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Как работает Linux: от нажатия кнопки включения до рабочего стола

Лучший способ понять, как работает операционная система, — это проследить поэтапно ее загр…