Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым. Для хранения данных используется MySQL, PostgreSQL, SQLite или Oracle Database, веб-интерфейс написан на PHP. Актуальная LTS-версия на начала 2025 года - 7.0
Ниже описаны несколько вариантов установки с использованием стека Zabbix - PostgreSQL - Nginx и один с расширением TimescaleDB
Репозиторий:
sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
sudo dpkg -i zabbix-release_latest_7.0+debian12_all.deb
sudo apt update
Необходимые пакеты:
sudo apt install zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 \
zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql
Eсли СУБД PosqtgreSQL не установлена - установить ее.
sudo apt install postgresql
Пользователь (роль) для сервиса Zabbix:
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix
Импортируем схему БД:
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
Добавим пароль от БД в конфигурационный файл Zabbix:
sudo nano /etc/zabbix/zabbix_server.conf
...
DBPassword=YOU-password
...
Перезпустим сервис:
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.2-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.2-fpm
Репозиторий:
sudo wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
Необходимые пакеты:
sudo apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 \
zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql
Eсли СУБД PosqtgreSQL не установлена - установить ее.
sudo apt install postgresql
Пользователь (роль) для сервиса Zabbix:
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix
Импортируем схему БД:
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
Добавим пароль от БД в конфигурационный файл Zabbix:
sudo nano /etc/zabbix/zabbix_server.conf
...
DBPassword=YOU-password
...
Перезапустим сервис:
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpm
Для работы Zabbix ему потребуется база данных и веб сервер. Все эти компоненты мы будем запускать в контейнерах. Для того, что бы упростить взаимодействие между этими службами создадим в Docker дополнительную сеть:
sudo docker network create zabbix_network
Теперь можем приступить к запуску всех необходимых нам сервисов.
Мы загружаем последнюю версию PostgreSQL и создаем в ней базу и пользователя. Инициализацию базы Zabbix сделает сам.
sudo docker run -d \
--name zabbix_postgres \
--network zabbix_network \
-e POSTGRES_USER=zabbix_user \
-e POSTGRES_PASSWORD=zabbix_pass \
-e POSTGRES_DB=zabbix_db \
-v zabbix_postgres_data:/var/lib/postgresql/data \
postgres:latest
Теперь загрузим указанную версию Zabbix и запустим сервис, указав расположение базы, учетные данные и порт для подключения.
sudo docker run -d \
--name zabbix_server \
--network zabbix_network \
-e DB_SERVER_HOST="zabbix_postgres" \
-e DB_SERVER_PORT="5432" \
-e POSTGRES_USER="zabbix_user" \
-e POSTGRES_PASSWORD="zabbix_pass" \
-e POSTGRES_DB="zabbix_db" \
-v zabbix_server_data:/var/lib/zabbix \
zabbix/zabbix-server-pgsql:alpine-7.0-latest
Загрузим актуальную версию веб-сервиса на основе Nginx, так же передав ему нужные параметры.
sudo docker run -d \
--name zabbix_web \
--network zabbix_network \
-e ZBX_SERVER_HOST="zabbix_server" \
-e DB_SERVER_HOST="zabbix_postgres" \
-e POSTGRES_USER="zabbix_user" \
-e POSTGRES_PASSWORD="zabbix_pass" \
-e POSTGRES_DB="zabbix_db" \
-p 80:8080 \
zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
Теперь сервис должен быть доступен на страндартном порту 80. При постановке устройств на мониториг стоит учитывать, что Zabbix работает в сети Docker.
Для запуска Zabbix с использованием Docker Compose я написал вот такой сценарий. База данных, сам сервер и веб-сервер работают в контенейрах в сети Docker. Для мониторинга самого Docker-хоста используется zabbix-agent2, который установлен на самом хосте. В связи с этим есть ньюансы в настройке агента - необходимо указывать адрес сервера из сети Docker.
# настроим вутреннюю сеть для работы комплекса Zabbix.
networks:
network-zabbix:
driver: zabbix_network
# Опишем все сервисы, необхиодмые для работы Zabbix
services:
# СУБД PostgreSQL последней версии
postgres-server:
image: postgres:latest
restart: always
environment:
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: zabbix_pass
POSTGRES_DB: zabbix_db
PG_DATA: /var/lib/postgresql/data/pgdata # Вытащим базу из контейнера в локальное хранилище
# Сам Zabbix-сервер
zabbix-server:
image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
restart: always
environment:
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: zabbix_pass
POSTGRES_DB: zabbix_db
# Дополнительные настройки
ZBX_HISTORYSTORAGETYPES: log,text # Активация логов
ZBX_DEBUGLEVEL: 1 # Уровень логирования
ZBX_HOUSEKEEPINGFREQUENCY: 1 # Активая автоочистки истори
ZBX_MAXHOUSEKEEPERDELETE: 5000 # Количество метрик для удаления за одну очистку
depends_on:
- postgres-server
# Веб-сервер для доступа к Zabbix
zabbix-web:
image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
restart: always
environment:
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: zabbix_pass
POSTGRES_DB: zabbix_db
ZBX_SERVER_HOST: zabbix-server
ZBX_POSTMAXSIZE: 64M
PHP_TZ: "Europe/Samara"
ZBX_MAXEXECUTIONTIME: 500
ports:
- '80:8080'
depends_on:
- postgres-server
- zabbix-server
Еще вариант, с подключенным TimescaleDB для ускорения PostgreSQL:
# Опишем все сервисы, необхиодмые для работы Zabbix
services:
# СУБД PostgreSQL последней версии
postgres-server:
image: timescale/timescaledb-ha:pg17
networks:
zabbix7:
ipv4_address: 172.18.0.2
restart: always
environment:
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: zabbix_pass
POSTGRES_DB: zabbix_db
#PGDATA: /home/postgres/pgdata
PGDATA: /home/postgres/pgdata/data
TIMESCALEDB_TELEMETRY: "off"
volumes:
- ./pgdata:/home/postgres/pgdata/data
ports:
- "5432:5432"
# Сам Zabbix-сервер
zabbix-server:
image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
networks:
zabbix7:
ipv4_address: 172.18.0.3
restart: always
environment:
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: zabbix_pass
POSTGRES_DB: zabbix_db
# Дополнительные настройки
ZBX_CACHESIZE: 128M
ZBX_STARTPOLLERS: 50
ZBX_HISTORYSTORAGETYPES: log,text # Активация логов
ZBX_DEBUGLEVEL: 1 # Уровень логирования
ZBX_HOUSEKEEPINGFREQUENCY: 1 # Активая автоочистки истори
ZBX_MAXHOUSEKEEPERDELETE: 5000 # Количество метрик для удаления за одну очистку
ports:
- "10051:10051"
depends_on:
- postgres-server
# Веб-сервер для доступа к Zabbix
zabbix-web:
image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
networks:
zabbix7:
ipv4_address: 172.18.0.4
restart: always
environment:
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: zabbix_pass
POSTGRES_DB: zabbix_db
ZBX_SERVER_HOST: zabbix-server
ZBX_POSTMAXSIZE: 64M
PHP_TZ: "Europe/Samara"
ZBX_MAXEXECUTIONTIME: 500
ports:
- '9090:8080'
depends_on:
- postgres-server
- zabbix-server
networks:
zabbix7:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
# Не забудь выдать права на внешний каталог для даных
# sudo chown -R 1000:1000 /opt/dockers/zabbix/pg_data/
Активный прокси:
services:
# СУБД
mysql:
image: mysql:9.0.1-oracle
deploy:
resources:
limits:
cpus: '0.5'
memory: 1G
reservations:
memory: 256M
restart: always
environment:
MYSQL_ROOT_PASSWORD: YOU_VALUE
MYSQL_DATABASE: zabbix-proxy
MYSQL_USER: zabbix-proxy
MYSQL_PASSWORD: YOU_VALUE
networks:
zabbix-proxy:
ipv4_address: 172.11.0.2
# Zabbix-Proxy
proxy:
image: zabbix/zabbix-proxy-mysql:alpine-7.2-latest
deploy:
resources:
limits:
cpus: '0.5'
memory: 1G
reservations:
memory: 256M
restart: always
environment:
# Active mode 0, passive mode 1
ZBX_PROXYMODE: 0
ZBX_HOSTNAME: mikoshi
ZBX_SERVER_HOST: YOU_VALUE
ZBX_PROXYCONFIGFREQUENCY: 60
# DB
DB_SERVER_HOST: 172.11.0.2
MYSQL_DATABASE: zabbix-proxy
MYSQL_USER: zabbix-proxy
MYSQL_PASSWORD: zabbix-proxy2205
# PSK
ZBX_TLSPSKIDENTITY: "YOU_VALUE"
ZBX_TLSPSKFILE: "/var/lib/zabbix/psk/zabbix_proxy.psk"
ZBX_TLSCONNECT: "psk"
ZBX_TLSACCEPT: "psk"
volumes:
- ./zabbix_proxy.psk:/var/lib/zabbix/psk/zabbix_proxy.psk
networks:
zabbix-proxy:
ipv4_address: 172.11.0.3
depends_on:
- mysql
networks:
zabbix-proxy:
driver: bridge
ipam:
config:
- subnet: 172.11.0.0/16
TimescaleDB – это открытая временная база данных на основе PostgreSQL, оптимизированная для работы с временными рядами. Она идеально подходит для Zabbix, так как обеспечивает:
В Zabbix TimescaleDB позволяет ускорить запросы к тенденциям и истории, а так же снизить нагрузку на сервер.
Установка будет производится на отечественный дистрибутив RedOS версии 8 из собственного репозитория, поэтому минорная версия Zabbix может чуть-чуть отставать от последней версии на сайте разработчика. Мне хотелсь попробовать установить все из собственного репозитория RedOS, чтобы избежать проблем совместимости или т.п.
Будем использовать 15 версию. Можно выбрать и новее, но для этого приедтся скорректировать и версию дополнения TimescaleDB
# Установка СУБД
dnf install postgresql15-server -y
# Инициализация базы
postgresql-15-setup initdb
systemctl enable postgresql-15.service --now
systemctl status postgresql-15.service
Теперь установим TimescaleDB и нужные ему компоненты.
dnf install -y timescaledb-15 timescaledb-tune postgresql15-devel
После установки нужно включить само дополнение в настройка PostgreSQL.
Открываем файл:
nano /var/lib/pgsql/15/data/postgresql.conf
И добавляем в конце строчку
shared_preload_libraries = 'timescaledb'
Утилита timescaledb-tune, которую мы устанавливали ранее, в RedOS устаналивается в /usr/bin/timescaledb-tune и ссылка на программу почему-то не создается. Поэтому я скопировал ее в удобное мне место.
cp /usr/bin/timescaledb-tune /usr/pgsql-15/bin/
Она пригодится нам для настройки самой СУБД для работы с плагином. Для ее работы нужно, что бы она знала пусть к утилите pg_config. Для этого в RedOS потребовалось добавить путь к ней в переменные окружения:
export PATH=$PATH:/usr/pgsql-15/bin
Если путь оказался не верным, можно проверить его командой:
find / -name pg_config 2>/dev/null
Итак, теперь выполним настройку СУБД для работы с плагином:
/usr/pgsql-15/bin/timescaledb-tune -yes
Эта утилита произведет настройки самого PostgreSQL. Почему-то, она сильно ограничивает параметр PostgreSQL max_connections в файле /var/lib/pgsql/15/data/postgresql.conf, вплоть до 25. Каким образом она примает такое решение - мне не понятно. Данного количества недостаточно для работы Zabbix. Я увеличиваю минимум до 100.
Раз мы снова здесь, то проведем дополниельные настройки.
Откроем файл конфигруации PostgreSQL:
nano /var/lib/pgsql/15/data/postgresql.conf
И приведем значения параметров к следующему виду:
listen_addresses = '*'
port = 5432
max_connections = 100
После того, как СУБД и плагин установлены приступим к установке Zabbix.
Подключим репозиторий PHP
dnf install php82-release
Настройте политики безопасности с помощью команд:
setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_connect_db on
Обновите систему:
dnf update
Установите следующие пакеты и добавьте пакет httpd в автозагрузку.
dnf install httpd zabbix7-lts-apache-conf zabbix7-lts-sql-scripts
systemctl enable httpd
Установите zabbix:
dnf install zabbix7-lts-server-pgsql zabbix7-lts-web-pgsql zabbix7-lts-agent
Далее необходимо отредактировать файл php.ini:
nano /etc/php.ini
Приведите параметры к следующему виду:
date.timezone = Europe/Moscow #обязательно укажите свой часовой пояс
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
и сохраните изменения.
Теперь подключимся к СУБД и создадим базу для Zabbix:
sudo -u postgres psql
CREATE ROLE zabbix WITH NOSUPERUSER LOGIN PASSWORD 'zabbixpassword';
CREATE DATABASE zabbix WITH OWNER zabbix;
GRANT ALL PRIVILEGES ON DATABASE zabbix TO zabbix;
Проверьте, что таблицы создались:
\l
Отключитесь от базы:
\q
После этого необходимо предоставить права доступа пользователю zabbix к базе данных по паролю, для этого требуется отредактировать другой файл:
nano /var/lib/pgsql/15/data/pg_hba.conf
найдите строку:
host replication all 127.0.0.1/32 scram-sha-256
и перед ней добавьте запись, чтобы выглядело следующим образом:
host zabbix zabbix 127.0.0.1/32 password
host replication all 127.0.0.1/32 scram-sha-256
Далее замените все scram-sha-256 на md5, конечный вариант файла:
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host zabbix zabbix 127.0.0.1/32 password
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
Перезапустите сервер postgresql:
systemctl restart postgresql-15
Импортируйте содержимое SQL-дампа в базу данных:
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
После того, как база создана, начальная схема ипортирована нам нужно подключить к этой базе плагин timescaledb и импортировать изменения в схему.
Сначала активируем плагин:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
Импортируем изменения в схему:
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
Далее мы должны добавить пароль от базы в конфигурационный файл Zabbix:
nano /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbixpassword
Запустите zabbix-сервер и добавьте его в автозагрузку:
systemctl restart zabbix-server
systemctl enable zabbix-server
systemctl restart zabbix-agent
systemctl enable zabbix-agent
systemctl restart httpd
Новый сервер будет доступен по адресу http://<ip-адрес_сервера>/zabbix