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

Docker

Чтобы ускорить процедуру развёртывания и обновления, Zabbix предоставляет образы Docker для каждого компонента Zabbix в виде переносимых и самодостаточных контейнеров.

Компоненты Zabbix поставляются с поддержкой баз данных MySQL и PostgreSQL, веб-серверов Apache2 и Nginx. Эти образы разделены на несколько отдельных образов.

Начиная с версии 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

Компоненты Zabbix поставляются на основе образов Ubuntu, Alpine Linux и CentOS:

Образ Версия
alpine 3.16
ubuntu 22.04 (jammy)
centos 8

Все образы сконфигурированы на пересоздание в случае, если базовые образы были обновлены.

Исходные файлы Docker

Каждый может следить на изменениями в Docker файлах, используя официальный репозиторий Zabbix на github.com. Вы можете создавать ответвления от проекта или свои собственные образы на основе официальных Docker файлов.

Структура

Все компоненты Zabbix доступны в следующих Docker репозиториях:

Дополнительно имеется поддержка SNMP трапов. Поставляется как дополнительный репозиторий (zabbix/zabbix-snmptraps) только на основе Ubuntu Trusty. Его можно привязать к Zabbix серверу и Zabbix прокси.

Версии

Каждый репозиторий компонентов Zabbix содержит следующие тэги:

  • latest — последняя стабильная версия компонента Zabbix на основе образа Alpine Linux
  • alpine-latest — последняя стабильная версия компонента Zabbix на основе образа Alpine Linux
  • ubuntu-latest — последняя стабильная версия компонента Zabbix на основе образа Ubuntu
  • alpine-6.0-latest — последняя минорная версия компонента Zabbix 6.0 на основе образа Alpine Linux
  • ubuntu-6.0-latest — последняя минорная версия компонента Zabbix 6.0 на основе образа Ubuntu
  • alpine-6.0.* — различные минорные версии компонента Zabbix 6.0 на основе образа Alpine Linux, где * минорная версия компонента Zabbix
  • ubuntu-6.0.* — различные минорные версии компонента Zabbix 6.0 на основе образа Ubuntu, где * минорная версия компонента Zabbix

Начальная настройка

После загрузки образов запустите контейнеры, выполнив команду docker run с дополнительными аргументами для указания необходимых переменных окружения и/или точек монтирования. Ниже представлены некоторые примеры конфигурации.

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

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

Все компоненты Zabbix предусматривают наличие переменных окружения для управления конфигурацией. Эти переменные окружения перечислены в репозиториях каждого из компонентов. Переменные окружения являются параметрами из файлов конфигурации Zabbix, но с другим методом наименования. Например,ZBX_LOGSLOWQUERIES идентичен LogSlowQueries из файлов конфигурации Zabbix сервера и Zabbix прокси.

Некоторые параметры конфигурации недоступны для изменения. Например, PIDFile и LogType.

У некоторых компонентов есть специфические переменные окружения, отсутствующие в официальных файлах конфигурации Zabbix:

Переменная Компоненты Описание
DB_SERVER_HOST Сервер
Прокси
Веб-интерфейс
Переменная является IP адресом или DNS именем MySQL или PostgreSQL сервера.
По умолчанию, значение mysql-server или postgres-server для MySQL или PostgreSQL соответственно
DB_SERVER_PORT Сервер
Прокси
Веб-интерфейс
Переменная является портом MySQL или PostgreSQL сервера.
По умолчанию, значение «3306» или «5432» соответственно.
MYSQL_USER Сервер
Прокси
Веб-интерфейс
Имя пользователя базы данных MySQL.
По умолчанию, значение «zabbix».
MYSQL_PASSWORD Сервер
Прокси
Веб-интерфейс
Пароль пользователя базы данных MySQL.
По умолчанию, значение «zabbix».
MYSQL_DATABASE Сервер
Прокси
Веб-интерфейс
Имя базы данных Zabbix.
По умолчанию, значение «zabbix» для Zabbix сервера и «zabbix_proxy» для Zabbix прокси.
POSTGRES_USER Сервер
Веб-интерфейс
Имя пользователя базы данных PostgreSQL.
По умолчанию, значение «zabbix».
POSTGRES_PASSWORD Сервер
Веб-интерфейс
Пароль пользователя базы данных PostgreSQL.
По умолчанию, значение «zabbix».
POSTGRES_DB Сервер
Веб-интерфейс
Имя базы данных Zabbix.
По умолчанию, значение «zabbix».
PHP_TZ Веб-интерфейс Часовой пояс в PHP формате. Полный список поддерживаемых часовых поясов доступен на php.net.
По умолчанию, значение «Europe/Riga».
ZBX_SERVER_NAME Веб-интерфейс Видимое имя Zabbix инсталляции в правом верхнем углу веб-интерфейса.
По умолчанию, значение «Zabbix Docker»
ZBX_JAVAGATEWAY_ENABLE Сервер
Прокси
Включает обмен данными с Zabbix Java gateway для сбора проверок относящихся к Java.
По умолчанию, значение «false».
ZBX_ENABLE_SNMP_TRAPS Сервер
Прокси
Включение функции SNMP трапов. Переменной требуется экземпляр zabbix-snmptraps и разделяемый с Zabbix сервером или Zabbix прокси том /var/lib/zabbix/snmptraps.
Тома

Образы позволяют использовать некоторые точки монтирования. Данные точки монтирования имеют отличия и зависят от типа Zabbix компонента:

Том Описание
Zabbix агент
/etc/zabbix/zabbix_agentd.d Том позволяет включать *.conf файлы и расширять Zabbix агент, используя функционал UserParameter
/var/lib/zabbix/modules Том позволяет подгружать дополнительные модули и расширять Zabbix агент используя функционал загружаемых модулей
/var/lib/zabbix/enc Том используется для хранения файлов, связанных с TLS. Имена данных файлов указываются при помощи переменных окружения ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE и ZBX_TLSPSKFILE
Zabbix сервер
/usr/lib/zabbix/alertscripts Том используется для пользовательских скриптов оповещения. Яляется параметром AlertScriptsPath в zabbix_server.conf
/usr/lib/zabbix/externalscripts Том используется для внешних проверок. Является параметром ExternalScripts в zabbix_server.conf
/var/lib/zabbix/modules Том позволяет подгружать дополнительные модули и расширять Zabbix сервер используя функционал загружаемых модулей
/var/lib/zabbix/enc Том используется для хранения файлов, связанных с TLS. Имена данных файлов указываются при помощи переменных окружения ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE и ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs Том используется для размещения файлов клиентских SSL сертификатов для аутентификации клиентов. Является параметром SSLCertLocation в zabbix_server.conf
/var/lib/zabbix/ssl/keys Том используется для размещения файлов закрытых SSL ключей (private keys) для аутентификации клиентов. Является параметром SSLKeyLocation в zabbix_server.conf
/var/lib/zabbix/ssl/ssl_ca Том используется для размещения файлов центра сертификации (CA) для верификации SSL сертификатов сервера. Яляется параметром SSLCALocation в zabbix_server.conf
/var/lib/zabbix/snmptraps Том используется для размещения snmptraps.log файла. Этот том может быть использован совместно с контейнером zabbix-snmptraps и унаследован, используя Docker опцию volumes_from при создании нового экземпляра Zabbix сервера. Функцию обработки SNMP трапов можно включить, используя совместный том и переключив переменную окружения ZBX_ENABLE_SNMP_TRAPS в 'true'
/var/lib/zabbix/mibs Том позволяет добавлять новые MIB файлы. Не поддерживает подпапки, все MIB файлы должны быть помещены в /var/lib/zabbix/mibs
Zabbix прокси
/usr/lib/zabbix/externalscripts Том используется для внешних проверок. Является параметром ExternalScripts в zabbix_proxy.conf
/var/lib/zabbix/db_data/ Том позволяет хранить файлы базы данных на внешних устройствах. Поддерживается только для Zabbix proxy с базой SQLite3
/var/lib/zabbix/modules Том позволяет подгружать дополнительные модули и расширять Zabbix прокси, используя функционал загружаемых модулей
/var/lib/zabbix/enc Том используется для хранения файлов, связанных с TLS. Имена данных файлов указываются при помощи переменных окружения ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE и ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs Том используется для размещения файлов клиентских SSL сертификатов для аутентификации клиентов. Является параметром SSLCertLocation в zabbix_proxy.conf
/var/lib/zabbix/ssl/keys Том используется для размещения файлов закрытых SSL ключей (private keys) для аутентификации клиентов. Является параметром SSLKeyLocation в zabbix_proxy.conf
/var/lib/zabbix/ssl/ssl_ca Том используется для размещения файлов центра сертификации (CA) для верификации SSL сертификатов сервера. Является параметром SSLCALocation в zabbix_proxy.conf
/var/lib/zabbix/snmptraps Том используется для размещения snmptraps.log файла. Этот том может быть использован совместно с контейнером zabbix-snmptraps и унаследован, используя Docker опцию volumes_from при создании нового экземпляра Zabbix прокси. Функцию обработки SNMP трапов можно включить, используя совместный том и переключив переменную окружения ZBX_ENABLE_SNMP_TRAPS в «true»
/var/lib/zabbix/mibs Том позволяет добавлять новые MIB файлы. Не поддерживает подпапки, все MIB файлы должны быть помещены в /var/lib/zabbix/mibs
веб-интерфейс Zabbix на основе веб-сервера Apache2
/etc/ssl/apache2 Том позволяет активировать HTTPS для веб-интерфейса Zabbix. Том должен содержать два файла ssl.crt и ssl.key, подготовленные для SSL соединений Apache2
веб-интерфейс Zabbix на основе веб-сервера Nginx
/etc/ssl/nginx Том позволяет активировать HTTPS для веб-интерфейса Zabbix. Том должен содержать три файла ssl.crt, ssl.key и dhparam.pem, подготовленные для SSL соединений Nginx
Zabbix snmptraps
/var/lib/zabbix/snmptraps Том содержит имя файл журнала snmptraps.log с полученными SNMP трапами
/var/lib/zabbix/mibs Том позволяет добавлять новые MIB файлы. Не поддерживает подпапки, все MIB файлы должны быть помещены в /var/lib/zabbix/mibs

Для получения дополнительной информации обратитесь к официальным репозиториям Zabbix в Docker Hub.

Примеры

Пример 1

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

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

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

2. Запустите пустой экземпляр MySQL сервера

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 \
             --character-set-server=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password

3. Запустите экземпляр Zabbix Java gateway

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

4. Запустите экземпляр Zabbix сервера и слинкуйте этот экземпляр с уже созданным экземпляром MySQL сервера

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-6.0-latest

Экземпляр Zabbix сервера открывает порт 10051/TCP (Zabbix траппер) на узле.

5. Запустите экземпляр веб-интерфейса Zabbix и слинкуйте этот экземпляр с уже созданными экземплярами MySQL сервера и Zabbix сервера

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-6.0-latest

Экземпляр веб-интерфейса Zabbix открывает 80/TCP порт (HTTP) на узле.

Пример 2

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

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

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

2. Запустите пустой экземпляр PostgreSQL сервера

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 snmptraps

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-6.0-latest

Экземпляр Zabbix snmptrap открывает порт 162/UDP (SNMP трапы) на узле.

4. Запустите экземпляр Zabbix сервера и слинкуйте этот экземпляр с уже созданным экземпляром PostgreSQL сервера

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-6.0-latest

Экземпляр Zabbix сервера открывает порт 10051/TCP (Zabbix траппер) к узлу.

5. Запустите экземпляр веб-интерфейса Zabbix и слинкуйте этот экземпляр с уже созданными экземплярами PostgreSQL сервера и Zabbix сервера

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-6.0-latest

Экземпляр веб-интерфейса Zabbix открывает порт 443/TCP (HTTPS) на узле.
Папка /etc/ssl/nginx должна содержать сертификат с требуемым именем.

Пример 3

В этом примере продемонстрировано, как запустить Zabbix сервер с поддержкой базы данных MySQL, веб-интерфейсом Zabbix на основе веб-сервера Nginx и Zabbix Java gateway на Red Hat 8, используя podman.

