Статьи → Сервера → Часть 1. Установка Zabbix сервера
Сервера Актуальная

Часть 1. Установка Zabbix сервера

Andrew ⚡ Администратор
(обновлено 08.09.2026)
458 v1.0

Начинаем цикл статей по развертыванию своей системы мониторинга. Начнем мы с установки и настройки zabbix сервера. Подробную установку от А до Я Astra Linux рассмотрел в этой статье. С описанием и картинками каждого шага. Приступим сразу к развертыванию zabbix.

Так как у меня установлена Astra Linux 1.8.6.39, то при подключении по ssh, меня информируют, что система не активирована. Воспользуюсь своим так называемым keygen и уберу эту назойливую надпись.

версия астры

прогоняю keygen

Прогнал свой keygen, теперь при подключении по ssh меня больше не встречает назойливая надпись.

отсутствует уведомление

версия

Теперь приступим к установке zabbix.

Настройка сервера

Использовать пакеты будем штатные, с репозиториев Astra Linux.

Если у вас не настроены репы от астры, то можно взять отсюда.

Или взять тут:

# Основной репозиторий, включающий актуальное оперативное или срочное обновление
deb https://dl.astralinux.ru/astra/stable/1.8_x86-64/main-repository/     1.8_x86-64 main contrib non-free non-free-firmware
# Расширенный репозиторий, соответствующий актуальному оперативному обновлению
deb https://dl.astralinux.ru/astra/stable/1.8_x86-64/extended-repository/ 1.8_x86-64 main contrib non-free non-free-firmware

1. Подготовим нашу астру, для начала обновим индексы пакетов.

sudo apt update

1.1 Часовой пояс и время. Для мониторинга время критично. 

sudo apt install -y chrony

Ставим часовой пояс:

timedatectl set-timezone Europe/Moscow

sudo systemctl enable --now chrony

Добавим российский NTP-pool:

sudo grep -q '^pool' /etc/chrony/chrony.conf || echo 'pool ru.pool.ntp.org iburst' >> /etc/chrony/chrony.conf

sudo systemctl restart chrony

Проводим синхронизацию времени:

timedatectl

sudo chronyc sources -v

синхронизация времени

1.2 Имя сервера

Изменим имя сервера.

hostnamectl set-hostname ВАШЕ_НОВОЕ_НАЗВАНИЕ

Если после переименования вы получаете

unable to resolve host ИМЯ_СЕРВЕРА: Неизвестное имя или служба

Значит у Вас расхождение имен в /etc/hostname и /etc/hosts

Исправим это:

sudo -i

vim /etc/hosts

исправляем имя на то, которое задали в set-hostname.

неправильное имя

исправленное имя

Установка базы данных

2. Установка PostgreSQL 15

остаемся в root, дальше делаем под ним. Если вы вышли, то заходим обратно sudo -i

P.s.: я противник работать под root привилегиями, но сейчас нам понадобятся его полномочия. Почему я противник и не советую под ним работать, я разобрал в этой статье.

apt install -y postgresql postgresql-client

установка базы данных

Включим и добавим базу данных postgresql в автозагрузку.

systemctl enable --now postgresql

2.1 Создание базы данных и пользователя Zabbix

Для нашего удобства, создадим временные переменные с логином, названием базы и паролем.

Переменная логина

export ZBX_DB_USER=zabbix

Переменная название базы данных

export ZBX_DB_NAME=zabbix

Интерактивная переменная с паролем

read -rs -p "Введите надежный пароль для пользователя БД zabbix: " ZBX_DB_PASSWORD

Запишем ее результат

export ZBX_DB_PASSWORD

Пока вы не закрыли сессию в терминале, она помнит значением этих переменных (нигде в системе их не будет)

Не забудьте поменять имя пользователя и название базы на свои!

создание переменных

Теперь нужно зайти в postgres, создать учетную запись, создать базу и дать необходимые права. Для Вашего удобства и что бы ускорить процесс, я обернул все в одну команду. Менять в ней ничего не нужно! Для это мы и сделали переменные, если вы изменили значения переменных, то они автоматически подставятся в эту длинную команду. Все для Вас))

sudo -u postgres psql -v ON_ERROR_STOP=1 <<SQL
CREATE ROLE ${ZBX_DB_USER} WITH LOGIN PASSWORD '${ZBX_DB_PASSWORD}';
CREATE DATABASE ${ZBX_DB_NAME} OWNER ${ZBX_DB_USER} ENCODING 'UTF8' TEMPLATE template0;

ALTER ROLE ${ZBX_DB_USER} SET client_encoding TO 'utf8';
ALTER ROLE ${ZBX_DB_USER} SET default_transaction_isolation TO 'read committed';
ALTER ROLE ${ZBX_DB_USER} SET timezone TO 'Europe/Moscow';
SQL

создание пользователя в БД

2.2 Настройка доступа к БД (pg_hba.conf)

Разрешаем локальные TCP-подключения для пользователя zabbix.

По аналогии с пунктом 2.1, создадим для удобства переменную с адресом конфига pg_hba.conf

PG_HBA=/etc/postgresql/15/main/pg_hba.conf

Добавим в конец файла правила

cat >> ${PG_HBA} <<EOF
host zabbix zabbix 127.0.0.1/32 scram-sha-256
host zabbix zabbix ::1/128 scram-sha-256
EOF

Перезагрузим postgresql после правок

systemctl reload postgresql

настройки доступа БД

2.3 Проверка подключения

Теперь проверим, что zabbix может подключаться к БД по tcp. P.s.: так как мы уже использовали переменные, ничего вводить не нужно (вы же делаете все в одной сессии?).

PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME} -c "SELECT version();"

проверка подключения

Если команда отработала без ошибок и вывела версию postgresql - все идеально, база готова.

 

Установка Zabbix

3. Установка Zabbix 7.0, nginx и импорт схемы БД

Главная задача - установить zabbix и nginx, не допустив установки apache, который часто тянется как зависимость и занимает 80-ый порт. Мы будем использовать флаг --no-install-recommends и явно укажем нужные php-модули.

⚠️ Важно: Если вы перезапускали терминал или сессию SSH, переменная с паролем ZBX_DB_PASSWORD могла потеряться. Проделайте операцию с пункта 2.1

Установка zabbix и nginx:

apt install --no-install-recommends -y zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 nginx php-fpm php-pgsql php-gd php-xml php-mbstring php-bcmath php-curl php-ldap fping

3.1 Импорт схемы базы данных

Импорт схемы базы данных (по очереди)

1) Структура базы

zcat /usr/share/zabbix-server-pgsql/schema.sql.gz | PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME}

2) Картинки и иконки

zcat /usr/share/zabbix-server-pgsql/images.sql.gz | PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME}

3) Стартовые данные (админ, настройки итд)

zcat /usr/share/zabbix-server-pgsql/data.sql.gz | PGPASSWORD="${ZBX_DB_PASSWORD}" psql -h 127.0.0.1 -U ${ZBX_DB_USER} -d ${ZBX_DB_NAME}

Это займет 10-20 сек.

импорт схемы базы данных

3.2 Настройка конфигурации zabbix server

Укажем серверу, как подключаться к postgresql (аналогично, для Вашего удобства и быстроты, я упаковал в одну команду с помощью sed):

ZBX_CONF=/etc/zabbix/zabbix_server.conf

sed -i 's/^# DBHost=.*/DBHost=127.0.0.1/' $ZBX_CONF

sed -i 's/^DBName=.*/DBName=${ZBX_DB_NAME}/' $ZBX_CONF

sed -i 's/^DBUser=.*/DBUser=${ZBX_DB_USER}/' $ZBX_CONF

sed -i "s/^# DBPassword=.*/DBPassword=${ZBX_DB_PASSWORD}/" $ZBX_CONF

sed -i 's/^# DBPort=.*/DBPort=5432/' $ZBX_CONF

настройки конфигурации zabbix

3.3 Настройка php-fpm

Зададим таймзону и лимиты, чтобы веб-интерфейс не упал при генерации графиков:

PHP_CONF=/etc/php/8.2/fpm/conf.d/99-zabbix.ini

cat > $PHP_CONF <<EOF
date.timezone = Europe/Moscow
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
max_execution_time = 300
max_input_time = 300
EOF

Перезапустим php

systemctl restart php8.2-fpm

настройка php-fpm

3.4 Настройка nginx

vim /etc/nginx/conf.d/zabbix.conf

server {
    listen          80;
    server_name     _;
    root            /usr/share/zabbix;
    index           index.php;

    location / {
        try_files   $uri $uri/ =404;
    }

    location ~ \.php$ {
        include     fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
}

настройка nginx

Удаляем дефолтный сайт, чтобы он не занимал 80 порт

rm -f /etc/nginx/sites-enabled/default

Переносим наш конфиг из conf.d в sites-available

mv /etc/nginx/conf.d/zabbix.conf /etc/nginx/sites-available/zabbix

Жестко очищаем все текущие включения (удаляем дефолтные сайты)

rm -f /etc/nginx/sites-enabled/*

rm -f /etc/nginx/conf.d/*.conf

Создаем символическую ссылку для нашего конфига

ln -s /etc/nginx/sites-available/zabbix /etc/nginx/sites-enabled/zabbix

удаляем лишнее

Проверяем синтаксис (должно быть ok) и перезапускаем nginx

nginx -t

systemctl restart nginx

удаляем лишнее и добавляем конфиг

3.5 Запуск всех сервисов

Включаем автозагрузку и стартуем:

systemctl enable --now zabbix-server zabbix-agent2 nginx php8.2-fpm

включаем все сервисы

Так как мы уже импортировали схему базы данных через консоль, но еще не создали файл конфигурации для самого веб-интерфейса, zabbix поймет, что база есть, но веб-морда не настроена, и автоматически перенаправит нас на страницу мастера настройки (/setup.php).

окно мастера настройки setup.php

3.6 Настройки веб-интерфейса

Переключим на русский язык

русский языкПереходим далее.

проверка условий

Опа, а один пакет с предупреждением, нужно исправить.

ошибка пакета

Доустановим отсутствующий пакет (я его уже добавил в команду при установка всего php, у вас не должно быть этой ошибки). Но если все же есть, то вот команда:

apt install -y php-curl

и перезапустить php

systemctl restart php8.2-fpm

исправленный пакет

Идем дальше.

настройка подключения к БД

Тут немного притормозим.

Ну с типом я думаю итак понятно базы данных. Хост указываем localhost, если база расположена на том же сервере, где и веб-интерфейс (можно разбить на три сервера: 1) сервер базы данных, 2) сервер zabbix, 3) сервер веб-интерфейса zabbix).

Порт если не меняли, то тоже стандартный. Имя базы данных, тут уже вписываем свое.

Схему базы данных - оставьте пустым.

Это поле нужно только в том случае, если вы при создании базы данных вручную создавали отдельную схему PostgreSQL (не public). Мы импортировали всю схему в стандартную public, поэтому здесь ничего писать не нужно.

Хранение учетных данных - «Простой текст»

Простой текст - пароль будет записан в файл /etc/zabbix/web/zabbix.conf.php. Это стандартный вариант. HashiCorp Vault / CyberArk Vault - это для серьезных enterprise-сред, где пароли хранятся во внешнем секрет-менеджере и подтягиваются оттуда. У нас такого нет, поэтому не трогаем.

TLS шифрование базы данных  - снимаем галку

База данных стоит на этом же сервере (127.0.0.1), трафик не покидает хост, а серверные TLS-сертификаты для postgresql мы не выпускали. Если галочку оставить, веб-интерфейс попытается подключиться по SSL и, скорее всего, упадет с ошибкой соединения. TLS до базы включаем тогда, когда БД вынесена на отдельный сервер и едет по сети. Тогда уже настраиваем сертификаты и на postgresql, и на zabbix.

Итого:

Поле Значение
Тип базы данныхy PostgreSQL
Хост базы данных localhost (или 127.0.0.1)
Порт базы данных 5432 (или свой)
Имя базы данных Пишем свое имя
Схема базы данных (пусто)
Хранение учетных данных Простой текст
Пользователь Ваш пользователь
Пароль Ваш пароль от БД
TLS шифрование без галочки

 

Идем дальше. Меняем тему по вкусу, вписываем имя сервера.

настройки темы

Предварительный обзор инсталляции

предварительный обзор инсталляции

Но тут меня ждала оказия(

ошибка установки

Я предположил, что проблема с правами, возможно у веб-сервера нет прав на запись в /etc/zabbix. Возможно из-за работы root. Скачаем конфиг вручную и закинем на сервер.

загружаем конфиг

Перекинем на сервер

scp ~/Загрузки/zabbix.conf.php superuser@192.168.31.81:/tmp

копируем файл на сервер

так как мы все еще под рутом, перенес конфиг в /etc/zabbix

cp /tmp/zabbix.conf.php /etc/zabbix/

Пройдемся правосудием и порядком, назначим права:

chown www-data:www-data /etc/zabbix/zabbix.conf.php

chmod 640 /etc/zabbix/zabbix.conf.php

Возвращаемся в браузер и обновляем страницу.

ошибка

Ага, ничего страшного, перезайдем. Нажимаем вход в систему.

форма входа

Какой логин и пароль? Согласно документации:

Логин: Admin

Пароль: zabbix

документация zabbix

вводим логин и пароль

Быстро пробегаемся по всем пунктам.

снова добро пожаловать

zabbix интерфейс настроен

После кнопки финиш, мы попадаем в сам zabbix интерфейс.

zabbix главная страница

Ага, снова неладное) Zabbix сервер запущен - нет.

ошибка запуска zabbix

Где-то косяк в конфигах, так как zabbix запущен.

Посмотрим конфиг zabbix.conf.php который мы скачали

смотрим конфиг zavbbix.conf.php

Нет, проблема не в нем. Давайте посмотрим zabbix_server.conf, сразу пройдемся регуляркой для быстроты поиска.

cat /etc/zabbix/zabbix_server.conf | grep -nE "(Host|Name|User|Password|Port)"

ищем проблему в конфигах заббикса

Ага, вот и проблема. Сама переменная ${ZBX_DB_NAME} вписалась вместо значения.

ошибка в конфиге

Откроем конфиг и исправим переменную на значения

vim /etc/zabbix/zabbix_server.conf

сохраняем конфиг, перезапускаем zabbix и ждем 5 секунд, смотрим службу.

systemctl restart zabbix-server.service && sleep 5

systemctl status zabbix-server.service

состояние службы

Как видим, zabbix поднялся. До этого в службе был всего 1 процесс, забыл сделать скриншот. Сейчас как видно процессов очень много. Обычно я всегда смотрю статус служб, но в этот раз повелся на интерфейс и что обычно, всегда все работает)

рабочий zabbix сервер

Отлично, все поднялось и работает! Поздравляю, если вы дочитали до этих слов, значит вы подняли с нуля zabbix-сервер, настроили базу данных. Развернуть zabbix - это пол дела. Ягодки Вас ждут впереди) Увидимся в следующих частях цикла)

📚 Все части цикла «Своя система мониторинга на Astra Linux: от А до Я»:

0
Andrew

DevOps Engineer

1 50 статей
Комментарии (0)
Войдите, чтобы оставить комментарий

Пока нет комментариев. Будьте первым!