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

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

Углубленный онлайн-курс по MikroTik

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

Введение

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

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

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

Автор Zerox

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

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

  1. Добрый день! Установил Zabbix Agent 2 на Docker LXC в Proxmox. Все вроде бы работает, но почему-то пропал доступ к LXC по SSH. Удаляю агента - доступ появляется. Не подскажете, в чем может быть причина? Спасибо!

    • Не знаю, ни разу с таким не сталкивался. Смотрите на службу sshd, возможно она не стартует. Либо с настройками файрвола что-то происходит.

  2. а как можно победить проблему - если ставим заббикс агента докер версию, то он при проверке дискового пространства видит только свой смонтированный в докере root ?
    в хосте смонтировано несколько дисков, но в докере естественно их смонтированных нет ....

    • Нужно с хоста пробросить соответствующие устройства в контейнер или запустить его как привилегированный. Примерно так:
      # docker run --name some-zabbix-agent --link some-zabbix-server:zabbix-server -v /dev/sdc:/dev/sdc --init -d zabbix/zabbix-agent:latest
      # docker run --name some-zabbix-agent --link some-zabbix-server:zabbix-server --privileged --init -d zabbix/zabbix-agent:latest

  3. setfacl: command not found
    Есть ли еще какой-нибудь способ без ребута и установки setfact?

  4. Может кто докручивал мониторинг логов внутри контейнеров? Пытаюсь создать прототип чтобы он при дисковери брал ID контейнера и подставлял его в путь к логам( но никак не сростается цветочек(
    Нужно как то так брать log[/var/lib/docker/containers/{#ID}/{#ID}-json.log,"\"log\":\"(.*)\",\"stream",,,skip,\1] но такой ключ можно использовать только с заббикс агентом а тогда не работает макрос ID ( всю голову уже сломал

  5. Аноним

    контейнер перешел в статус exited (0) и никакого сообщения не прилетело. Как это можно мониторить?

    • В шаблоне есть правило автообнаружения: Containers discovery В нём есть прототип триггера: Container {#NAME}: Container has been stopped with error code С условием: /Docker by Zabbix agent 2/docker.container_info.state.exitcode["{#NAME}"])>0 То есть проблемой считается любой код выхода больше 0. Если вы хотите и на нулевой код реакцию, то измените условие с >0 на >=0. Тогда триггер будет срабатывать и на корректное завершение работы контейнера с кодом 0.

  6. Дмитрий

    Не могу настроить монитоинг докера на Windows 11, zabbix 6.2 стоит на виртуалке которую скачал с официального сайта
    После установки забикс агента zabbix_agent2-6.2.8-windows-amd64-openssl.msi в windows пользователя zabbix не появилось не кому давать права на группу докер, а группа докер есть
    На сервере забикса конект с агентом есть, но метрики по докеру никакие не идут
    если на сервере заббикса написать
    zabbix_get -s 10.20.50.7 -k docker.info
    пишет
    Unknown metric docker.info

    • Я на Windows этот шаблон не проверял. Подозреваю, что он под Linux написан и под Windows просто не подходит.

  7. Дмитрий

    подскажите, по "zabbix_get -s xxx.xxx.xxx.xxx -k docker.info" данные отдаются, но если зайти в веб морду заббиска последние данные и по тэгу Application: Docker, то ничего нету. Прошло уже больше двух суток данные так и не появились. В чем может быть проблема?

    • Так трудно сказать. Но двое суток ждать не обязательно. Если время обновления айтема прошло, а данных нет, то какие-то проблемы.

      • Дмитрий

        Подскажите,пжлст, хоть в какую сторону копать почему данные в заббикс не прилетают?

        • Я не знаю, мне нечего заочно сказать. Если повторить по статье, то всё должно работать. Я писал на реальном примере.

  8. Александр

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

  9. Игорь Б.

    А можно для начинающего немного подробнее про импорт шаблона Docker by Zabbix agent 2?
    При переходе по приведённой ссылке попадаю на страницу, где есть указанный файл template_app_docker.yaml. Но при этом читаю:
    Docker by Zabbix agent 2
    Overview
    For Zabbix version: 6.2 and higher

    А если мне нужно для версии 5.0, где его искать?

    • Игорь Б.

      Разобрался: нашёл, скопировал, импортировал, работает. Только поправка - для импорта нужно расширение xml, а не yaml.

  10. Игорь Б.

    Добрый день! Если zabbix установлен из репозитория ubuntu (zabbix-server-pgsql/now 1:5.0.23-1+focal amd64), то где найти утилиту zabbix_get?

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

    альтернативная команда:

    newgrp docker

  12. Проще поднять агента в докере, и не выполнять никаких манипуляций с доступами.

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

  13. Добрый день. Подскажите пожалуйста, возможно вам встречалась информация по мониторингу docker контейнеров Zabbix'ом при работе в Docker Swarm? Поискал информацию на просторах, но по новой версии 5.4. про swarm ничего нет ни в документации, и в целом как-то тихо.

    • А что вы ожидаете от мониторинга именно Docker Swarm? Чем не устраивает мониторинг контейнеров?

      • Ну например контейнеры могут периодически самостоятельно переезжать с ноды на ноду, хотелось бы чтобы были инструменты мониторинга нод в сворме, с алертами типа "это сломалось тут, переехало сюда, всё работает ок (или не ок)". Или нода в сворме мониторится просто как самостоятельная единица? Возможно есть ещё какие-то особенности работы в сворме. Я пока только начинаю разбираться в докере и заббиксе... Спасибо за ваш бесценный труд!

        • Docker Swarm сейчас как-то вообще не в тренде. Авторы Zabbix уже давно обещают шаблон для мониторинга Kubernetes. Про swarm даже упоминаний не видел.

          • Ясно, спасибо! Да, не в тренде, но для своей ниши вполне рабочая штука, ещё поработает! Так сказать, кому кубер пока сложноват, а отказоустойчивость уже нужна)

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

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

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

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

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

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

  18. Александр

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

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

      • Александр

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar