Zabbix это бесплатный и надежный инструмент корпоративного уровня с открытым исходным кодом, используемый для мониторинга и анализа производительности компонентов. Zabbix предлагает мониторинг сетей в режиме реального времени, выявляет неисправности, как только они возникают, и отправляет оповещения команде реагирования. Это помогает обеспечить непрерывность бизнеса. Zabbix имеет ядро, основанное на языке C с фронтендом Java и PHP.
Архитектура Zabbix состоит из Zabbix сервера и клиентов. Сервер обычно взаимодействует с нативными клиентами, известными как Zabbix агенты. Агентом может быть система Linux, Windows или NIX. Zabbix агент — это клиентское программное обеспечение, установленное на клиентской машине для сбора журналов мониторинга и отправки их на сервер.
Ниже приведена иллюстрация архитектуры Zabbix.
Последний релиз, Zabbix 6.0 LTS, имеет множество удивительных функций, которые включают в себя:
- Машинное обучение для мониторинга базовых показателей с расширенным обнаружением аномалий.
- Добавлены улучшения безопасности с политикой сложности паролей для пользовательского интерфейса Zabbix и журналом аудита для всех операций пользователей и API.
- Высокая производительность, доступность и масштабируемость – Zabbix 6.0 LTS имеет прокси для обеспечения автоматической балансировки нагрузки и HA, нативную настройку HA для Zabbix Server, улучшения производительности API и масштабируемое хранилище истории.
- Корреляция событий и корпоративная консоль аварийной сигнализации — она имеет возможность выполнять фильтрацию, дедупликацию и агрегацию событий с помощью правил предварительной обработки событий, возможность вручную скрывать и приостанавливать проблемы на определенный период времени, а также представление проблем, оптимизированное для более быстрого решения проблем и совместной работы.
- Мониторинг бизнес-сервисов (BSM) с поддержкой оповещений об изменениях статуса сервиса, мультитенантность для сервисов, анализ влияния, импорт/экспорт для дерева сервисов, возможность масштабирования до 100 КБ бизнес-сервисов и т. д.
- Расширенная визуализация – включает в себя многоуровневые графики, аннотации графиков, расширенные виджеты состояния узлов сети, виджеты событий с течением времени, географические карты и т.д.
Теперь давайте углубимся в суть и посмотрим, как мы можем запустить Zabbix Server 6.0 LTS в Docker Containers.
Шаг 1 – Установите Docker Runtime в систему
Для этого руководства нам нужно установить Docker Engine. Если он у вас уже установлен, то вы можете пропустить этот шаг. В противном случае установите Docker Engine с помощью приведенных ниже команд, которые лучше всего подходят для вашей системы.
Самый быстрый способ установить docker — использовать следующие команды:
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh
В качестве альтернативы можно использовать следующие методы:
В Debian:
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
В Ubuntu:
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
На RHEL/CentOS 8/Rocky Linux 8/Alma Linux 8:
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io
После установки Docker необходимо проверить установку с помощью команды:
$ docker --version
Docker version 24.0.7, build afdd53b
Запустите и включите службу Docker.
sudo systemctl enable --now docker
Добавьте системного пользователя в группу docker.
sudo usermod -aG docker $USER
newgrp docker
В macOS:
brew cask install docker
Шаг 2 – Создайте постоянные тома данных Zabbix
Для того, чтобы данные Zabbix сохранялись, нам нужно создать тома для данных. Для Zabbix нам понадобятся следующие тома:
sudo mkdir /zabbix-data
sudo mkdir /zabbix-data/alertscripts
sudo mkdir /zabbix-data/externalscripts
sudo mkdir /zabbix-data/export
sudo mkdir /zabbix-data/modules
sudo mkdir /zabbix-data/enc
sudo mkdir /zabbix-data/ssh_keys
sudo mkdir /zabbix-data/mibs
sudo mkdir /zabbix-data/snmptraps
sudo mkdir -p /zabbix-nginx/nginx
sudo mkdir /zabbix-nginx/modules
sudo mkdir /zabbix-mysql
Установите правильные разрешения:
sudo chmod 777 -R /zabbix-data/
sudo chmod 777 -R /zabbix-nginx/
sudo chmod 777 /zabbix-mysql/
В системах на базе Hel отключите SELinux или установите его в разрешительный режим, как показано ниже:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Шаг 3 – Запустите Zabbix Server 6.0 LTS в контейнерах Docker
В этом руководстве мы будем запускать Zabbix с базой данных MySQL, хотя можно запустить и PostgreSQL.
У нас будут следующие контейнеры:
- Сервер MySQL
- Zabbix сервер – с поддержкой баз данных MySQL
- Веб-интерфейс Zabbix – основан на веб-сервере Nginx с поддержкой базы данных MySQL
- Zabbix прокси – с поддержкой базы данных MySQL
- Zabbix Java Gateway
Используя docker, вы можете просто запустить контейнеры, как показано ниже:
Начните с создания выделенной сети для всех компонентов Zabbix:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
Подтвердить, что создание прошло успешно
$ docker network list
NETWORK ID NAME DRIVER SCOPE
652e3aadefbc bridge bridge local
6854c55d5ecb host host local
7460cfbf8c6c none null local
0f1961d58b8e zabbix-net bridge local
- Контейнер сервера MYSQL
Теперь создадим контейнер базы данных MySQL для Zabbix:
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbixdb" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="Passw0rd" \
-e MYSQL_ROOT_PASSWORD="StrongPassword" \
--network=zabbix-net \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
- Zabbix Java шлюз
Следующим контейнером, который будет развернут, будет 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
- Zabbix сервер
Разверните Zabbix сервер с поддержкой базы данных MySQL и свяжите его с созданным экземпляром MySQL. Не забудьте подставить правильные данные:
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbixdb" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="Passw0rd" \
-e MYSQL_ROOT_PASSWORD="StrongPassword" \
-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
Создайте веб-интерфейс Zabbix и свяжите его с созданным Zabbix сервером и MySQL.
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbixdb" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="Passw0rd" \
-e MYSQL_ROOT_PASSWORD="StrongPassword" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
Проверьте, запущены ли контейнеры:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
81ce9d2dc99a mysql:8.0 "docker-entrypoint.s…" 18 seconds ago Up 17 seconds 3306/tcp mysql-server
070f11ee0d29 zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest "docker-entrypoint.sh" 7 minutes ago Up 7 minutes 8443/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp zabbix-web-nginx-mysql
fb53558cb096 zabbix/zabbix-server-mysql:alpine-6.0-latest "/sbin/tini -- /usr/…" 7 minutes ago Up About a minute 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-server-mysql
ba2f317cb29a zabbix/zabbix-java-gateway:alpine-6.0-latest "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 10052/tcp zabbix-java-gateway
Эта служба будет доступна на хост-машине через порт 80/TCP. Теперь вы можете получить доступ к веб-интерфейсу Zabbix через порт 80.
Запустите Zabbix Server 6.0 LTS с помощью Docker Compose.
Установите Docker compose в своей системе с помощью команды:
### CentOS / RHEL ### sudo yum -y install curl wget
### Debian / Ubuntu ###
sudo apt update
sudo apt install -y curl wget
### Fedora ###
sudo dnf -y install curl wget
Скачайте Docker Compose в Linux.
curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -
Сделайте двоичный файл исполняемым.
chmod +x docker-compose-linux-x86_64
Переместите файл в папку PATH.
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
Проверьте установку.
$ docker-compose version||docker compose version
Docker Compose version v2.21.0
Создайте файл docker-compose для контейнеров:
vim docker-compose.yml
Файл будет содержать следующие строки:
version: '3.5'
services:
mysql-server:
image: mysql:8.0
networks:
- zbx_net
command:
- mysqld
- --character-set-server=utf8
- --collation-server=utf8_bin
- --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_USER=zabbix
- MYSQL_DATABASE=zabbixdb
- MYSQL_PASSWORD=PasswOrd
- MYSQL_ROOT_PASSWORD=StrongPassword
- ZBX_JAVAGATEWAY=zabbix-java-gateway
volumes:
- /zabbix-mysql:/var/lib/mysql:rw
zabbix-server-mysql:
image: zabbix/zabbix-server-mysql:alpine-latest
networks:
- zbx_net
ports:
- 10051:10051
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /zabbix-data/alertscripts:/usr/lib/zabbix/alertscripts:ro
- /zabbix-data/externalscripts:/usr/lib/zabbix/externalscripts:ro
- /zabbix-data/export:/var/lib/zabbix/export:rw
- /zabbix-data/modules:/var/lib/zabbix/modules:ro
- /zabbix-data/enc:/var/lib/zabbix/enc:ro
- /zabbix-data/ssh_keys:/var/lib/zabbix/ssh_keys:ro
- /zabbix-data/mibs:/var/lib/zabbix/mibs:ro
- /zabbix-data/snmptraps:/var/lib/zabbix/snmptraps:rw
environment:
- DB_SERVER_HOST=mysql-server
- MYSQL_DATABASE=zabbixdb
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=PasswOrd
- MYSQL_ROOT_PASSWORD=StrongPassword
- ZBX_JAVAGATEWAY=zabbix-java-gateway
depends_on:
- mysql-server
zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
networks:
- zbx_net
ports: - 80:8080
- 443:8443
volumes: - /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /zabbix-nginx/nginx:/etc/ssl/nginx:ro
- /zabbix-nginx/modules/:/usr/share/zabbix/modules/:ro
environment: - ZBX_SERVER_HOST=zabbix-server-mysql
- DB_SERVER_HOST=mysql-server
- MYSQL_DATABASE=zabbixdb
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=PasswOrd
- MYSQL_ROOT_PASSWORD=StrongPassword
depends_on: - mysql-server
- zabbix-server-mysql
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:alpine-6.0-latest
networks: - zbx_net
ports: 10052:10052
networks:
zbx_net:
driver: bridge
Удалите текущие контейнеры:
for i in mysql-server zabbix-java-gateway zabbix-server-mysql zabbix-web-nginx-mysql; do
docker rm -f $i
done
Запустите контейнеры:
docker-compose up -d
Пример выходных данных выполнения:
[+] Running 1/1
⠿ zabbix-server-mysql Pulled 1.3s
[+] Running 5/5
⠿ Network rocky_zbx_net Created 0.1s
⠿ Container rocky-zabbix-java-gateway-1 Started 0.6s
⠿ Container rocky-mysql-server-1 Started 0.5s
⠿ Container rocky-zabbix-server-mysql-1 Started 1.1s
⠿ Container rocky-zabbix-web-nginx-mysql-1 Started 1.4s
Проверьте, запущены ли контейнеры:
$ docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
rocky-mysql-server-1 "docker-entrypoint.s…" mysql-server running 33060/tcp
rocky-zabbix-java-gateway-1 "docker-entrypoint.s…" zabbix-java-gateway running 0.0.0.0:10052->10052/tcp, :::10052->10052/tcp
rocky-zabbix-server-mysql-1 "/sbin/tini -- /usr/…" zabbix-server-mysql running 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp
rocky-zabbix-web-nginx-mysql-1 "docker-entrypoint.sh" zabbix-web-nginx-mysql running 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp, :::80->8080/tcp, :::443->8443/tcp
Вам необходимо разрешить сервисы через брандмауэр:
##For firewalld sudo firewall-cmd --permanent --add-port=10051/tcp sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --reload
##For UFW
sudo ufw allow 80/tcp
sudo ufw allow 10051/tcp
Шаг 4 – Доступ к веб-интерфейсу Zabbix 6.0 LTS
Веб-интерфейс Zabbix 6.0 теперь доступен на порту 80 и может быть доступен с помощью URL http://IP_address или http://domain_name

Войдите в систему, используя учетные данные по умолчанию:
Username: Admin
Password: zabbix
После успешного входа в систему вы должны увидеть панель управления ниже:
Измените пароль администратора в разделе Администрирование > Пользователи > Пароль администратора > > Изменить пароль.
После установки предпочтительного пароля нажмите кнопку «Обновить»
Шаг 5 – Настройте целевой узел сети Zabbix мониторинга.
Теперь мы настроим этот сервер для мониторинга, установив пакет Zabbix агента на клиентскую машину. Пакет Zabbix агента может быть установлен следующим образом:
##On Rhel/CentOS/Rocky Linux/Alma Linux sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm sudo yum install zabbix-agent zabbix-sender -y
#Ubuntu
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
sudo dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
sudo apt update
sudo apt install zabbix-agent zabbix-sender
#On Debian
wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-1+debian11_all.deb
sudo dpkg -i zabbix-release_6.0-1+debian11_all.deb
sudo apt update
sudo apt install zabbix-agent zabbix-sender
После установки выполните приведенную ниже настройку.
sudo vim /etc/zabbix/zabbix_agentd.conf
Отредактируйте файл, как показано ниже:
# On line 117 - Specify Zabbix server IP Address Server=192.168.205.11
On line 158 - Specify Zabbix server ( For active checks)
ServerActive=192.168.205.11
On line 169 - Set hostname of the Zabbix agent
Hostname=agent1.example.com
Запустите и включите услугу:
sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent
Также необходимо разрешить порт через брандмауэр:
sudo firewall-cmd --permanent --add-port=10050/tcp
sudo firewall-cmd --reload
Добавление Zabbix агента на Zabbix сервер
Zabbix агент теперь можно добавить на сервер, перейдя в Конфигурация > Узлы сети > Создать узел сети.
Вам необходимо предоставить:
- Имя хоста Zabbix агента для мониторинга должно совпадать с именем, введенным в конфигурационный файл агента.
- Видимое имя Zabbix агента.
- Выберите группу или добавьте новую группу в поле «Группы».
- IP адрес Zabbix агента
- Порт сервиса Zabbix агента, порт по умолчанию 10050
Заполните данные, как показано ниже:
Не забудьте добавить шаблоны мониторинга в зависимости от того, что вы хотите отслеживать на агенте: Затем нажмите кнопку «Добавить», чтобы добавить агента. После добавления агент будет доступен, как показано ниже:
После добавления перейдите в раздел Мониторинг узлов > и выберите нужный узел сети для мониторинга. Затем выберите графики для просмотра данных.
На этом мы заканчиваем это руководство о том, как запустить Zabbix Server 6.0 LTS в Docker Containers. Мы также рассмотрели, как Zabbix агенты могут быть добавлены на сервер. Я надеюсь, что это существенно.