Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым. Для хранения данных используется MySQL, PostgreSQL, SQLite или Oracle Database, веб-интерфейс написан на PHP.
Задача: Установить полноценный сервер мониторинга Zabbix с веб-интерфейсом, базой данных. Для ее решения я буду использовать вариант установки с СУБД PostgreSQL и веб-сервером NGINX.
Вся дальнейшая настройка, как сервера, сервера-прокси так и агентов описана для Debian 12.
Перед установкой советую проверить наличие следующих пакетов: sudo, wget. Если их нет, установите:
apt update
apt -y install sudo wget
Так же важным условием является установка правильного часового пояса в самой ОС Debian 12
Для проверки настроек используем команду:
sudo timedatectl
Установите свой часовой пояс, например:
sudo timedatectl set-timezone Europe/Samara
sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
sudo dpkg -i zabbix-release_7.0-1+debian12_all.deb
sudo apt update
Установим сам Zabbix-сервер, веб-интерфейс, агент и другие нужные для его работы компоненты:
sudo apt -y install zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
Следующим шагом нужно установить и запустить СУБД PostgreSQL:
sudo apt install postgresql
sudo systemctl status postgresql
В Debian 12 СУБД PostgreSQL обычно самостоятельно активируется и ставится в автозагрузку.
Самостоятельно создавать роль и базу данных не нужно. Заббикс сделает все сам: создаст роль, базу данных и импортирует ее схему.
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
Полсе окончания импорта добавим в файл /etc/zabbix/zabbix_server.conf пароль от БД, который создали ранее.
nano /etc/zabbix/zabbix_server.conf
...
DBPassword=password
...
Отредактируйте файл /etc/zabbix/nginx.conf раскомментируйте и настройте директивы „listen“ и „server_name“
# listen 8080;
# server_name example.com;
sudo systemctl restart zabbix-server zabbix-agent nginx php8.2-fpm
sudo systemctl enable zabbix-server zabbix-agent nginx php8.2-fpm
Готово! Теперь сервис доступен по адресу http://ip-address-host:8080
Заходим на сервис и заполняем оставшиеся настройки, учитывая Вашу конфигурацию:
Пролистываем чек-лист, что все с компонентами хорошо.
Дополняем настройки, которых не хватает. По умолчанию localhost я меняю на 127.0.0.1 и отключаю TLS шифрование базы данных.
Теперь укажем имя Вашего сервера, которое будет отображаться на главное странцие сервиса. Не забываем и тут указать актуальный часовой пояс.
Теперь все готово к окончательной установке сервиса. После нажатия кнопки далее будет создан конфигурационный файл сервера.
Ну вот и все! Сервис готов к работе.
Нажимаем Финиш и используем логин-пароль для входа: Admin zabbix
Для мониторинга можно использовать не только SNMP, но и агента. Агент обладает дополнительынми возможностями. Например, можно добавлять любые свои метрики, забирая значения выполняя скрипт.
Для установки на Debian:
Добавим репозиторий:
sudp 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
Установим агента:
apt install zabbix-agent
Поставим его в автозапуск:
sudo systemctl restart zabbix-agent
sudo systemctl enable zabbix-agent
Агент второй версси обладает более широким функицоналом, а именно - встроенными плагинами.
Лично я использовал два: для мониторинга PosqtgeSQL и Docker.
По своему опыту могу сказать, что временами версия и набор пакетов в Debian может отличаться от собственного репозитория Zabbix. Поэтому, если хотите установить последнюю актуальную версию агента и всех нужных плагинов, советую воспользоваться собственным репозиторием Zabbix:
sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
sudo dpkg -i zabbix-release_latest+debian12_all.deb
sudo apt update
sudo apt upgrade
Далее установим сам Агент2 и все его плагины:
sudo apt install zabbix-agent2 zabbix-agent2-plugin-*
Запустим сервис:
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2
Прокси-сервер позволяет расширить функционал системы мониторинга. Позже опищу подробнее.
Прокси сервер Zabbix устанавливается на отдельный сервер. Поэтому придется выполнить почти те же шаги, что и раньше, но не все. Мы добавим репозиторий, установим СУБД Postgresql и создадим в ней базу и роль.
sudo wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
sudo dpkg -i zabbix-release_latest+debian12_all.deb
sudo apt update
sudo apt install zabbix-proxy-pgsql zabbix-sql-scripts
Базу и роль Заббикс создаст сам. Главное - работающий Postgresql на сервере.
Если он не установлен:
sudo apt install -y postgresql
Теперь создадим роль и приудмаем пароль для нее. Он будет нужен далее.
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix_proxy
Теперь импортируем начальную схему базы данных для zabbix-proxy.
cat /usr/share/zabbix-sql-scripts/postgresql/proxy.sql | sudo -u zabbix psql zabbix_proxy
Далее укажем пароль базы для сервиса.
nano /etc/zabbix/zabbix_proxy.conf
...
DBPassword=password
...
sudo systemctl restart zabbix-proxy
sudo systemctl enable zabbix-proxy
Рассмотрим запуск Zabbix 7.0 c использованием Docker.
Для работы 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/
В Zabbix есть хорошая возможность рисовать карты сетей или служб. Их можно сделать живыми - там будут отображатсья триггеры и состояние служб. Так уж повелось - что я плохо вижу. Я долго искал способ увеличть размер шрифтов как в самом Zabbix, так и в его картах. Так вот для версии 7.0 LTS можно увеличить размер шрифтов на картах. Для этого нужно открыть файл /usr/share/zabbix/include/maps.inc.php (сделайте копию!!!)
nano /usr/share/zabbix/include/maps.inc.php
В строке 2076 найти значение:
imagetext($im, 8, 0, $x_label, $y_rec + $increasey, $color, $str)
Тот же файл строка 1819 вместо 8 подставляем размер, который хотим, получаем нужную высоту шрифта в подписях к связям.
imagetext($im, 8, 0, $labelx, $labely + $dims['height'], $colors['Black'], $str);
Тот же файл строка 1922 вместо 8 - подставляем удобный размер между строками в подписи (высота одной строки)
$allLabelsSize = imageTextSize(8, 0, str_replace("\r", '', str_replace("\n", '', $allStrings)));
Так как поплыли обрисовки подписей (прямоугольники по умолчанию белого цвета, в которых отрисовывается каждая строчка подписи узла сети), то можно сделать их другим цветом, например как в дуде зелёным, для этого в том же файле на 2074 строке меняем вместо white ставим green
$colors['White']
Видно, что они больше, чем нужно и в некоторых местах карты перекрывают связи, поэтому меняем значение $dims[„width“] по Х под наш размер шрифта (опять вместо 8 подставляем) в строке 2058:
$dims = imageTextSize(8, 0, $str);
Данные настройки могут повредеть работу системы! Все на свой страх и риск!
В версии Zabbix 7.2 этот способ уже не работает!
Даный рецепт взял на форуме Zabbix.