SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor

Zabbix 7.0 LTS на Ubuntu 24.04: повне налаштування

Покроково встановіть Zabbix 7.0 LTS на Ubuntu 24.04: репозиторій, схема MariaDB/MySQL, nginx, frontend і agent2, а також типові помилки конфігурації.

Що ви створюєте

Один Ubuntu 24.04 VPS із повним стеком Zabbix 7.0 LTS: демоном zabbix-server, який опитує вузли та надсилає сповіщення, базою даних MariaDB/MySQL, що зберігає кожну метрику, PHP frontend, який обслуговує nginx, і zabbix-agent2, що збирає метрики з самого сервера. Після запуску ви вказуєте другий сервер, додаєте template і отримуєте email у момент, коли диск заповнюється або сервіс завершує роботу.

Zabbix складніший за інструмент для status page: це повноцінна система часових рядів із templates, triggers, ескалацією та зберіганням історії. Майже всі проблеми виникають на трьох кроках, які часто пропускають: імпорті схеми бази даних, налаштуванні пароля бази даних, який фактично читає сервер, і розкоментуванні двох рядків у конфігурації nginx. Якщо виконати їх правильно, далі все зводиться до роботи майстра. Якщо вам потрібні лише перевірки доступності та status page, якою можна ділитися, легкий status monitor Uptime Kuma зробить це в одному контейнері. Zabbix виправдовує свою складність, коли потрібні пороги для окремих метрик і ескалація для багатьох хостів.

Використовуйте гілку 7.0 LTS: її server, frontend, agent2 і schema мають узгоджені версії, а оновлення безпеки випускаються протягом багатьох років. Перш ніж копіювати наведене нижче ім’я файлу repository, перегляньте офіційну сторінку завантаження Zabbix. Пакет релізу latest лише налаштовує repository 7.0, але не вибирає окремий point release: apt встановлює пакети тієї версії 7.0.x, які наразі доступні в repository. Саме так ви отримуєте найновішу версію. На сторінці також можуть бути перелічені пронумеровані пакети релізу 7.0-N, але це число визначає версію налаштування repository, а не версію збірки Zabbix. Усі інші команди тут стабільні для всієї гілки 7.0.

Ресурси, порти та передумови

Припускайте, що це чистий KVM VPS на Ubuntu 24.04 із root або sudo. Реалістичний мінімум для server, database, nginx і PHP на одному сервері, який моніторить кілька хостів, — 2 GB RAM і 2 vCPU. Сервер із 1 GB запускається, але в міру накопичення історії database починає відчувати нестачу пам’яті. Для кількох десятків хостів плануйте 4 GB, а коли їх стане понад сотню, перенесіть database на окремий сервер. Обсяг диска залежить від кількості елементів, які ви збираєте, і тривалості зберігання історії. На початок закладіть кілька GB. housekeeper видалятиме старі дані відповідно до заданих періодів зберігання.

Порти: 80 і 443 для frontend — публічні або обмежені вашою IP-адресою. Сервер приймає дані від active agents через TCP 10051, а кожен agent слухає TCP 10050 для опитування з боку сервера. Якщо перед сервером є firewall, відкривайте лише порти, які ви справді публікуєте. Для frontend варто створити DNS A record, оскільки вам знадобиться справжній сертифікат. Zabbix моніторить усі інші сервіси, які ви запускаєте, тому його слід розглядати як частину ширшого self-hosting stack, який варто запускати у 2026, а не додавати в останню чергу.

Крок 1. Додайте офіційний репозиторій Zabbix 7.0

Пакет zabbix-release виконує одну дію: додає до системи список джерел apt і ключ підпису. Установіть його, а потім оновіть індекс.

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

Якщо wget повертає 404 Not Found, ім’я файлу змінилося. Відкрийте сторінку завантаження Zabbix, виберіть Ubuntu 24.04 і скопіюйте точну URL-адресу zabbix-release, яку вона показує. У чистому результаті apt update є рядок repo.zabbix.com і немає попередження про ключ; The following signatures couldn't be verified because the public key is not available означає, що пакет випуску не встановив свій ключ, тому повторно виконайте dpkg -i і знову оновіть індекс.

Крок 2. Встановіть сервер, frontend і agent

Однією командою встановіть сервер, зібраний для роботи з MySQL, PHP frontend, конфігурацію nginx, файли SQL-схеми та agent2.

sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

