Установка и начальная настройка сервера мониторинга Zabbix на Ubuntu / Debian

Тематические термины: Zabbix, MariaDB, MySQL, PHP, NGINX.

Сервер Zabbix используется для сбора и анализа информации о состоянии узлов сети. В данной статье будет рассмотрен процесс его установки и развертывания веб-интерфейса для его управления. В качестве сервера баз данных мы будем использовать MariaDB/MySQL. Версия операционной системы, которая использовалась для написания инструкции — 20.04 LTS (также протестировано на 22.04 / 24.04 и на Debian 12), версия устанавливаемого Zabbix — 6 (также протестирован Zabbix 7 и 8).

Подготовка сервера

Перед установкой Zabbix выполняем подготовительные процедуры.

1. Правильное время

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

Для этого сначала задаем правильную временную зону:

timedatectl set-timezone Europe/Moscow

* в данном примере задается московское время.

Затем устанавливаем и запускаем сервис синхронизации времени:

apt install chrony

systemctl enable chrony

systemctl start chrony

2. Настройка брандмауэра

Для работы сервера, открываем следующие порты:

iptables -I INPUT -p tcp —match multiport —dports 80,443 -j ACCEPT

iptables -I INPUT -p tcp —match multiport —dports 10050,10051 -j ACCEPT

iptables -I INPUT -p udp —match multiport —dports 10050,10051 -j ACCEPT

* где 80 — порт для http запросов (веб-интерфейс); 443 — для https запросов (веб-интерфейс); 10050,10051 — порты для получения информации от zabbix агентов.

Для сохранения правил используем

apt install iptables-persistent

netfilter-persistent save

3. Обновляем список пакетов в репозитории:

apt update

Если наша система чистая и на ней не работают критически важные сервисы, стоит обновить установленные пакеты: 

apt upgrade

Подготовка системы закончена.

Установка веб-сервера

Управление сервером Zabbix будет осуществляться посредством веб-интерфейса. Для этого необходимо установить и настроить веб-сервер, СУБД и PHP.

СУБД

В данному инструкции мы будем использовать сервер баз данных mariadb. Zabbix версии 6 требует MariaDB версии 10.05.00 и выше. Но слишком свежая версия также может не поддерживаться сервером заббикс. Необходимо уточнить системные требования на официальной странице.

В репозитории Ubuntu может не оказаться нужной версии СУБД, поэтому мы подключим репозиторий разработчика. Для этого переходим по ссылке downloads.mariadb.org/mariadb/repositories и выбираем нашу версию операционной системы, последний стабильный и поддерживаемый релиз mariadb и геолокацию репозитория, например:

Ниже появится инструкция по добавлению репозитория и установке СУБД:

Согласно инструкции, создаем файл:

vi /etc/apt/sources.list.d/matiadb.list

# MariaDB 10.8 repository list — created  UTC
# https://mariadb.org/download/
deb [arch=amd64,arm64,ppc64el,s390x] https://mirror.docker.ru/mariadb/repo/10.8/ubuntu focal main
deb-src https://mirror.docker.ru/mariadb/repo/10.8/ubuntu focal main

Импортируем ключ репозитория:

apt-key adv —fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'

Обновляем кэш пакетов:

apt update

Устанавливаем СУБД:

apt install mariadb-server

Разрешаем автозапуск сервера баз данных и запускаем mariadb:

systemctl enable mariadb

systemctl start mariadb

Задаем пароль для суперпользователя СУБД:

mysqladmin -u root password

* после ввода команды система потребует ввести пароль два раза.

Веб-сервер

Для наших целей будем использовать веб-сервер NGINX.

Для его установки вводим команду:

apt install nginx

Запускаем nginx и разрешаем его автозапуск:

systemctl enable nginx

systemctl start nginx

Открываем веб-браузер и переходим по ссылке http://<IP-адрес сервера>/ — мы должны увидеть окно приветствия:

PHP и PHP-FPM

Интерфейс zabbix разработан на PHP — наш веб-сервер должен обрабатывать скрипты, написанные на нем. Смотрим на странице с системными требованиями, какая версия PHP рекомендована и создаем системную переменную для нашего удобства:

export PHP_VER=8.3

