Несколько релизов назад у Zabbix был анонсирован новый агент, расширяющий свой функционал с помощью плагинов. Сегодня я рассмотрю, как с помощью Zabbix Agent 2 настроить мониторинг контейнеров Docker, используя базовый шаблон. Заодно и посмотрю, что из себя представляет новый агент.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Введение
Ранее я уже делал заметку по поводу Zabbix Agent 2, где перечислил основные отличия от прошлого агента. Их там много, так что рекомендую ознакомиться, прежде чем продолжать. Со временем развитие будет получать именно 2-я версия, а старый агент будет просто поддерживаться в том виде, как он есть сейчас. Новый функционал в него уже не будут завозить.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Установка 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, от имени которого работает агент, в группу 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
Если получите ошибку:
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.
Если у вас его нет, как это было у меня, то скачайте свежую версию шаблона. Вам нужно выбрать файл template_app_docker.yaml и сохранить его исходный код в какой-то файл, чтобы потом импортировать на сервер Zabbix. Не забудьте указать расширение yaml, иначе импорт не заработает.
На этом собственно настройка мониторинга Docker завершена. Он уже заработал. В шаблоне есть правила автообнаружения образов и контейнеров, которые запускаются каждые 15 минут. Чтобы ускорить начало сбора данных, вы можете вручную их запустить.
После этого в элементах данных появятся контейнеры и связанные с ними айтемы. В Последних данных можно смотреть метрики по тэгу Application: 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.
Добрый день! Установил Zabbix Agent 2 на Docker LXC в Proxmox. Все вроде бы работает, но почему-то пропал доступ к LXC по SSH. Удаляю агента - доступ появляется. Не подскажете, в чем может быть причина? Спасибо!
Не знаю, ни разу с таким не сталкивался. Смотрите на службу sshd, возможно она не стартует. Либо с настройками файрвола что-то происходит.
а как можно победить проблему - если ставим заббикс агента докер версию, то он при проверке дискового пространства видит только свой смонтированный в докере 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
setfacl: command not found
Есть ли еще какой-нибудь способ без ребута и установки setfact?
Попробуйте через chown права поменять. Я сейчас уже не помню, почему использовалась именно setfacl.
systemctl restart zabbix-agent2.service помогло)
И удобнее сразу на Докер-сервере проверять это дело:
sudo -u zabbix zabbix_agent2 -t docker.info
Может кто докручивал мониторинг логов внутри контейнеров? Пытаюсь создать прототип чтобы он при дисковери брал ID контейнера и подставлял его в путь к логам( но никак не сростается цветочек(
Нужно как то так брать log[/var/lib/docker/containers/{#ID}/{#ID}-json.log,"\"log\":\"(.*)\",\"stream",,,skip,\1] но такой ключ можно использовать только с заббикс агентом а тогда не работает макрос ID ( всю голову уже сломал
контейнер перешел в статус 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.Не могу настроить монитоинг докера на 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 просто не подходит.
подскажите, по "zabbix_get -s xxx.xxx.xxx.xxx -k docker.info" данные отдаются, но если зайти в веб морду заббиска последние данные и по тэгу Application: Docker, то ничего нету. Прошло уже больше двух суток данные так и не появились. В чем может быть проблема?
Так трудно сказать. Но двое суток ждать не обязательно. Если время обновления айтема прошло, а данных нет, то какие-то проблемы.
Подскажите,пжлст, хоть в какую сторону копать почему данные в заббикс не прилетают?
Я не знаю, мне нечего заочно сказать. Если повторить по статье, то всё должно работать. Я писал на реальном примере.
Добрый день. Подскажите как правильно развернуть Zabbix в контейнере
Моя идея заключается в установке бд на хост, агент, веб и сервер в контейнере
Не понял, в чём конкретно вопрос. Есть официальный контейнер с агентом:
https://hub.docker.com/r/zabbix/zabbix-agent
Там же и примеры использования.
А можно для начинающего немного подробнее про импорт шаблона 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.
Как вы сделали для версии 5.0?
Добрый день! Если zabbix установлен из репозитория ubuntu (zabbix-server-pgsql/now 1:5.0.23-1+focal amd64), то где найти утилиту zabbix_get?
а всё, прошу прощения, нашёл. Пакет называется zabbix-get/focal 1:5.0.23-1+focal amd64
setfacl --modify user:zabbix:rw /var/run/docker.sock
альтернативная команда:
newgrp docker
Проще поднять агента в докере, и не выполнять никаких манипуляций с доступами.
Зачем плодить лишние сущности там, где они не нужны? Добавить пользователя zabbix в группу docker нет никаких проблем.
Добрый день. Подскажите пожалуйста, возможно вам встречалась информация по мониторингу docker контейнеров Zabbix'ом при работе в Docker Swarm? Поискал информацию на просторах, но по новой версии 5.4. про swarm ничего нет ни в документации, и в целом как-то тихо.
А что вы ожидаете от мониторинга именно Docker Swarm? Чем не устраивает мониторинг контейнеров?
Ну например контейнеры могут периодически самостоятельно переезжать с ноды на ноду, хотелось бы чтобы были инструменты мониторинга нод в сворме, с алертами типа "это сломалось тут, переехало сюда, всё работает ок (или не ок)". Или нода в сворме мониторится просто как самостоятельная единица? Возможно есть ещё какие-то особенности работы в сворме. Я пока только начинаю разбираться в докере и заббиксе... Спасибо за ваш бесценный труд!
Docker Swarm сейчас как-то вообще не в тренде. Авторы Zabbix уже давно обещают шаблон для мониторинга Kubernetes. Про swarm даже упоминаний не видел.
Ясно, спасибо! Да, не в тренде, но для своей ниши вполне рабочая штука, ещё поработает! Так сказать, кому кубер пока сложноват, а отказоустойчивость уже нужна)
Добрый день. В этом темплейте есть одна проблема - если контейнер пересоздается, то данные о старом стираются, это не всегда удобно. Я попытался исправить темплейт, чтобы они хранились в одном итеме, но из-за зависимостей он все равно создает новый итем с новым ID. Есть возможность складывать это все в одном итеме
Это скорее особенность докера, а не zabbix. По сути новый контейнер - новая сущность, поэтому такое поведение. Я сейчас глянул мельком шаблон мониторинга, но не увидел в нем, как работает автообнаружение. Похоже используется встроенный в сам агент ключ docker.containers.discovery.
А если на хост с контейнерами поставить Zabbix Agent 2 в отдельный докер-контейнер, а сам Zabbix-сервер установить на другой хост из репозитория (без контейнера) - такая связка будет работать?
Да, будет. Тут главное, чтобы из контейнера Zabbix_agent имел доступ к тем данным, что он будет собирать.
А есть возможность это на 4.2 организовать?
Думаю, да. Шаблон только от этой версии надо загрузить.
В разделе
Установка Zabbix Agent 2
Centos 8 и другие rpm-based дистрибутивы два раза команда install
# dnf install install zabbix-agent2
Спасибо, поправил.
Вот мне тоже не понятно, как и зачем так, вычисляется значение CPU usage. Нужно в процентах, а тут что-то не понятное. Буду разбираться...
Так в кубернетисе считают расход CPU. Это сделано, чтобы было удобно лимиты выставлять. Подозреваю, что подобный подсчёт принят везде в контейнерах, поэтому и тут так. В целом, всё понятно. 1000 мс будут равны загрузке одного ядра процессора.
А по docker stats выводит в %. Что-то я сначала не понял что 1000 мс это 100% на ядро. Как раз вот, после долгих мучений и вспоминания математики, пришла эта мысль в голову)
Ну, думаю, попозже переведу просто это значение в %, чтобы было удобно смотреть корреляцию с системным показателем нагрузки на CPU.
Спасибо вам за ваш труд.