Перейти к содержимому
Главная страница » Мониторинг Docker контейнеров

Мониторинг Docker контейнеров

Перевод статьи: Docker Container Monitoring With Zabbix

В этой статье блога я расскажу о мониторинге контейнеров Docker с помощью Zabbix. Мы будем использовать официальный шаблон Docker by Zabbix agent 2, чтобы сделать настройку максимально простой и быстрой. Ссылку для скачивания шаблона и инструкции по настройке можно найти на странице интеграции Zabbix. Если вам нужно наглядное руководство, я приглашаю вас посмотреть видео на эту тему.

Импорт официального шаблона Docker

Поскольку мы будем использовать официальный шаблон Docker by Zabbix agent 2, сначала нам нужно убедиться, что этот шаблон доступен в нашем экземпляре Zabbix. Шаблон доступен для Zabbix версий 5.0, 5.4 и 6.0. Если вы не можете найти этот шаблон в разделе «Конфигурация — Шаблоны», скорее всего, вы не импортировали его в свою среду после обновления Zabbix до одной из вышеупомянутых версий. Помните, что Zabbix не изменяет и не импортирует никакие шаблоны в процессе обновления, поэтому нам придется импортировать шаблон вручную. Если это так, просто скачайте шаблон с официальной страницы Zabbix git (или воспользуйтесь ссылкой во введении) и импортируйте его в свой экземпляр Zabbix с помощью кнопки «Импорт» в разделе «Конфигурация — Шаблоны».

Установка и настройка Zabbix agent 2

Прежде чем приступить к настройке хоста, нам нужно установить Zabbix agent 2 и настроить его в соответствии с рекомендациями по шаблону. Следуйте инструкциям в разделе загрузки на сайте Zabbix и установите пакет zabbix-agent2. При желании вы можете использовать любые другие способы развертывания агента (например, скомпилировать агент из исходных файлов)

Установка Zabbix agent2 из пакетов занимает всего несколько простых шагов:

Установите пакет репозитория Zabbix:

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm

Установите пакет Zabbix agent 2:

dnf install zabbix-agent2

Настройте параметр сервера, указав его адрес в Zabbix

vi /etc/zabbix/zabbix_agent2.conf
### Option: Server
# List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
# and '::/0' will allow any IPv4 or IPv6 address.
# '0.0.0.0/0' can be used to allow any IPv4 address.
# Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=

Server=192.168.50.49

Конфигурация Zabbix agent 2 для конкретного плагина

Zabbix-agent 2 предоставляет параметры конфигурации для конкретных плагинов. В основном это дополнительные параметры, связанные с конкретным плагином. Полный список параметров конфигурации для конкретных плагинов можно найти в документации Zabbix. В более новых версиях Zabbix-agent 2 параметры для конкретных плагинов определяются в отдельных файлах конфигурации плагинов, расположенных в /etc/zabbix/zabbix_agent2.d/plugins.d/, а в более старых версиях они определяются непосредственно в файле zabbix_agent2.conf.

Для плагина Docker агента Zabbix 2 необходимо указать расположение Unix-сокета демона Docker. Это можно сделать, указав следующий параметр плагина:

### Option: Plugins.Docker.Endpoint
# Docker API endpoint.
#
# Mandatory: no
# Default: unix:///var/run/docker.sock
# Plugins.Docker.Endpoint=unix:///var/run/docker.sock

Расположение сокета по умолчанию будет соответствовать вашей среде Docker — в этом случае вы можете оставить файл конфигурации без изменений.

После внесения необходимых изменений в файлы конфигурации Zabbix Agent 2 запустите и включите агент:

systemctl enable zabbix-agent2 --now

Проверьте, запущен ли Zabbix agent2:

tail -f /var/log/zabbix/zabbix_agent2.log

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

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

Вы можете добавить пользователя zabbix в группу Docker, выполнив следующую команду:

usermod -aG docker zabbix

Настройка хоста docker

После импорта шаблона нам нужно создать хост, который будет представлять наш экземпляр Docker. Присвойте хосту имя и назначьте его в группу хостов — я назначу его в группу хостов Linux-серверов. Назначьте хосту шаблон Docker с помощью Zabbix-agent 2. Поскольку шаблон использует Zabbix-agent 2 для сбора показателей, нам также нужно добавить интерфейс агента на этот хост. Адрес интерфейса должен указывать на компьютер, на котором запущены ваши контейнеры Docker. Завершите настройку хоста, нажав кнопку «Добавить».

Docker от Zabbix agent 2

Шаблон содержит набор стандартных элементов для общих показателей экземпляра Docker, таких как количество доступных образов, информация об архитектуре Docker, общее количество контейнеров и многое другое.

Кроме того, шаблон также собирает информацию о контейнерах и изображениях с помощью низкоуровневых правил обнаружения.

Как только Zabbix обнаружит ваши контейнеры и образы, эти низкоуровневые правила обнаружения будут использоваться для создания элементов, триггеров и графиков на основе прототипов для каждого из ваших контейнеров и образов. Таким образом, мы можем отслеживать показатели для контейнеров и образов, такие как память контейнера, сетевая информация, состояние контейнера и многое другое.

Проверка конфигурации хоста и шаблона

Чтобы убедиться, что агент и хост настроены правильно, мы можем использовать Zabbix get инструмент командной строки и попытаться опросить наш агент. Если вы не установили Zabbix get, сделайте это на сервере Zabbix или прокси-сервере Zabbix:

dnf install zabbix-get

Теперь мы можем использовать zabbix-get, чтобы убедиться, что наш агент может получать показатели, связанные с Docker. Выполните следующую команду:

zabbix_get -s docker-host -k docker.info

Используйте параметр -s для указания имени хоста или IP-адреса вашего агента. Параметр -k указывает ключ элемента, для которого мы хотим получить показатели, опрашивая агент с помощью Zabbix get.

zabbix_get -s 192.168.50.141 -k docker.info

{"Id":"SJYT:SATE:7XZE:7GEC:XFUD:KZO5:NYFI:L7M5:4RGO:P2KX:QJFD:TAVY","Containers":2,"ContainersRunning":2,"ContainersPaused":0,"ContainersStopped":0,"Images":2,"Driver":"overlay2","MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"KernelMemoryTCP":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":true,"IPv4Forwarding":true,"BridgeNfIptables":true,"BridgeNfIP6tables":true,"Debug":false,"NFd":39,"OomKillDisable":true,"NGoroutines":43,"LoggingDriver":"json-file","CgroupDriver":"cgroupfs","NEventsListener":0,"KernelVersion":"5.4.17-2136.300.7.el8uek.x86_64","OperatingSystem":"Oracle Linux Server 8.5","OSVersion":"8.5","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","NCPU":1,"MemTotal":1776848896,"DockerRootDir":"/var/lib/docker","Name":"localhost.localdomain","ExperimentalBuild":false,"ServerVersion":"20.10.14","ClusterStore":"","ClusterAdvertise":"","DefaultRuntime":"runc","LiveRestoreEnabled":false,"InitBinary":"docker-init","SecurityOptions":["name=seccomp,profile=default"],"Warnings":null}

Кроме того, мы можем использовать ключ низкоуровневого обнаружения — docker.containers.discovery[false] для проверки результата низкоуровневого обнаружения.

zabbix_get -s 192.168.50.141 -k docker.containers.discovery[false]

[{"{#ID}":"a1ad32f5ee680937806bba62a1aa37909a8a6663d8d3268db01edb1ac66a49e2","{#NAME}":"/apache-server"},{"{#ID}":"120d59f3c8b416aaeeba50378dee7ae1eb89cb7ffc6cc75afdfedb9bc8cae12e","{#NAME}":"/mysql-server"}]

Мы видим, что Zabbix обнаружит и начнёт отслеживать два контейнера — apache-server и mysql-server. Любое правило обнаружения или элемент низкого уровня можно проверить с помощью Zabbix get.

Шаблон Docker в действии

Теперь, когда мы настроили наш агент и хост, применили шаблон Docker и убедились, что всё работает, мы должны увидеть обнаруженные объекты во внешнем интерфейсе.

Кроме того, наши показатели тоже должны были начать поступать. Мы можем проверить раздел «Последние данные» и убедиться, что они действительно собираются.

Наконец, у нас есть несколько дополнительных опций для дальнейшего изменения шаблона и результатов низкоуровневого обнаружения. Если вы откроете раздел Макросы вашего хоста и выберете Наследуемые и хостовые макросы, вы заметите, что есть 4 макроса, унаследованных от шаблона Docker. Эти макросы отвечают за фильтрацию обнаруженных контейнеров и образов. Не стесняйтесь изменять эти значения, если вы хотите отфильтровать обнаружение этих объектов в соответствии с вашими требованиями.

Обратите внимание, что элемент обнаружения контейнера также имеет один параметр, который в шаблоне определяется как false:

  • docker.containers.discovery[false] — Обнаруживать только запущенные контейнеры
  • docker.containers.discovery[true] — Обнаружение всех контейнеров независимо от их состояния.

Вот и всё! Мы успешно импортировали шаблон, установили и настроили Zabbix-агент 2, создали хост и применили шаблон Docker. Наконец-то наш экземпляр Zabbix теперь отслеживает нашу среду Docker! Если у вас есть ещё вопросы или комментарии, не стесняйтесь оставлять их в разделе комментариев к этому посту.

Ссылки

A monitoring solution for Docker hosts, containers and containerized services

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

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