* в моем примере для Zabbix рекомендована версия 8.3.

С помощью страницы Установка разных версий PHP на Linux Ubuntu или Установка разных версий PHP на Linux Debian устанавливаем нужную нам версию PHP.

Устанавливаем php компоненты. В зависимости от того, нативная у нас версия PHP или установленная из дополнительного репозитория, команды будут отличаться.

а) Для нативной версии: 

apt install php php-fpm php-mysql php-pear php-cgi php-common php-ldap php-mbstring php-snmp php-gd php-xml php-bcmath —no-install-recommends

б) Установленной из репозитория:

apt install php${PHP_VER}-fpm php${PHP_VER}-mysql php${PHP_VER}-pear php${PHP_VER}-cgi php${PHP_VER}-common php${PHP_VER}-ldap php${PHP_VER}-mbstring php${PHP_VER}-snmp php${PHP_VER}-gd php${PHP_VER}-xml php${PHP_VER}-bcmath —no-install-recommends

Установка PHP и компонентов завершены. Переходим к настройке.

Для настройки php, открываем файл:

vi /etc/php/${PHP_VER}/fpm/php.ini

Редактируем следующие параметры:

date.timezone = "Europe/Moscow"

max_execution_time = 300

post_max_size = 16M

max_input_time = 300

max_input_vars = 10000

* где:

  • date.timezone — временная зона. В нашем примере выставлено московское время.
  • max_execution_time — разрешенное время выполнения скрипта. Если последний будет выполняться дольше, система прервет его работу.
  • post_max_size — максимальные объем передачи данных методом POST.
  • max_input_time — время в секундах, за которое PHP должен разобрать входные данные GET и POST.
  • max_input_vars — ограничение на количество входных переменных, которые могут быть переданы на сервер в одном запросе.

Разрешим запуск php-fpm и перезапустим его:

systemctl enable php${PHP_VER}-fpm

systemctl restart php${PHP_VER}-fpm

NGINX + PHP

Для того, чтобы NGINX обрабатывал PHP, открываем конфигурационный файл:

vi /etc/nginx/sites-enabled/default

В секции location добавляем параметр index:

        …
        index  index.php index.html …;
        …

* значения индексных файлом могут быть перечислены через пробел, но первым должен быть index.php.

Внутри секции server добавим следующее:

        location ~ .php$ {
                set $root_path /var/www/html;
                fastcgi_buffer_size 32k;
                fastcgi_buffers 4 32k;
                fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_param DOCUMENT_ROOT $root_path;
        }

* где /var/www/html — корневой путь хранения скриптов; /run/php/php8.3-fpm.sock — путь до сокетного файла php-fpm (зависит от версии PHP — в нашем случае 8.3).

Проверяем настройки nginx и перезагружаем его:

nginx -t && nginx -s reload

Создаем index.php со следующим содержимым:

vi /var/www/html/index.php

<?php phpinfo(); ?>

Открываем веб-браузер и переходим по ссылке http://<IP-адрес сервера>/ — теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:

* это старый скриншот, поэтому на нем версия PHP 8.2.

Веб-сервер готов для работы с Zabbix Web.

Установка и настройка сервера Zabbix

Переходим к установке самого Zabbix сервера.

Установка

Сначала установим репозиторий последней версии Zabbix. Для этого переходим на страницу https://repo.zabbix.com/zabbix/ и переходим в раздел с самой последней версией пакета — затем переходим в ubuntu/pool/main/z/zabbix-release/ — копируем ссылку на последнюю версию релиза:

Обратите внимание, что необходимо скопировать ссылку на файл для своей версии Ubuntu — в нашем примере это 20.04. Посмотреть свою версию операционной системы можно командой:

cat /etc/os-release | grep VERSION_ID

Скачиваем файл репозитория командой:

curl -sLO https://repo.zabbix.com/zabbix/6.1/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.1-1%2Bubuntu20.04_all.deb

Устанавливаем его:

dpkg -i zabbix-release_*.deb

Обновляем списки пакетов:

apt update

Устанавливаем сервер, вводя команду:

apt install zabbix-server-mysql zabbix-frontend-php zabbix-get zabbix-sql-scripts

Настройка базы данных

