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

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

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

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Введение

Ранее я уже делал заметку по поводу 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 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, несмотря на то, что это динамически изменяемая среда. Все изменения отслеживаются и мониторинг настраивается автоматически. Участие оператора не требуется. Достаточно один раз все сделать. Причем допиливать что-то тоже нет необходимости. Всё работает из коробки с помощью штатного функционала.

Онлайн курс "SRE практики и инструменты"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом "SRE практики и инструменты" в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров. На курсе вы узнаете как:
  • Внедрить SRE практики в своей организации
  • Управлять надежностью, доступностью и эффективностью сервисов
  • Управлять изменениями
  • Осуществлять мониторинг
  • Реагировать на инциденты и производительность
  • Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .

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

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

Автор Zerox

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

11 комментариев

  1. Добрый день. В этом темплейте есть одна проблема - если контейнер пересоздается, то данные о старом стираются, это не всегда удобно. Я попытался исправить темплейт, чтобы они хранились в одном итеме, но из-за зависимостей он все равно создает новый итем с новым ID. Есть возможность складывать это все в одном итеме

    • Это скорее особенность докера, а не zabbix. По сути новый контейнер - новая сущность, поэтому такое поведение. Я сейчас глянул мельком шаблон мониторинга, но не увидел в нем, как работает автообнаружение. Похоже используется встроенный в сам агент ключ docker.containers.discovery.

  2. А если на хост с контейнерами поставить Zabbix Agent 2 в отдельный докер-контейнер, а сам Zabbix-сервер установить на другой хост из репозитория (без контейнера) - такая связка будет работать?

    • Да, будет. Тут главное, чтобы из контейнера Zabbix_agent имел доступ к тем данным, что он будет собирать.

  3. А есть возможность это на 4.2 организовать?

  4. В разделе
    Установка Zabbix Agent 2
    Centos 8 и другие rpm-based дистрибутивы два раза команда install
    # dnf install install zabbix-agent2

  5. Александр

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

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

      • Александр

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

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

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

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