1. Создайте новую капсулу (pod) с именем zabbix и откройте порты (веб-интерфейс, траппер Zabbix сервера):

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

2. (опционально) Запустите контейнер Zabbix агента в капсуле (pod) 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-60:latest

3. Создайте директорию ./mysql/ на узле и запустите Oracle MySQL сервер версии 8.0:

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=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password

4. Запустите контейнер Zabbix сервера:

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-60

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

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

6. Запустите контейнер веб-интерфейса Zabbix:

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-60

Капсула (pod) zabbix открывает порт 80/TCP (HTTP) на узле через порт 8080/TCP контейнера zabbix-web-mysql.

Docker Compose

Zabbix также поставляет файлы конфигурации для определения и запуска нескольких контейнеров с Zabbix компонентами в Docker. Данные файлы конфигурации доступны в официальном Zabbix docker репозитории на github.com: https://github.com/zabbix/zabbix-docker. Эти файлы конфигурации добавлены в качестве примера и перегружены. Например, в них содержится прокси с поддержкой MySQL и SQLite3.

Имеется несколько различных версий файлов конфигурации:

Имя файла Описание
docker-compose_v3_alpine_mysql_latest.yaml Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Alpine Linux с поддержкой базы данных MySQL.
docker-compose_v3_alpine_mysql_local.yaml Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Alpine Linux с поддержкой базы данных MySQL.
docker-compose_v3_alpine_pgsql_latest.yaml Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Alpine Linux с поддержкой базы данных PostgreSQL.
docker-compose_v3_alpine_pgsql_local.yaml Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Alpine Linux с поддержкой базы данных PostgreSQL.
docker-compose_v3_centos_mysql_latest.yaml Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на CentOS 8 с поддержкой базы данных MySQL.
docker-compose_v3_centos_mysql_local.yaml Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на CentOS 8 с поддержкой базы данных MySQL.
docker-compose_v3_centos_pgsql_latest.yaml Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на CentOS 8 с поддержкой базы данных PostgreSQL.
docker-compose_v3_centos_pgsql_local.yaml Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на CentOS 8 с поддержкой базы данных PostgreSQL.
docker-compose_v3_ubuntu_mysql_latest.yaml Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Ubuntu 20.04 с поддержкой базы данных MySQL.
docker-compose_v3_ubuntu_mysql_local.yaml Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Ubuntu 20.04 с поддержкой базы данных MySQL.
docker-compose_v3_ubuntu_pgsql_latest.yaml Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Ubuntu 20.04 с поддержкой базы данных PostgreSQL.
docker-compose_v3_ubuntu_pgsql_local.yaml Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Ubuntu 20.04 с поддержкой базы данных PostgreSQL.

Доступные Docker файлы конфигурации поддерживают версию 3 Docker Compose.

Хранилище

Файлы конфигурации Compose сконфигурированы для поддержки локального хранилища на узле. Docker Compose создаст директорию zbx_env в директории с файлом конфигурации compose, когда вы запустите компоненты Zabbix с его помощью. Директория будет содержать структуру, описанную в разделе Тома выше и директорию для хранения базы данных.

Также в файлах конфигурации compose имеются тома с доступом только на чтение для файлов /etc/localtime и /etc/timezone.

Файлы окружения

В той же директории с файлами конфигурации compose на github.com вы можете найти файлы с переменными окружения по умолчанию для каждого компонента из файлов конфигурации compose. Эти файлы окружения называются приблизительно так: .env_<тип компоненты>.

Примеры

Ниже указаны команды для Docker Compose V2. Если вы используете Docker Compose V1, замените docker compose -f строкой docker-compose -f

Пример 1

# git checkout 6.0
       # docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d

Эта команда загрузит последние образы Zabbix 6.0 для каждого из компонентов Zabbix и запустит их в detach режиме.

Не забудьте загрузить .env_<тип компонента> файлы с официального репозитория Zabbix на github.com с файлами конфигурации.

Пример 2

# git checkout 6.0
       # docker compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml up -d

Эта команда загрузит образ на основе Ubuntu 20.04 (focal), затем локально соберёт компоненты Zabbix 6.0 и запустит их в detach режиме.