Thank you for reading this post, don't forget to subscribe!
Установка Zabbix Agent 2
На хост, где крутятся Docker контейнеры, которые мы мониторим, надо установить Zabbix agent. Установка будет зависеть от системы хоста, но в общем случае это просто подключение нужного репозитория и установка через пакетный менеджер.
На момент написания статьи, последней версией Zabbix была 5.4, так что показываю, как установить Zabbix Agent 2 именно этой версии.
Ubuntu 20:
1 2 3 4 |
# 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:
1 2 3 4 |
# 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 дистрибутивы:
1 2 3 |
# 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 информацию о сервере и имени хоста.
1 2 3 |
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.
1 |
# usermod -aG docker zabbix |
После этого надо перезагрузить хост, чтобы изменения вступили в силу. Если этого делать не хочется или нет возможности, можно напрямую выдать права.
1 |
# 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.