Home » Мониторинг » Zabbix » Мониторинг Docker с помощью Zabbix Agent 2

Мониторинг Docker с помощью Zabbix Agent 2

Несколько релизов назад у Zabbix был анонсирован новый агент, расширяющий свой функционал с помощью плагинов. Сегодня я рассмотрю, как с помощью Zabbix Agent 2 настроить мониторинг контейнеров Docker, используя базовый шаблон. Заодно и посмотрю, что из себя представляет новый агент.

Научитесь обеспечивать безопасность в непрерывном процессе разработки и продакшена на онлайн курсе "Внедрение и работа в DevSecOps." в OTUS. Курс не для новичков, для успешного поступления пройдите .

Введение

Ранее я уже делал заметку по поводу Zabbix Agent 2, где перечислил основные отличия от прошлого агента. Их там много, так что рекомендую ознакомиться, прежде чем продолжать. Со временем развитие будет получать именно 2-я версия, а старый агент будет просто поддерживаться в том виде, как он есть сейчас. Новый функционал в него уже не будут завозить.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Установка Zabbix Agent 2

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

На момент написания статьи, последней версией Zabbix была 5.4, так что показываю, как установить Zabbix Agent 2 именно этой версии.

Ubuntu 20:

# wget https://repo.zabbix.com/zabbix/5.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.4-1+ubuntu20.04_all.deb
# dpkg -i zabbix-release_5.4-1+ubuntu20.04_all.deb
# apt update
# apt install zabbix-agent2

Debian 10:

# wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian10_all.deb
# dpkg -i zabbix-release_5.4-1+debian10_all.deb
# apt update
# apt install zabbix-agent2

Centos 8 и другие rpm-based дистрибутивы:

# rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
# dnf clean all
# dnf install install zabbix-agent2

Делаем базовую настройку агента. Добавляем в конфиг /etc/zabbix/zabbix_agent2.conf информацию о сервере и имени хоста.

Server=10.20.1.1
ServerActive=10.20.1.1
Hostname=docker-host

Перезапускаем zabbix-agent2 и добавляем в автозагрузку.

# systemctl restart zabbix-agent2
# systemctl enable zabbix-agent2

Установка zabbix-agent2

Дополнительно нам нужно добавить пользователя zabbix, от имени которого работает агент, в группу docker, чтобы у него был доступ к docker.sock.

# usermod -aG docker zabbix

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

# setfacl --modify user:zabbix:rw /var/run/docker.sock

Теперь переходим на сервер мониторинга Zabbix. Дальнейшая настройка будет проходить там.

Настройка мониторинга Docker

Первым делом зайдём в консоль Zabbix сервера и убедимся, что он корректно может забирать данные о Docker с наблюдаемого хоста. Для этого воспользуемся утилитой zabbix_get.

# zabbix_get -s 10.20.50.7 -k docker.info

docker.info в zabbix

Если получите ошибку:

ZBX_NOTSUPPORTED: Cannot fetch data: Get http://1.28/info: dial unix /var/run/docker.sock: connect: permission denied.

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

Если всё в порядке с доступом, то переходите в web интерфейс сервера мониторинга. Нам нужно добавить к наблюдаемому хосту с Docker соответствующий шаблон. Называется он Docker by Zabbix agent 2.

Настройка мониторинга Docker

Если у вас его нет, как это было у меня, то скачайте свежую версию шаблона. Вам нужно выбрать файл template_app_docker.yaml и сохранить его исходный код в какой-то файл, чтобы потом импортировать на сервер Zabbix. Не забудьте указать расширение yaml, иначе импорт не заработает.

Импорт шаблона template_app_docker

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

Автообнаружение Docker контейнеров в Zabbix

После этого в элементах данных появятся контейнеры и связанные с ними айтемы. В Последних данных можно смотреть метрики по тэгу Application: Docker.

Просмотр статистики по Docker

В шаблоне присутствуют следующие триггеры:

  • Нет информации о статусе службы Docker.
  • Служба Docker не запущена.
  • Изменилась версия Docker.
  • В контейнере зафиксирована ошибка в статусе.
  • Контейнер остановлен с ошибкой в exitcode.

Так же в шаблоне есть следующие графики:

  • Количество контейнеров с различным статусом.
  • Размер дискового пространства, занимаемое различными сущностями (images, layers, conteiners, volumes).
  • Docker goroutines (не знаю, что это такое).
  • Количество Images.
  • Суммарное потребление оперативной памяти докером.
  • CPU, Memory usage, сетевая статистика отдельно по каждому контейнеру. Вот только я не понял, как вычисляется метрика по CPU. Она представлена в миллисекундах. Это вычисляемое значение, которое берется из докеровского json со статами, далее выделяется jsonpath $.cpu_stats.cpu_usage.total_usage, переводится в изменения в секунду и в завершении используется арифметический множитель 1.0E-9. Если кто-то знает, подскажите, что это за метрика. Почему ее так считают.

Заключение

Сколько бы Zabbix не хоронили, но он живее всех живых и развивается в правильном направлении. С его помощью нет никаких проблем в настройке мониторинга Docker, несмотря на то, что это динамически изменяемая среда. Все изменения отслеживаются и мониторинг настраивается автоматически. Участие оператора не требуется. Достаточно один раз все сделать. Причем допиливать что-то тоже нет необходимости. Всё работает из коробки с помощью штатного функционала.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом "Administrator Linux. Professional" в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по . Цены 2020 года.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

3 комментария

  1. Александр

    Вот мне тоже не понятно, как и зачем так, вычисляется значение CPU usage. Нужно в процентах, а тут что-то не понятное. Буду разбираться...

    • Так в кубернетисе считают расход CPU. Это сделано, чтобы было удобно лимиты выставлять. Подозреваю, что подобный подсчёт принят везде в контейнерах, поэтому и тут так. В целом, всё понятно. 1000 мс будут равны загрузке одного ядра процессора.

      • Александр

        А по docker stats выводит в %. Что-то я сначала не понял что 1000 мс это 100% на ядро. Как раз вот, после долгих мучений и вспоминания математики, пришла эта мысль в голову)
        Ну, думаю, попозже переведу просто это значение в %, чтобы было удобно смотреть корреляцию с системным показателем нагрузки на CPU.
        Спасибо вам за ваш труд.

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.