zabbix-server-mysql — це сервер, скомпільований для MySQL/MariaDB. Для PostgreSQL замість нього встановіть zabbix-server-pgsql і скоригуйте наведені нижче кроки роботи з базою даних. Пакет zabbix-sql-scripts містить схему, яку ви імпортуєте далі. У версії 7.0 це окремий пакет. Якщо його не встановити, під час подальшого імпорту не буде потрібного шляху. Жоден із цих пакетів не встановлює рушій бази даних. Тому, якщо на сервері ще немає MariaDB, встановіть її зараз.

sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb

Крок 3, створіть базу даних із правильним набором символів

Zabbix має суворі вимоги до collation: він підтримує лише utf8mb4 із utf8mb4_bin або старіший utf8 (також відомий як utf8mb3) із utf8_bin. Документація наполегливо рекомендує utf8mb4 із utf8mb4_bin, саме це поєднання використано в цьому посібнику. Відкрийте root shell за допомогою sudo mysql і виконайте:

CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;

Рядок SET GLOBAL захищає імпорт від помилки. Схема Zabbix створює детерміновані triggers під час імпорту, а обліковий запис без привілею SUPER, наприклад zabbix, не може створити їх, коли ввімкнено binary logging. У MySQL 8 binary logging увімкнено за замовчуванням; деякі керовані збірки MariaDB також його вмикають, тоді як стандартна MariaDB — ні. Якщо пропустити цей прапорець на сервері з увімкненим binary logging, імпорт завершиться помилкою ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Встановлення цього параметра від імені root усуває проблему. Після імпорту його потрібно вимкнути. Запишіть пароль без змін: конфігурація сервера має містити точно такий самий рядок, байт у байт.

Крок 4. Імпортуйте схему (цей крок часто пропускають)

Це найпоширеніша причина, через яку щойно налаштований frontend відмовляється завантажуватися: створена база даних порожня. Завантажте в неї схему, що постачається в zabbix-sql-scripts.

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
  mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