Входим в оболочку ввода sql-команд:

mysql -uroot -p

Создаем базу данных:

> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin;

* мы создали базу zabbix.

Создаем пользователя для подключения и работы с созданной базой:

> GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'zabbixpassword';

* в данном примете мы создали пользователя zabbix с доступом к базе zabbix и паролем zabbixpassword.

Выходим из sql-оболочки:

> quit

В составе zabbix идет готовая схема для СУБД MySQL/MariaDB или postgreSQL. В нашем случае, нам нужен MySQL.

Для применения схемы переходим в каталог:

cd /usr/share/zabbix-sql-scripts/mysql

В предыдущих версиях Zabbix путь до дампа базы был /usr/share/doc/zabbix-sql-scripts/mysql. Если мы не смогли найти нужный каталог с дампом, можно попробовать выполнить поимск командой:

find / -type f -iname server.sql.gz

Распаковываем архив с дампом базы:

gunzip server.sql.gz

Восстанавливаем базу их дампа:

mysql -u root -p zabbix < server.sql

* после ввода команды система запросит пароль. Необходимо ввести пароль, который мы задали после установки mariadb.

Настройка zabbix

Открываем конфигурационный файл zabbix:

vi /etc/zabbix/zabbix_server.conf

Добавляем строку:

DBPassword=zabbixpassword

* мы настраиваем портал на подключение к базе с паролем zabbixpassword, который задали при создании базы для zabbix.

И проверяем следующие строки:


DBName=zabbix

DBUser=zabbix

* имя базы и пользователя должны быть zabbix (как мы и создали в mariadb).

Создаем каталог для инклудов конфигурационных файлов (по какой-то причине, он может быть не создан при установке):

mkdir /etc/zabbix/zabbix_server.conf.d

Запуск zabbix-server

Разрешаем автозапуск сервера мониторинга:

systemctl enable zabbix-server

После запускаем сам сервер zabbix:

systemctl start zabbix-server

Настройка nginx

При установке zabbix-web файлы портала копируются в каталог /usr/share/zabbix. Наш веб-сервер работает с каталогом /var/www/html.

Меняем это — открываем конфигурационный файл nginx:

vi /etc/nginx/sites-enabled/default

Редактируем параметры root и set $root_path:


root /usr/share/zabbix/ui;

location ~ .php$ {
    set $root_path /usr/share/zabbix/ui;
    …
}

В старых версиях (ниже 7.2) путь root будет другим:

root /usr/share/zabbix;

location ~ .php$ {
    set $root_path /usr/share/zabbix;
    …
}

Перезапускаем nginx:

systemctl restart nginx

Установка портала для управления Zabbix

Открываем браузер и переходим по адресу http://<IP-адрес сервера>/ — откроется страница установки Zabbix Web.

Выбираем нужный язык установки и кликаем по Next Step:

Если в списке языков не окажется нужного нам, устанавливаем локаль:

dpkg-reconfigure locales

* например, для русского языка выбираем в открывшемся окне ru_RU.UTF-8 UTF-8.

И перезапускаем обработчик PHP, в нашем случае:

systemctl restart php${PHP_VER}-fpm

Перезагружаем страницу установки и выбираем нужный язык.

В следующем окне внимательно смотрим на результаты проверки нашего веб-сервера — справа мы должны увидеть все OK. Если это не так, проверяем настройки и исправляем предупреждения и ошибки, после перезапускаем страницу F5 для повторной проверки настроек.

Когда все результаты будут OK, кликаем по Next Step:

В следующем окне мы оставляем настройки подключения к базе как есть — дополнительно прописываем пароль, который задали при создании пользователя zabbix. После нажимаем Next Step:

* в нашем случае, пароль был zabbixpassword;

В следующем окне оставляем все как есть:

… и нажимаем Next Step.

В последнем окне мы проверяем настройки и кликаем Next Step.

Установка завершена — нажимаем Finish:

В открывшемся окне вводим логин Admin и пароль zabbix (по умолчанию) — откроется окно со сводной информацией по мониторингу:

Zabbix Agent

В качестве примера установим zabbix agent на наш сервер, но также поясним отличия, если необходимо поставить агента на любой другой компьютер Linux в сети. Также мы настроим шифрованное соединение между сервером и агентом.

