5. Установка из контейнеров

Обзор

В этом разделе описывается, как развернуть Zabbix с помощью Docker или Docker Compose.

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

Docker (ручное развёртывание) позволяет достичь того же результата путём поэтапного развёртывания каждого компонента.

Начиная с версии Zabbix 6.0, во время установки необходимо создавать детерминированные триггеры. Если для MySQL/MariaDB включено ведение бинарного журнала, для этого требуются права суперпользователя или настройка переменной/параметра конфигурации log_bin_trust_function_creators = 1. Инструкции по установке переменной смотрите в Скриптах создания базы данных.

Обратите внимание, что при запуске из консоли переменная будет установлена только временно и будет удалена при перезапуске Docker. В этом случае оставьте службу SQL запущенной, остановите только службу zabbix-server, выполнив docker compose down zabbix-server, а затем docker compose up -d zabbix-server.

В качестве альтернативы вы можете установить эту переменную в файле конфигурации.

Предварительные требования

Прежде чем начать, убедитесь, что в вашей системе установлен Docker (версия 1.12.0 или более поздняя). Если это не так, следуйте руководству по установке Docker [en]. Для развёртывания с помощью Docker Compose также требуется Docker Compose (версия 2.24.0 или более поздняя).

Для работы некоторых компонентов Zabbix на хосте, где запущен Docker, необходимо открыть определённые порты (например, 10051/TCP для сервера Zabbix, 162/UDP для SNMP-трапов). Полный список портов, используемых компонентами Zabbix, смотрите в разделе Требования. Для сервера и агента Zabbix порт по умолчанию можно изменить, установив в соответствующем контейнере переменную окружения ZBX_LISTENPORT.

Доступные образы Docker

Zabbix предоставляет образ Docker для каждого компонента Zabbix, все они опубликованы на Docker Hub. Каждый образ используется для создания контейнера, выполняющего этот компонент.

Компонент Zabbix Образ Docker
Агент zabbix/zabbix-agent
Агент 2 zabbix/zabbix-agent2
Сервер (MySQL) zabbix/zabbix-server-mysql
Сервер (PostgreSQL) zabbix/zabbix-server-pgsql
Веб-интерфейс (Apache + MySQL) zabbix/zabbix-web-apache-mysql
Веб-интерфейс (Apache + PostgreSQL) zabbix/zabbix-web-apache-pgsql
Веб-интерфейс (Nginx + MySQL) zabbix/zabbix-web-nginx-mysql
Веб-интерфейс (Nginx + PostgreSQL) zabbix/zabbix-web-nginx-pgsql
Прокси (SQLite3) zabbix/zabbix-proxy-sqlite3
Прокси (MySQL) zabbix/zabbix-proxy-mysql
Java gateway zabbix/zabbix-java-gateway
Веб-сервис zabbix/zabbix-web-service
SNMP трапы zabbix/zabbix-snmptraps

Для использования SNMP трапов контейнер SNMP трапов должен использовать общий том с сервером Zabbix или контейнером прокси (см. как использовать этот образ [en] на Docker Hub и пример ниже).

Все образы компонентов Zabbix на Docker Hub основаны на последних мажорных версиях поддерживаемых операционных систем. Эти образы автоматически пересобираются при обновлении базовых образов ОС.

Теги образов

Каждый образ поддерживает теги для выбора базовой операционной системы и версии Zabbix:

zabbix/<образ>:<ос>-<версия>

Поддерживаемые значения <ос>:

  • alpine — Alpine Linux
  • ubuntu — Ubuntu
  • centos — CentOS Stream
  • ol — Oracle Linux
  • ltsc2022 — Windows 11 LTSC 2022 (Zabbix agent only)

Поддерживаемые значения <версия>:

  • latest — Последняя стабильная версия Zabbix на Alpine Linux
  • <os>-latest — Последняя стабильная версия Zabbix на выбранной ОС
  • <os>-trunk — Последняя (еженощная) сборка разработчиков на выбранной ОС
  • <os>-X.X-latest — Последний минорный релиз Zabbix конкретной мажорной версии Zabbix на выбранной ОС
  • <os>-X.X.* — Конкретный минорный релиз Zabbix на выбранной ОС

Примеры:

# Последний стабильный Zabbix прокси (SQLite3) на Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Последний стабильный Zabbix прокси (SQLite3) на Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Последняя (ночная) разрабатываемая сборка Zabbix сервера (MySQL) на Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Последний минорный релиз версии 7.0 Zabbix сервера (MySQL) на Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Версия 7.0.1 Zabbix сервера (MySQL) на Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1

Docker Compose

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

В официальном репозитории Dockerfile для Zabbix (https://github.com/zabbix/zabbix-docker) представлены готовые к использованию файлы Docker Compose и система конфигурации на основе .env-файлов, поддерживающая различные операционные системы, базы данных и конфигурацию компонентов Zabbix.

1. Клонируйте репозиторий, перейдите в него и переключитесь на версию 7.0:

git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
git checkout 7.0

2. (Необязательно) Настройте развёртывание с помощью переменных окружения. Для настройки по умолчанию этот шаг можно пропустить.

3. Разверните конфигурацию по умолчанию — Zabbix сервер, веб-интерфейс (работающий на Nginx) и внутреннюю базу данных (MySQL или PostgreSQL), каждый компонент которой будет работать в отдельном контейнере на Alpine Linux.

# С базой данных MySQL:
docker compose -f ./compose.yaml up -d

# С базой данных PostgreSQL:
docker compose -f ./compose_pgsql.yaml up -d

После запуска контейнеров (обычно в течение 1–3 минут) запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу http://localhost.

Используйте docker compose ps для проверки состояния контейнеров. Все контейнеры (за исключением контейнера zabbix-docker-server-db-init-1) должны иметь состояние Up. Если какие-либо показывают Exited, проверьте их журнал командой docker logs <имя-контейнера>.

Переменные окружения

И поведение Docker Compose, и конфигурацию компонентов Zabbix можно настроить с помощью переменных окружения.

Переменные уровня Compose (определённые в файле .env [en]) управляют тем, какие образы Docker, порты и диапазоны IP сетей используются. Можно использовать эти переменные непосредственно перед командой docker compose или отредактировать файл .env.

Например, следующая команда развёртывает законченную многоконтейнерную инсталляцию Zabbix, используя образы на базе Ubuntu (вместо умолчабельного Alpine Linux) и выставляя веб-интерфейс через Nginx на пользовательских портах HTTP (8282) и HTTPS (8443):

OS=ubuntu \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443 \
docker compose -f ./compose.yaml up -d

Переменные на уровне компонента (определённые в файлеenv_vars/.env_<компонент> [en] files) управляют конфигурацией компонента Zabbix. Отредактируйте соответствующий файл .env_<компонент> перед выполнением команды docker compose.

Например, можно настроить количество пассивных поллеров Zabbix сервера и параметры кэширования, а также сконфигурировать часовой пояс веб-интерфейса, отредактировав следующие переменные:

# env_vars/.env_srv
ZBX_STARTPOLLERS=20
ZBX_CACHESIZE=64M
ZBX_HISTORYCACHESIZE=32M

# env_vars/.env_web
PHP_TZ=Europe/Paris

Переменные окружения на уровне компонентов соответствуют параметрам конфигурации компонентов Zabbix, используя другой стиль именования (например, ZBX_STARTPOLLERS соответствует StartPollers). Некоторые переменные являются специфичными для Docker, а некоторые параметры конфигурации изменить нельзя (например, PIDFile и LogType). При использовании переменных окружения, пожалуйста, обратитесь к разделу Переменные окружения в описании каждого компонента образа Docker [en] на Docker Hub.

Тома

Docker Compose сохраняет постоянные данные в каталоге zbx_env/, созданном вместе с файлом Compose. Этот каталог сохраняет данные компонентов при перезапуске и обновлении контейнера.

Содержимое zbx_env/ предопределено для образа каждого компонента. Например:

Для получения более подробной информации о каждом томе смотрите раздел Allowed volumes [en] в описании каждого компонента образа Docker на Docker Hub.

Makefile

Репозиторий Zabbix Dockerfiles также предоставляет Makefile в качестве сокращения для распространённых задач Docker Compose. Вместо использования полной команды docker compose вы можете использовать более короткие команды make (запустите make help, чтобы увидеть доступные параметры):

# Развёртывание по умолчанию (Zabbix сервер, веб-интерфейс, MySQL, всё на Alpine Linux)
make up

# Пользовательское развёртывание (Zabbix сервер, веб-интерфейс с Nginx на пользовательских портах, PostgreSQL, всё на Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443

При остановке или удалении контейнеров всегда указывайте тот же тип базы данных, который был развёрнут (например, make down DB=pgsql).

По умолчанию команда make up запускает только минимальный набор служб (Zabbix сервер, веб-интерфейс и базу данных). Это позволяет сделать настройку максимально простой и избежать запуска компонентов, которые могут быть не нужны. Для включения дополнительных компонентов можно использовать следующие профили Compose [en]:

# Развёртывание по умолчанию + Zabbix агент, Java gateway, веб-сервис и SNMP трапы:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix прокси (MySQL и SQLite3):
make up COMPOSE_PROFILES=all

Docker (ручное развёртывание)

Используйте ручное развёртывание, если вам нужно развёртывать Zabbix поэтапно, запускать отдельные компоненты, интегрировать их с существующей средой или использовать альтернативную среду выполнения контейнеров, такую ​​как Podman.

Например, для развёртывания прокси-сервера Zabbix выполните следующую команду:

docker run --name zabbix-proxy-sqlite3 \
  -e ZBX_SERVER_HOST=192.0.2.1 \
  -e ZBX_PROXYMODE=0 \
  -e ZBX_HOSTNAME=zabbix-proxy-sqlite3 \
  -v zabbix-proxy-data:/var/lib/zabbix/db_data \
  --init \
  -d \
  zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest

Zabbix (7.0.0-7.0.2) не должен запускаться в контейнерах как процесс с PID1/init.

Эта команда:

  • Загружает образ Docker zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest.

  • Создаёт и запускает контейнер zabbix-proxy-sqlite3 на базе этого образа Docker (с флагами --init [en] и -d [en]).

  • Настраивает параметр Server прокси-сервера Zabbix посредством переменной окружения ZBX_SERVER_HOST. Этот параметр указывает IP-адрес Zabbix сервера, с которого прокси будет забирать данные конфигурации и на который он будет отсылать собранные данные. Обратите внимание, что остальные переменные, требуемые для работы прокси в активном режиме, используют значения по умолчанию и могут быть опущены.

Переменные окружения соответствуют параметрам конфигурации компонентов Zabbix, используя другой стиль именования (например, ZBX_SERVER_HOST соответствует Server). Некоторые переменные являются специфичными для Docker, а некоторые параметры конфигурации изменить нельзя (например, PIDFile и LogType). При использовании переменных окружения, пожалуйста, обратитесь к разделу Environment variables [en] в описании каждого компонента образа Docker на Docker Hub.

  • Подключает место хранения, управляемое Docker'ом (например, /var/lib/docker/volumes/zabbix-proxy-data/), к каталогу /var/lib/zabbix контейнера, чтобы данные Zabbix прокси хранились постоянно, даже если контейнер будет удалён.

Для получения более подробной информации о каждом томе смотрите раздел Allowed volumes [en] в описании каждого компонента образа Docker на Docker Hub.

После развёртывания контейнера Zabbix прокси вы можете добавить прокси в веб-интерфейсе вашего Zabbix и настроить узлы сети на мониторинг этим прокси.

Приведённые ниже примеры охватывают три дополнительных сценария развертывания:

  • Zabbix сервер (MySQL) с Java gateway
  • Zabbix сервер (PostgreSQL) с SNMP трапами
  • Zabbix сервер (MySQL) с Java gateway на RHEL 8

Для получения дополнительных примеров, пожалуйста, обратитесь к описанию каждого компонента образа Docker [en] на Docker Hub.

Развёртывание Zabbix сервера (MySQL) с Java gateway

В этом примере показано, как развернуть сервер Zabbix с бэкендом MySQL, Java gateway для мониторинга JMX и веб-интерфейс на основе Nginx.

1. Создайте выделенную сеть Docker, чтобы все контейнеры компонентов Zabbix могли взаимодействовать друг с другом по имени контейнера:

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

2. Запустите пустой контейнер сервера MySQL (замените zabbix_pwd и root_pwd на надёжные пароли):

docker run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d mysql:8.0-oracle \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin \
  --default-authentication-plugin=mysql_native_password

Если вы используете образ Docker для MySQL 8.4 или более поздней версии, замените --default-authentication-plugin=mysql_native_password на --authentication-policy=caching_sha2_password.

MySQL должен быть полностью проинициализирован до запуска контейнера Zabbix сервера на шаге 4, иначе схема Zabbix может загрузиться некорректно. Чтобы убедиться в готовности MySQL, выполните команду docker logs mysql-server и продолжайте только после того, как увидите сообщение /usr/sbin/mysqld: ready for connections.

3. Запустите контейнер Zabbix Java gateway:

docker run --name zabbix-java-gateway -t \
  --network=zabbix-net \
  --restart unless-stopped \
  -d zabbix/zabbix-java-gateway:alpine-7.0-latest

4. Запустите контейнер Zabbix сервера и свяжите его с контейнером сервера MySQL (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 2):

docker run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
  --network=zabbix-net \
  -p 10051:10051 \
  --restart unless-stopped \
  -d zabbix/zabbix-server-mysql:alpine-7.0-latest

После запуска контейнера Zabbix сервера дождитесь завершения инициализации схемы базы данных. Чтобы убедиться в готовности, выполните команду docker logs zabbix-server-mysql и продолжайте только тогда, когда больше не будет отображаться сообщение Creating 'zabbix' schema in MySQL.

5. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами Zabbix сервера и сервера MySQL (замените zabbix_pwd и root_pwd на те же пароли, что и на шаге 2):

docker run --name zabbix-web-nginx-mysql -t \
  -e ZBX_SERVER_HOST="zabbix-server-mysql" \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  --network=zabbix-net \
  -p 80:8080 \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest

После запуска контейнеров (обычно в течение 1–3 минут) запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу http://localhost.

Развёртывание Zabbix сервера (PostgreSQL) с SNMP трапами

В этом примере показано, как развернуть Zabbix сервер с бэкендом PostgreSQL, SNMP-трапы и веб-интерфейс на основе Nginx.

1. Создайте выделенную сеть Docker, чтобы все контейнеры компонентов Zabbix могли взаимодействовать друг с другом по имени контейнера:

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

2. Запустите пустой контейнер сервера PostgreSQL (замените zabbix_pwd на надёжный пароль):

docker run --name postgres-server -t \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d postgres:latest

3. Запустите контейнер для Zabbix SNMP-трапов:

docker run --name zabbix-snmptraps -t \
  -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
  -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
  --network=zabbix-net \
  -p 162:1162/udp \
  --restart unless-stopped \
  -d zabbix/zabbix-snmptraps:alpine-7.0-latest

4. Запустите контейнер Zabbix сервера, свяжите его с контейнером сервера PostgreSQL и контейнером SNMP-трапов (замените zabbix_pwd тем же паролем, который использовался на шаге 2):

docker run --name zabbix-server-pgsql -t \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  -e ZBX_ENABLE_SNMP_TRAPS="true" \
  --network=zabbix-net \
  -p 10051:10051 \
  --volumes-from zabbix-snmptraps \
  --restart unless-stopped \
  -d zabbix/zabbix-server-pgsql:alpine-7.0-latest

После запуска контейнера Zabbix сервера дождитесь завершения инициализации схемы базы данных. Чтобы убедиться в готовности, выполните команду docker logs zabbix-server-pgsql и продолжайте только тогда, когда больше не будет отображаться сообщение Creating 'zabbix' schema in PostgreSQL.

5. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами Zabbix сервера и сервера PostgreSQL (замените zabbix_pwd тем же паролем, который использовался на шаге 2):

docker run --name zabbix-web-nginx-pgsql -t \
  -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --network=zabbix-net \
  -p 443:8443 \
  -p 80:8080 \
  -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest

После запуска контейнеров (обычно в течение 1–3 минут) запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу http://localhost.

Развёртывание Zabbix сервера (MySQL) с Java gateway на RHEL 8–10

В этом примере показано, как развернуть сервер Zabbix с бэкендом MySQL, Java gateway для мониторинга JMX и веб-интерфейс на основе Nginx, всё это работает под управлением Red Hat Enterprise Linux 8, 9 или 10.

В Red Hat Enterprise Linux рекомендуемой средой выполнения контейнеров является Podman вместо Docker. Podman работает аналогично Docker, но не требует фоновой службы, работающей от имени root, что делает его более подходящим для сред Red Hat.

1. Создайте новый под с именем zabbix и откройте порты для веб-интерфейса Zabbix и траппера Zabbix сервера:

podman pod create --name zabbix -p 80:8080 -p 10051:10051

2. (Необязательно) Запустите контейнер агента Zabbix в расположении пода zabbix:

podman run --name zabbix-agent \
  -e ZBX_SERVER_HOST="127.0.0.1,localhost" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-agent-70:latest

3. Создайте каталог ./mysql/ на хосте RHEL:

mkdir -p ./mysql

4. Запустите пустой контейнер сервера MySQL (замените zabbix_pwd и root_pwd на надёжные пароли):

podman run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  -v ./mysql/:/var/lib/mysql/:Z \
  --restart=always \
  --pod=zabbix \
  -d mysql:8.0 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin \
  --default-authentication-plugin=mysql_native_password

Если вы используете образ Docker для MySQL 8.4 или более поздней версии, замените --default-authentication-plugin=mysql_native_password на --authentication-policy=caching_sha2_password.

MySQL должен быть полностью проинициализирован до запуска контейнера Zabbix сервера на шаге 6, иначе схема Zabbix может загрузиться некорректно. Чтобы убедиться в готовности MySQL, выполните команду podman logs mysql-server и продолжайте только после того, как увидите сообщение /usr/sbin/mysqld: ready for connections.

5. Запустите контейнер Zabbix Java gateway:

podman run --name zabbix-java-gateway -t \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-70

6. Запустите контейнер Zabbix сервера (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 4):

podman run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  -e ZBX_JAVAGATEWAY="127.0.0.1" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-70

7. Запустите контейнер веб-интерфейса Zabbix (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 4):

podman run --name zabbix-web-mysql -t \
  -e ZBX_SERVER_HOST="127.0.0.1" \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-70

Под zabbix пробрасывает порт 80/TCP (HTTP) на хост-машине на порт 8080/TCP контейнера zabbix-web-mysql.