З’явиться запит на пароль zabbix. На невеликому VPS операція триває від тридцяти до шістдесяти секунд. У разі успіху команда нічого не виводить — це нормально. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory означає, що пакет zabbix-sql-scripts не встановлено (поверніться до кроку 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' означає, що пароль або grant із кроку 3 задано неправильно. Після завершення знову вимкніть safety flag:

sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"

Перевірте імпорт за допомогою sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;". Числовий результат, а не помилка doesn't exist, означає, що схему імпортовано.

Крок 5. Вкажіть пароль бази даних у zabbix_server.conf

Сервер читає облікові дані бази даних із /etc/zabbix/zabbix_server.conf. Потрібно вказати лише пароль: DBName і DBUser вже мають значення zabbix за замовчуванням. Розкоментуйте рядок # DBPassword= і задайте його значення:

DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password

Пароль має повністю, байт у байт, збігатися з паролем із кроку 3. Порожній або неправильний DBPassword є найчастішою причиною повідомлення «Zabbix server is not running», яке з’явиться далі: daemon запускається, не може увійти до бази даних і завершує роботу. На екрані це не відображається. Причину можна побачити лише в журналі.

Крок 6. Спрямуйте nginx на frontend

Пакет zabbix-nginx-conf встановлює server block у /etc/zabbix/nginx.conf і підключає його до nginx через /etc/nginx/conf.d/zabbix.conf, але рядки listen і server_name у ньому закоментовані. Тому nginx не обслуговує Zabbix, доки ви не відредагуєте їх:

server {
    listen          80;
    server_name     zabbix.example.com;
    ...
}

Використайте свій домен або публічну IP-адресу сервера, якщо DNS ще не налаштовано. Є два нюанси. Стандартний welcome site Ubuntu для nginx також прослуховує порт 80 і позначений як default server. Тому він обробляє запити, для яких ім’я не збігається з жодним server block. Видаліть його, інакше завантажуватиметься неправильна сторінка: sudo rm -f /etc/nginx/sites-enabled/default. Якщо /etc/nginx/conf.d/zabbix.conf з якоїсь причини відсутній, а це відома помилка пакування, створіть посилання вручну за допомогою sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Потім перевірте конфігурацію та перезавантажте nginx:

sudo nginx -t
sudo systemctl reload nginx

nginx -t має вивести test is successful. Якщо натомість виводиться nginx: [emerg] a duplicate default server for 0.0.0.0:80, це означає, що default site і блок Zabbix претендують на default_server. Видаліть default site і повторіть перевірку. Частіше перевірка завершується успішно, але показує лише попередження conflicting server name, а браузер і далі відображає стандартну welcome page. Це означає, що default site обробляє запит із невідповідним ім’ям. Його видалення усуває проблему.

Крок 7. Запустіть і ввімкніть служби

Запустіть сервер, агент, PHP-FPM і nginx та ввімкніть їх, щоб вони автоматично запускалися після перезавантаження.

sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable  zabbix-server zabbix-agent2 nginx php8.3-fpm

Ubuntu 24.04 постачається з PHP 8.3, тому служба FPM має назву php8.3-fpm; пакет zabbix-nginx-conf запускає свій frontend у межах того самого master-процесу. Переконайтеся, що сервер запустився й продовжує працювати:

sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log

У коректному журналі останнім записом буде повідомлення про запуск сервера, після чого працюватимуть його процеси housekeeper, poller і trapper. Якщо бачите [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', значення DBPassword з кроку 5 не збігається. Виправте його та перезапустіть службу. Рядок [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist означає, що ви пропустили імпорт схеми на кроці 4, тому серверу немає що читати.

Крок 8. Завершіть майстер вебналаштування

Перейдіть до http://your-domain-or-ip. Відкриється майстер налаштування Zabbix. Виконайте його кроки:

  1. Вітання, виберіть мову.
  2. Перевірка попередніх вимог: кожен рядок має одразу містити статус OK; пакетний пул /etc/zabbix/php-fpm.conf уже встановлює потрібні Zabbix ліміти PHP.
  3. Налаштування підключення до бази даних: тип бази даних MySQL, хост localhost, порт 0 (це означає порт або socket за замовчуванням), назва бази даних zabbix, користувач zabbix і пароль із кроку 3. Неправильні облікові дані або відсутня схема будуть виявлені саме тут.
  4. Налаштування: залиште хост Zabbix server localhost, порт 10051 і вкажіть назву інсталяції.
  5. Підсумок перед інсталяцією, потім натисніть Install. Майстер запише /etc/zabbix/web/zabbix.conf.php.
  6. Завершення: увійдіть як Admin (з великої літери A), використовуючи пароль zabbix, і негайно змініть цей пароль у розділі Users.

Якщо майстер повідомляє про Cannot create the configuration file, вебкористувач не може записати до /etc/zabbix/web/. Завантажте запропонований zabbix.conf.php, вручну розмістіть його там за допомогою sudo і натисніть Finish.

Крок 9. Додайте локальний хост і підключіть шаблон

Zabbix не починає автоматично моніторити сам себе. Перейдіть до Data collection → Hosts → Create host, задайте ім’я хоста zabbix-server, додайте його до групи Linux servers і додайте інтерфейс Agent з IP-адресою 127.0.0.1 та портом 10050. У розділі Templates підключіть Linux by Zabbix agent (варіант із пасивним опитуванням; у Linux by Zabbix agent active використовується передавання даних агентом). Збережіть зміни.

Протягом хвилини в рядку хоста з’явиться зелена позначка ZBX, а метрики почнуть надходити в розділі Monitoring → Latest data. Червона позначка ZBX означає, що сервер не може підключитися до агента. Цей випадок описано нижче; він не свідчить про помилку на цьому кроці.

Крок 10, корисний trigger і email-сповіщення

Template Linux by Zabbix agent уже містить triggers для високого використання CPU, нестачі пам’яті та заповнених дисків. Тому сповіщення з’являться одразу після прив’язування template. Щоб побачити, як створюється trigger, додайте власний: відкрийте host, перейдіть до Triggers → Create trigger, назвіть його Root filesystem over 90% full on {HOST.NAME}, встановіть severity High і використайте такий expression:

last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90

vfs.fs.dependent.size[/,pused] — це item із відсотком використаного простору, який filesystem discovery у template створює для root filesystem. Linux template у версії 7.0 збирає vfs.fs.get один раз і на його основі створює dependent items для кожної точки монтування. Тому trigger спрацьовує без додаткового збору даних. Збережіть його.

Trigger лише змінює колір рядка на dashboard, доки action не надішле сповіщення користувачу. У розділі Alerts → Media types → Email задайте SMTP server, port, sender address, security з’єднання (зазвичай STARTTLS) і, за потреби, облікові дані relay. Потім натисніть Test. Помилка на цьому етапі означає, що SMTP-шлях налаштовано неправильно, ще до того, як від нього залежатиме реальне сповіщення. Додайте адресу користувача Admin у розділі Users → Users → Admin → Media → Add і виберіть severity, для яких надсилати сповіщення. Потім налаштуйте action у розділі Alerts → Actions → Trigger actions → Create action: додайте умову на зразок Trigger severity >= Warning, а в Operations виберіть надсилання користувачу Admin через Email. Збережіть і ввімкніть action. Потрібен chat? У Zabbix 7.0 є webhook media types для Slack, Discord і Telegram, але для кожного потрібне окреме налаштування сервісу, а не SMTP-параметри. Наприклад, для Telegram потрібен bot, створений через BotFather, його token у параметрі api_token media type і chat ID отримувача в полі Send to користувача. Дотримуйтеся README відповідної інтеграції, увімкніть media type, призначте його користувачу та використовуйте в action так само, як Email.

Моніторинг другого сервера за допомогою агента

Щоб моніторити інший сервер, також додайте туди репозиторій Zabbix. Ubuntu 24.04 не містить власних пакетів Zabbix, тому встановіть лише агент:

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 -y zabbix-agent2

Відредагуйте /etc/zabbix/zabbix_agent2.conf. Для пасивного опитування вкажіть у Server IP-адресу Zabbix server. Для активних перевірок укажіть у ServerActive адресу Zabbix server і задайте унікальне значення Hostname, яке відповідає хосту, створеному у frontend:

Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01

Виконайте sudo systemctl restart zabbix-agent2 і відкрийте TCP 10050 для підключень від Zabbix server до цього сервера. Перезапуск важливий: пакет запустив agent одразу після встановлення з типовим значенням Server=127.0.0.1, а agent читає свій файл лише під час запуску. Команда enable --now виявила б, що agent уже запущений, і нічого не змінила б. Тому agent продовжив би відхиляти підключення від Zabbix server. Запуск під час завантаження системи вже налаштований, оскільки пакет також увімкнув unit. Поверніться до frontend, створіть host, у якого інтерфейс Agent вказує на IP-адресу цього сервера, прив’яжіть шаблон Linux — і дані з’являться протягом хвилини.

Типові причини помилок і повідомлення, які ви побачите

Frontend показує Error connecting to database або помилку бази даних. На кроці DB у майстрі Access denied for user 'zabbix'@'localhost' (using password: YES) означає, що пароль не збігається з паролем із кроку 3 або команда GRANT не виконувалася. Якщо підключення до бази даних успішне, але frontend повідомляє The frontend does not match Zabbix database або Table 'zabbix.users' doesn't exist, імпорт схеми на кроці 4 пропущено або він завершився помилкою. Повторно виконайте імпорт у щойно створену базу даних.

Помаранчевий банер: Zabbix server is not running: the information displayed may not be current. Frontend запущений, але не може підключитися до доступного сервера. Найімовірніші причини наведено в порядку ймовірності. Сервіс зупинений. Перевірте systemctl status zabbix-server і запустіть його. Сервіс працює, але не може підключитися до бази даних. У журналі є [Z3001] connection to database 'zabbix' failed: [1045] Access denied, що означає неправильне або порожнє значення DBPassword. Або frontend підключається не до того сервера: у /etc/zabbix/web/zabbix.conf.php збережено host localhost і port 10051. В Ubuntu SELinux за замовчуванням відсутній, тому причина із SELinux socket, яку наводять у посібниках для RHEL, тут не застосовується. У цьому випадку майже завжди проблема в паролі бази даних або в зупиненому сервісі.

На host відображається червона мітка ZBX; помилка елемента Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. Agent не запущений або не прослуховує з’єднання. Перевірте systemctl status zabbix-agent2 і підтвердьте ListenPort=10050. Timeout замість "connection refused" означає, що firewall відкидає з’єднання на port 10050. Пов’язане повідомлення Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. означає, що agent доступний, але його рядок Server= не містить IP-адресу Zabbix server. Додайте її та перезапустіть agent.

Звичайна welcome page nginx або 502 Bad Gateway. Welcome page означає, що default site досі увімкнений або блок Zabbix не підключений. Видаліть /etc/nginx/sites-enabled/default і підтвердьте, що існує /etc/nginx/conf.d/zabbix.conf, як описано на кроці 6. 502 означає, що nginx підключився до PHP, але PHP-FPM зупинений або прослуховує інший socket. Запустіть php8.3-fpm і перевірте, що socket fastcgi_pass у блоці Zabbix збігається із socket активного pool.

Резервне копіювання, оновлення та TLS

База даних містить усю історію, тому регулярно створюйте її резервну копію за допомогою mysqldump і зберігайте дамп не на цьому сервері:

mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz

Файли конфігурації /etc/zabbix невеликі, тому їх також варто зберігати, але їх можна відновити повторним створенням. Дані відновити не можна. Відновлення виконується у зворотному порядку: створіть базу даних, імпортуйте дамп і вкажіть її в конфігурації.

Оновлення в межах лінійки 7.0 виконуються звичайними командами apt update && apt upgrade. Під час наступного запуску сервер застосує всі міграції схеми. Оновіть пакети та перезапустіть zabbix-server. Перехід на майбутню основну версію потрібно виконувати свідомо: прочитайте примітки до оновлення, спочатку створіть дамп бази даних і підготуйтеся до односторонньої зміни схеми. Саме тому слід зафіксуватися на LTS-лінійці та залишатися на ній.

Не залишайте frontend доступним через звичайний HTTP. Після того як DNS почне вказувати на цей сервер, налаштуйте на ньому сертифікат за інструкцією Certbot і Let's Encrypt для nginx в Ubuntu 24.04. Вона змінює server block так, щоб він приймав з’єднання на 443 і перенаправляв запити з 80. Поки ви посилюєте захист сервера, з якого входите до системи, щоб контролювати всі інші сервери, також обмежте доступ до його SSH за інструкцією fail2ban для блокування brute-force спроб входу через SSH. Підключення для моніторингу не повинно передаватися у відкритому вигляді, а його зовнішній інтерфейс не має бути відкритим для підбору паролів.

FAQ

Чи потрібен Zabbix agent, чи можна виконувати моніторинг без нього?

Працюють обидва варіанти. Agent (agent2) надає докладні метрики для кожного хоста: CPU, пам’ять, диски, процеси, сервіси й журнальні файли. Це стандартний вибір для серверів, якими ви керуєте. Моніторинг без агента застосовують для пристроїв, на які не можна встановити програмне забезпечення: SNMP — для комутаторів і принтерів, ICMP ping — для перевірки доступності, HTTP checks — для endpoint, IPMI — для контролю стану обладнання. У більшості реальних розгортань використовують обидва підходи.

Чому frontend повідомляє, що Zabbix server не запущений?

Frontend працює, але не може підключитися до активного процесу zabbix-server. Зазвичай server запускається, не може виконати вхід, оскільки DBPassword у zabbix_server.conf має неправильне значення або порожнє, а потім одразу завершує роботу. Виконайте systemctl status zabbix-server і перегляньте /var/log/zabbix/zabbix_server.log. Рядок [Z3001] connection to database ... failed підтверджує цю причину. Виправте пароль і перезапустіть server. Повідомлення зникне протягом хвилини.

Чи обов’язково використовувати MySQL, чи можна використовувати PostgreSQL?

Підтримуються обидва варіанти: zabbix-server-mysql з MariaDB або MySQL, як описано в цьому посібнику, або zabbix-server-pgsql з PostgreSQL. Для невеликих інсталяцій вибір майже не має значення. Для великих інсталяцій PostgreSQL із розширенням TimescaleDB розподіляє таблиці історії за розділами та значно зменшує витрати на очищення даних. Саме тому великі середовища часто обирають PostgreSQL. Виберіть один варіант і дотримуйтеся його. Подальша міграція потребує повного експорту та повторного імпорту, а не зміни параметра конфігурації.

Скільки RAM потрібно універсальному серверу Zabbix?

Для одного сервера, який моніторить кілька хостів, 2 GB — реалістичний мінімум, а 4 GB достатньо для кількох десятків хостів. Пам’ять переважно використовують кеш бази даних і poller-процеси server. VPS із 1 GB RAM працюватиме, але зі зростанням історії даних база даних не матиме достатньо пам’яті. Якщо хостів понад сто, винесіть базу даних на окремий server і налаштуйте його buffer pool замість того, щоб додавати RAM до однієї машини.

Чи не є Zabbix надмірним рішенням для кількох серверів?

Може бути. Якщо вам потрібно лише знати, чи працює сервіс, і мати сторінку, якою можна поділитися, легший інструмент на кшталт Uptime Kuma для моніторингу доступності та стану швидше розгорнути й легше переглядати. Обирайте Zabbix, якщо потрібні пороги для окремих метрик, історичні графіки, шаблонні хости та правила ескалації. Простий інструмент перевірки доступності не може надати такі можливості для всього парку систем.