Настройка брандмауэра (только на клиенте)

Для работы агента необходимо открыть порт 10050/tcp. В нашем примере мы устанавливаем агента на сервер, поэтому нам не потребуется его открывать.

Однако, если вы устанавливаете агента на хост, который нужно мониторить, вводимо команду:

iptables -I INPUT -p tcp —dport 10050 -j ACCEPT

* где 10050 — порт для подключения к zabbix агенту.

Будет надежнее, если мы разрешим подключения только с сервера Zabbix:

iptables -I INPUT -p tcp —dport 10050 -s <IP сервера> -j ACCEPT

Для сохранения правила используем iptables-persistent:

apt install iptables-persistent

netfilter-persistent save

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

Настройка репозитория (не требуется на сервере)

На странице https://repo.zabbix.com/zabbix/ находим подходящую версию агента для нужной операционной системы. Предположим, мы хотим поставить пакет на систему Ubuntu. Тогда нужные нам файлы находятся по пути 6.1/ubuntu. Для удобства, создадим переменные:

Z_VER=6.1

OS_NAME=ubuntu

* где Z_VER — версия zabbix, которая нужна (желательно, чтобы совпадала с сервером); OS_NAME — операционная система, куда будем устанавливать агента.

Создаем файл с настройкой репозитория:

echo "deb https://repo.zabbix.com/zabbix/${Z_VER}/${OS_NAME} $(lsb_release -cs) main" > /etc/apt/sources.list.d/zabbix.list

Устанавливаем в систему ключ репозитория:

apt install curl gnupg2

curl -fsS https://repo.zabbix.com/zabbix-official-repo.key | gpg2 —dearmor -o /etc/apt/trusted.gpg.d/zabbix.gpg

Обновляем списки пакетов:

apt update

Установка и подключение агента

После настройки репозитория, установка агента выполняется командой:

apt install zabbix-agent2

Откроем конфигурационный файл:

vi /etc/zabbix/zabbix_agent2.conf

Отредактируем следующую опцию:

Server=127.0.0.1

* в данном примере мы указываем агенту сервер Zabbix — мы может указать его имя или IP-адрес.

Разрешаем автозапуск агента и перезапускаем его:

systemctl enable zabbix-agent2

systemctl restart zabbix-agent2

Переходим в панель управления сервером. Открываем НастройкаУзлы сети. Мы должны увидеть единственный узел Zabbix Server:

А справа должно быть состояние доступности ZBX:

Агент работает и настроен.

Включение шифрования

Чтобы обезопасить передачу данных между сервером и агентом, настроим шифрование по PSK ключу.

На агенте открываем конфигурационный файл:

vi /etc/zabbix/zabbix_agent2.conf

Приводим к виду 4 опции:

TLSConnect=psk

TLSAccept=psk

TLSPSKIdentity=PSK 001

TLSPSKFile=/etc/zabbix/agent_key.psk

Генерируем ключ:

openssl rand -hex 32 > /etc/zabbix/agent_key.psk

Смотрим его содержимое:

cat /etc/zabbix/agent_key.psk

Сохраняем — оно нам понадобиться.

Перезапускаем агента:

systemctl restart zabbix-agent2

Переходим в веб-панель управления Zabbix. В списке узлов:

… кликаем по нашему серверу с установленным агентом.

Переходим на вкладку Шифрование. Выбираем подключение с PKS, ставим флажок только для PSK, вводим идентификатор (который задали при настройке агента в параметре TLSPSKIdentity), вводим сам ключ, который был сгенерирован в консоли агента:

Нажимаем Обновить для применения настроек.

Через пару минут наше состояние соединения с агентом должно быть, примерно, таким:

Шифрование настроено.

Читайте также

Возможно, вам будут интересны другие инструкции, касающиеся Zabbix:

1. Установка и настройка Zabbix-агента на CentOS.

2. Установка Zabbix agent на Windows.

3. Настройка сервера Zabbix 5 на CentOS 8.

4. Установка и начальная настройка сервера мониторинга Zabbix на CentOS 7.

5. Активация/деактивация узлов Zabbix с помощью API на PHP.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *