Установка Zabbix 7.4 + Nginx + PostgreSQL 17 + TimescaleDB на Alma Linux 10

Современная серверная комната с мощными серверами и экранами, отображающими Zabbix 7.4, Nginx, PostgreSQL и TimescaleDB на Alma Linux.

Инструкция по установкеZabbix 7.4 + Nginx + PostgreSQL 17 + TimescaleDB на Alma Linux 10

Содержание
  1. Версии компонентов
  2. Предварительные требования
  3. Предварительная настройка сервера
  4. Настройка имени хоста (hostname)
  5. Настройка временной зоны
  6. Настройка синхронизации времени (chrony)
  7. Настройка параметров ядра (sysctl)
  8. Настройка лимитов файловых дескрипторов
  9. Отключение Transparent Huge Pages (THP)
  10. Настройка swap
  11. Проверка и отключение ненужных сервисов
  12. Настройка SSH (опционально)
  13. Итоговая проверка перед установкой
  14. Настройка сетевого экрана (firewalld)
  15. Проверка состояния firewalld
  16. Просмотр зон и активного интерфейса
  17. Открытие портов для веб-интерфейса Zabbix
  18. Открытие портов Zabbix Server и Agent
  19. Ограничение доступа к PostgreSQL
  20. Настройка rich rules для ограничения доступа к веб-интерфейсу
  21. Ограничение доступа к Zabbix Server по IP
  22. Защита от брутфорса SSH (rate limiting)
  23. Применение всех правил
  24. Проверка открытых портов
  25. Итоговая таблица портов Zabbix
  26. Обновление системы и базовая настройка
  27. Обновление пакетов
  28. Установка базовых утилит
  29. Подключение EPEL
  30. Исключение пакетов Zabbix из EPEL
  31. Настройка SELinux (Permissive на этапе установки)
  32. Установка и настройка Nginx
  33. Установка Nginx
  34. Установка PHP-FPM
  35. Настройка SELinux для PostgreSQL + Nginx
  36. Разрешения для Nginx и PostgreSQL
  37. Проверка применённых булевых переменных
  38. Установка и настройка PostgreSQL 17
  39. Добавление репозитория PostgreSQL
  40. Установка PostgreSQL 17
  41. Инициализация базы данных
  42. Создание пользователя и базы данных Zabbix
  43. Установка TimescaleDB
  44. Установка TimescaleDB из PGDG-репозитория
  45. Настройка shared_preload_libraries
  46. Оптимизация параметров PostgreSQL для TimescaleDB
  47. Перезапуск PostgreSQL
  48. Установка Zabbix 7.4
  49. Добавление официального репозитория Zabbix
  50. Установка пакетов Zabbix
  51. Импорт начальной схемы базы данных
  52. Настройка Nginx для Zabbix
  53. Настройка PHP-FPM для Zabbix
  54. Создание расширения TimescaleDB в базе
  55. Применение схемы TimescaleDB (гипертаблицы)
  56. Проверка установки расширения
  57. Настройка Zabbix Server для масштаба 1000+ устройств
  58. Подключение к базе данных
  59. Рабочие процессы (pollers)
  60. Trap и SNMP обработчики
  61. Препроцессинг и эскалации
  62. Таймеры и триггеры
  63. Кэши — ключевой параметр производительности
  64. Сетевые таймауты
  65. Логирование и диагностика
  66. Параметры для TimescaleDB
  67. Мониторинг VMware (опционально)
  68. Полный итоговый конфиг для 1000+ устройств
  69. Мониторинг утилизации кэшей
  70. Таблица рекомендуемых параметров по масштабу
  71. Установка языковых пакетов (опционально)
  72. Запуск и включение всех сервисов
  73. Проверка статуса сервисов
  74. Просмотр лога Zabbix Server
  75. Начальная настройка через веб-интерфейс
  76. Возврат SELinux в режим enforcing
  77. Включение enforcing
  78. Проверка работы сервисов после включения enforcing
  79. Диагностика при возникновении ошибок
  80. Создание кастомной политики при нестандартных блокировках
  81. Настройка TimescaleDB Housekeeping в веб-интерфейсе
  82. Мониторинг самого Zabbix Server (Zabbix Server Health)
  83. Что отслеживает шаблон
  84. Подключение шаблона через веб-интерфейс
  85. Ключевые триггеры и пороги
  86. Проверка через System Information
  87. Устранение типичных проблем
  88. Zabbix server не запускается
  89. Ошибка подключения к БД в веб-интерфейсе
  90. Nginx отдаёт ошибку 502 Bad Gateway
  91. TimescaleDB: версия слишком новая
  92. Справочник: ключевые пути и команды

Версии компонентов

Операционная системаAlma Linux 10 (x86_64)
Zabbix7.4 (последняя стабильная)
PostgreSQL17 (из официального PGDG репозитория)
TimescaleDB2.x (из официального репозитория)
Nginxstable (из AppStream или nginx.org)
PHP8.3 (из AppStream)

Предварительные требования

Перед началом установки убедитесь в следующем:

  • Сервер работает под управлением Alma Linux 10 с доступом в интернет
  • У вас есть права sudo или root
  • Минимальные ресурсы: 4 CPU, 16 ГБ RAM, 100 ГБ диск (для production — больше)
  • Файрвол настроен или доступны порты 80, 443, 10050, 10051

Предварительная настройка сервера

Перед установкой компонентов необходимо правильно подготовить операционную систему. Эти шаги обеспечивают стабильную и предсказуемую работу Zabbix в production-окружении.

Настройка имени хоста (hostname)

Установите постоянное имя хоста. Оно будет использоваться в Zabbix и в SSL-сертификатах:

sudo hostnamectl set-hostname zabbix.example.ru
 
# Проверить результат:
hostnamectl

Добавьте имя хоста в /etc/hosts для локального разрешения:

sudo bash -c 'echo "127.0.0.1   zabbix.example.ru zabbix" >> /etc/hosts'

Настройка временной зоны

Корректная временная зона критична для Zabbix — все метрики и триггеры привязаны ко времени сервера:

# Посмотреть доступные временные зоны:
timedatectl list-timezones | grep Europe
 
# Установить временную зону (пример — Москва):
sudo timedatectl set-timezone Europe/Moscow
 
# Проверить:
timedatectl

Настройка синхронизации времени (chrony)

sudo dnf install -y chrony
sudo systemctl enable chronyd --now
 
# Проверить синхронизацию (должен быть символ * у активного источника):
chronyc sources -v
 
# Принудительная синхронизация:
sudo chronyc makestep

Если сервер находится в изолированной сети — укажите внутренний NTP-сервер в /etc/chrony.conf, заменив строки pool/server.

Настройка параметров ядра (sysctl)

Оптимизация сетевых параметров и параметров памяти для повышения производительности Zabbix и PostgreSQL:

sudo tee /etc/sysctl.d/99-zabbix.conf <<'EOF'
# Размер сетевых буферов
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
 
# Очередь входящих соединений
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
 
# Переиспользование портов TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
 
# Параметры разделяемой памяти для PostgreSQL
kernel.shmmax = 2147483648
kernel.shmall = 524288
 
# Уменьшить swappiness — PostgreSQL предпочитает работать в RAM
vm.swappiness = 10
EOF
 
sudo sysctl --system

kernel.shmmax и kernel.shmall указаны для сервера с 4–8 ГБ RAM. Для больших серверов увеличьте shmmax до ~50% от объёма RAM.

Настройка лимитов файловых дескрипторов

Zabbix и PostgreSQL при высокой нагрузке открывают большое количество файловых дескрипторов:

sudo tee /etc/security/limits.d/99-zabbix.conf <<'EOF'
# Лимиты для пользователя zabbix
zabbix          soft    nofile          65536
zabbix          hard    nofile          65536
zabbix          soft    nproc           16384
zabbix          hard    nproc           16384
 
# Лимиты для пользователя postgres
postgres        soft    nofile          65536
postgres        hard    nofile          65536
postgres        soft    nproc           16384
postgres        hard    nproc           16384
EOF

Проверьте, что PAM подключает limits:

grep -q pam_limits /etc/pam.d/system-auth || echo 'session required pam_limits.so' | sudo tee -a /etc/pam.d/system-auth

Отключение Transparent Huge Pages (THP)

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

# Отключить немедленно (до перезагрузки):
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
 
# Отключить постоянно через systemd-сервис:
sudo tee /etc/systemd/system/disable-thp.service <<'EOF'
[Unit]
Description=Disable Transparent Huge Pages
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target
 
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
 
[Install]
WantedBy=basic.target
EOF
 
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp

Настройка swap

Рекомендуется иметь swap равный объёму RAM (или минимум 4 ГБ) для защиты от OOM при пиковых нагрузках PostgreSQL:

# Проверить наличие swap:
free -h
 
# Если swap отсутствует — создать файл подкачки 4 ГБ:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
 
# Добавить в /etc/fstab для постоянного монтирования:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Проверка и отключение ненужных сервисов

# Проверить, что Apache (httpd) не запущен (используем Nginx):
sudo systemctl stop httpd 2>/dev/null; sudo systemctl disable httpd 2>/dev/null
 
# Посмотреть все запущенные сервисы:
systemctl list-units --type=service --state=running

Настройка SSH (опционально)

Базовое усиление SSH перед началом работы с сервером:

# Запретить вход root по паролю (рекомендуется):
sudo sed -i 's/^#PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
 
# Изменить порт SSH (по желанию, например на 2222):
# sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
 
sudo systemctl restart sshd

Если меняете порт SSH — не забудьте открыть новый порт в файрволе до перезапуска sshd: sudo firewall-cmd —permanent —add-port=2222/tcp && sudo firewall-cmd —reload

Итоговая проверка перед установкой

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

echo '=== Hostname ===' && hostname -f
echo '=== Timezone ===' && timedatectl | grep 'Time zone'
echo '=== Time sync ===' && chronyc tracking | grep 'System time'
echo '=== THP ===' && cat /sys/kernel/mm/transparent_hugepage/enabled
echo '=== Swap ===' && free -h | grep Swap
echo '=== Limits ===' && ulimit -n

Вывод THP должен содержать [never]. Swap должен быть ненулевым. ulimit -n должен показывать 65536 (для этого может потребоваться перезайти в сессию).

Настройка сетевого экрана (firewalld)

Alma Linux 10 использует firewalld — динамический менеджер правил на основе nftables. В этом разделе описана полная настройка правил для Zabbix с учётом принципа минимальных привилегий.

Проверка состояния firewalld

# Убедиться, что firewalld запущен и активен:
sudo systemctl status firewalld
 
# Если не запущен — запустить и добавить в автозагрузку:
sudo systemctl enable firewalld --now
 
# Просмотр текущей конфигурации:
sudo firewall-cmd --list-all

Просмотр зон и активного интерфейса

firewalld разделяет трафик по зонам. По умолчанию активна зона public. Проверьте, к какой зоне привязан сетевой интерфейс:

# Посмотреть все зоны:
sudo firewall-cmd --get-zones
 
# Узнать активную зону и привязанные интерфейсы:
sudo firewall-cmd --get-active-zones
 
# Посмотреть имя сетевого интерфейса:
ip -o link show | awk '{print $2}' | grep -v lo

Все команды ниже применяются к зоне public (—zone=public). Если ваш интерфейс привязан к другой зоне — замените public на нужное значение.

Открытие портов для веб-интерфейса Zabbix

# HTTP — для доступа к веб-интерфейсу Zabbix
sudo firewall-cmd --zone=public --permanent --add-service=http
 
# HTTPS — если планируется SSL/TLS (Let's Encrypt или корпоративный сертификат)
sudo firewall-cmd --zone=public --permanent --add-service=https

Открытие портов Zabbix Server и Agent

# Порт Zabbix Server: приём данных от Proxy и пассивных агентов
sudo firewall-cmd --zone=public --permanent --add-port=10051/tcp
 
# Порт Zabbix Agent: опрос активных агентов сервером (пассивные проверки)
sudo firewall-cmd --zone=public --permanent --add-port=10050/tcp

Ограничение доступа к PostgreSQL

PostgreSQL должен быть доступен только локально (127.0.0.1). Никогда не открывайте порт 5432 публично. Если PostgreSQL и Zabbix Server находятся на разных хостах — разрешите доступ только с конкретного IP:

# Вариант 1: PostgreSQL на том же сервере — порт НЕ открываем (по умолчанию закрыт).
# Проверяем через --list-all, а не --list-ports: порт может быть открыт через
# предопределённый сервис 'postgresql', который --list-ports не показывает.
sudo firewall-cmd --zone=public --list-all | grep 5432
# Вывод должен быть пустым.
 
# Вариант 2: PostgreSQL на отдельном сервере — разрешить доступ только с IP Zabbix Server:
# sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
#   'rule family=ipv4 source address=<IP_Zabbix_Server> port port=5432 protocol=tcp accept'

Никогда не открывайте порт PostgreSQL (5432) без привязки к конкретному IP-адресу источника — это критическая уязвимость безопасности.

Настройка rich rules для ограничения доступа к веб-интерфейсу

Если доступ к веб-интерфейсу Zabbix нужно разрешить только с определённых IP-адресов (например, из офисной сети):

# Сначала удалить публичный доступ к HTTP/HTTPS:
sudo firewall-cmd --zone=public --permanent --remove-service=http
sudo firewall-cmd --zone=public --permanent --remove-service=https
 
# Разрешить доступ только из конкретной подсети (пример: 192.168.1.0/24):
sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
  'rule family=ipv4 source address=192.168.1.0/24 service name=http accept'
sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
  'rule family=ipv4 source address=192.168.1.0/24 service name=https accept'
 
# Или разрешить доступ с единственного IP (например, jump-сервера):
sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
  'rule family=ipv4 source address=10.0.0.5/32 service name=http accept'

Ограничение доступа к Zabbix Server по IP

Если Zabbix Proxy или агенты работают только в определённой подсети — ограничьте доступ к порту 10051:

# Удалить открытый порт и заменить rich rule-ом:
sudo firewall-cmd --zone=public --permanent --remove-port=10051/tcp
 
# Разрешить только из подсети мониторинга (пример: 10.10.0.0/16):
sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
  'rule family=ipv4 source address=10.10.0.0/16 port port=10051 protocol=tcp accept'

Защита от брутфорса SSH (rate limiting)

Ограничьте количество попыток подключения по SSH для защиты от перебора паролей. Важно соблюдать правильный порядок шагов: сначала добавить rate-limit правило, убедиться что SSH работает, и только потом убрать стандартный сервис — иначе можно заблокировать себя на сервере.

# ШАГ 1: Добавить rate-limit правило (стандартный сервис ssh пока остаётся!).
# Формат лимита: N/s (секунды), N/m (минуты), N/h (часы), N/d (дни).
# firewalld НЕ поддерживает дробные единицы вида '3/30s' — только целые единицы.
sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
  'rule service name=ssh limit value=3/m accept'
sudo firewall-cmd --reload
 
# ШАГ 2: Проверить SSH в НОВОЙ сессии (не закрывая текущую!).
# Откройте второй терминал и подключитесь к серверу заново.
# Если подключение успешно — переходите к шагу 3.
# Если не подключается — откатите изменения из текущего терминала:
# sudo firewall-cmd --zone=public --permanent --remove-rich-rule='rule service name=ssh limit value=3/m accept'
# sudo firewall-cmd --reload
 
# ШАГ 3: Только после успешной проверки — убрать стандартный сервис ssh.
sudo firewall-cmd --zone=public --permanent --remove-service=ssh
sudo firewall-cmd --reload
 
# Альтернатива: разрешить SSH только с конкретных IP (самый безопасный вариант):
# sudo firewall-cmd --zone=public --permanent --remove-service=ssh
# sudo firewall-cmd --zone=public --permanent --add-rich-rule=\
#   'rule family=ipv4 source address=<ваш_IP>/32 service name=ssh accept'
# sudo firewall-cmd --reload

Никогда не удаляйте стандартный сервис ssh до того, как убедились, что новое правило работает. При блокировке вам понадобится консольный доступ (KVM, IPMI, VNC) для восстановления.

Применение всех правил

sudo firewall-cmd --reload
 
# Проверить итоговую конфигурацию зоны public:
sudo firewall-cmd --zone=public --list-all

Проверка открытых портов

# Проверить, какие порты реально прослушиваются:
sudo ss -tlnp
 
# Проверить правила nftables (backend firewalld):
sudo nft list ruleset | grep -E 'zabbix|http|postgres'
 
# Проверить доступность порта с другого хоста (выполнить на клиенте):
nc -zv <IP_сервера> 10051
nc -zv <IP_сервера> 80

Итоговая таблица портов Zabbix

ПортПротоколНаправлениеНазначение
80TCPВходящийHTTP — веб-интерфейс Zabbix
443TCPВходящийHTTPS — веб-интерфейс (при наличии SSL)
10050TCPВходящийZabbix Agent (пассивные проверки — сервер опрашивает агента)
10051TCPВходящийZabbix Server (приём данных от агентов и Proxy)
5432TCPЛокальныйPostgreSQL — только localhost, не открывать публично
22TCPВходящийSSH — административный доступ (рекомендуется ограничить по IP)

Обновление системы и базовая настройка

Обновление пакетов

sudo dnf update -y

Установка базовых утилит

sudo dnf install -y nano wget curl tar gzip

Подключение EPEL

В Alma Linux 10 ситуация с EPEL изменилась по сравнению с предыдущими версиями. RHEL 10 перешёл на архитектуру x86-64-v3, и стандартный EPEL следует за ним. Alma Linux 10 поставляется в двух вариантах: x86-64-v3 (по умолчанию) и x86-64-v2 (для более старого железа). Репозиторий CRB (CodeReady Builder) начиная с Alma Linux 10.1 включён по умолчанию — он является обязательной зависимостью для пакетов EPEL.

# Определить архитектуру текущей установки:
uname -m && python3 -c "import platform; print(platform.machine())"
 
# Для x86-64-v3 (стандартная установка — большинство современных серверов):
sudo dnf install -y epel-release
 
# Убедиться, что CRB включён (требуется для зависимостей EPEL):
# dnf config-manager входит в пакет dnf-utils — установим его явно:
sudo dnf install -y dnf-utils
sudo dnf config-manager --set-enabled crb
 
# Проверить подключённые репозитории:
sudo dnf repolist

Если сервер работает на x86-64-v2 (старое железо) — стандартный epel-release не подойдёт. В этом случае используйте репозиторий AlmaLinux EPEL для v2: https://almalinux.org/blog/2025-06-26-epel-v2-now-covers-almalinux-10-stable/

Исключение пакетов Zabbix из EPEL

Репозиторий EPEL содержит устаревшие пакеты Zabbix, которые могут конфликтовать с официальными. Необходимо исключить их:

sudo bash -c 'echo "excludepkgs=zabbix*" >> /etc/yum.repos.d/epel.repo'

Настройка SELinux (Permissive на этапе установки)

На время установки переводим SELinux в режим permissive, чтобы исключить блокировку установщиков и инициализации сервисов:

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
 
# Проверить текущий режим:
getenforce

Пакет zabbix-selinux-policy будет установлен в шаге 8 вместе с остальными пакетами Zabbix. Он содержит готовые SELinux-политики для Zabbix и понадобится при возврате в режим enforcing после завершения установки. Не пропускайте его установку, даже если сейчас SELinux в permissive.

Установка и настройка Nginx

Установка Nginx

Nginx доступен в AppStream репозитории Alma Linux 10 — дополнительных репозиториев не требуется:

sudo dnf install -y nginx

Установка PHP-FPM

sudo dnf install -y php php-fpm php-pgsql php-gd php-mbstring php-xml \
    php-ldap php-bcmath

PHP тянет httpd как слабую зависимость — немедленно останавливаем и маскируем его, чтобы он не занял порт 80 вместо Nginx:

sudo systemctl stop httpd 2>/dev/null
sudo systemctl disable httpd 2>/dev/null
sudo systemctl mask httpd

Конфиги /etc/nginx/conf.d/zabbix.conf и /etc/php-fpm.d/zabbix.conf создаются пакетом zabbix-nginx-conf, который устанавливается на шаге 8. Их настройка (порт, server_name, timezone, pm.max_children) выполняется в подшаге 8.4 — после установки пакетов Zabbix.

Настройка SELinux для PostgreSQL + Nginx

Пакет zabbix-selinux-policy уже установлен при установке пакетов Zabbix. Здесь настраиваем дополнительные булевы переменные SELinux, необходимые для работы связки Nginx + PHP-FPM + PostgreSQL. Эти команды безопасно выполнять в режиме permissive — они вступят в полную силу после возврата в enforcing.

Разрешения для Nginx и PostgreSQL

# Разрешить Nginx подключаться к PostgreSQL (для фронтенда Zabbix)
sudo setsebool -P httpd_can_network_connect_db on
 
# Разрешить Nginx выполнять произвольные сетевые подключения
sudo setsebool -P httpd_can_network_connect on

Проверка применённых булевых переменных

# Убедиться, что оба параметра включены (on):
getsebool httpd_can_network_connect_db httpd_can_network_connect

Параметр -P сохраняет значение постоянно (persistent) — изменение переживёт перезагрузку. Без -P булева переменная сбросится после reboot.

Установка и настройка PostgreSQL 17

Добавление репозитория PostgreSQL

Устанавливаем PostgreSQL из официального репозитория PGDG для максимальной совместимости:

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql 2>/dev/null || true  # EL10: modularity removed, error is expected

Установка PostgreSQL 17

sudo dnf install -y postgresql17 postgresql17-server postgresql17-contrib

Инициализация базы данных

sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
sudo systemctl enable postgresql-17 --now

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

Создаём пользователя zabbix в PostgreSQL и базу данных:

sudo -u postgres createuser --pwprompt zabbix
# Введите и подтвердите пароль для пользователя zabbix
 
sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix

Запомните пароль — он потребуется при настройке Zabbix server.

Установка TimescaleDB

На Alma Linux 10 (EL10) репозиторий packagecloud (timescale/timescaledb) пакетов для el/10 не предоставляет — доступны только el/7, el/8, el/9. Для EL10 TimescaleDB устанавливается из PGDG-репозитория, который уже подключён в шаге 6 для установки PostgreSQL 17.

Установка TimescaleDB из PGDG-репозитория

PGDG-репозиторий поставляет TimescaleDB в виде пакета timescaledb_17, привязанного к версии PostgreSQL:

# Проверить доступность пакета в PGDG (репозиторий уже подключён из шага 6):
dnf search timescaledb | grep 17
 
# Установить TimescaleDB для PostgreSQL 17:
sudo dnf install -y timescaledb_17

Пакет timescaledb_17 из PGDG автоматически устанавливает расширение в нужный каталог PostgreSQL 17. Отдельный loader-пакет (timescaledb-2-loader-postgresql-17) при этом не требуется.

Настройка shared_preload_libraries

TimescaleDB необходимо добавить в параметр shared_preload_libraries в postgresql.conf. Используем ALTER SYSTEM — это надёжнее прямого редактирования файла:

sudo -u postgres psql -c "ALTER SYSTEM SET shared_preload_libraries = 'timescaledb';"
 
# Проверить результат в postgresql.auto.conf (куда пишет ALTER SYSTEM):
sudo grep 'shared_preload_libraries' /var/lib/pgsql/17/data/postgresql.auto.conf
# Ожидаемый вывод: shared_preload_libraries = 'timescaledb'

Оптимизация параметров PostgreSQL для TimescaleDB

Для production-окружения необходимо настроить параметры памяти. Если пакет timescaledb-tools с утилитой timescaledb-tune доступен в репозитории — используйте его. Если нет — настройте вручную через ALTER SYSTEM:

# Проверить наличие timescaledb-tools:
dnf info timescaledb-tools 2>/dev/null && echo 'доступен' || echo 'недоступен'
 
# Если timescaledb-tools доступен:
# sudo dnf install -y timescaledb-tools
# sudo timescaledb-tune --pg-config /usr/pgsql-17/bin/pg_config --max-conns=125
 
# Если недоступен — настроить вручную (для сервера 16 ГБ RAM, 4 CPU):
sudo -u postgres psql <<'SQL'
ALTER SYSTEM SET shared_buffers = '4GB';
ALTER SYSTEM SET effective_cache_size = '12GB';
ALTER SYSTEM SET maintenance_work_mem = '1GB';
ALTER SYSTEM SET work_mem = '64MB';
ALTER SYSTEM SET max_connections = 200;
SQL

Значения памяти рассчитаны на 16 ГБ RAM: shared_buffers = 25% RAM, effective_cache_size = 75% RAM. Скорректируйте под ваш сервер.

Перезапуск PostgreSQL

Изменения shared_preload_libraries и параметров памяти вступают в силу только после перезапуска:

sudo systemctl restart postgresql-17
 
# Убедиться, что PostgreSQL запустился без ошибок:
sudo systemctl status postgresql-17
 
# Проверить, что timescaledb загружен:
sudo -u postgres psql -c "SHOW shared_preload_libraries;"
# Ожидаемый вывод: shared_preload_libraries = 'timescaledb'

Установка Zabbix 7.4

Добавление официального репозитория Zabbix

sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.4/release/alma/10/noarch/zabbix-release-latest.el10.noarch.rpm
sudo dnf clean all

Установка пакетов Zabbix

Устанавливаем сервер, фронтенд, агент и конфигурацию для Nginx:

sudo dnf install -y zabbix-server-pgsql \
    zabbix-web-pgsql \
    zabbix-nginx-conf \
    zabbix-sql-scripts \
    zabbix-selinux-policy \
    zabbix-agent2

zabbix-selinux-policy устанавливается сейчас, пока SELinux в режиме permissive. Пакет содержит готовые политики (разрешения сокетов, портов, соединений с PostgreSQL), которые автоматически вступят в силу после возврата SELinux в enforcing в шаге 15. Устанавливать его после смены режима не нужно.

Импорт начальной схемы базы данных

Загружаем структуру базы данных Zabbix (выполняется от имени пользователя zabbix):

zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

Импорт может занять несколько минут. Вывод в терминале отсутствует — команда выполняется молча. Если нужен индикатор прогресса, установите утилиту pv:

# Опционально — установить pv для отображения прогресса:
sudo dnf install -y pv
 
# Импорт с индикатором прогресса:
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | pv | sudo -u zabbix psql zabbix

Настройка Nginx для Zabbix

Файл /etc/nginx/conf.d/zabbix.conf создаётся пакетом zabbix-nginx-conf, который устанавливается в шаге 8. Настроить его сейчас нельзя — файла ещё не существует. Этот раздел описывает что нужно будет сделать сразу после установки Zabbix на шаге 8. По умолчанию в конфиге прописан порт 8080, а директивы listen и server_name закомментированы — без изменений веб-интерфейс будет недоступен на стандартном порту 80.

sudo nano /etc/nginx/conf.d/zabbix.conf

Найдите закомментированные строки и приведите их к следующему виду (замените 8080 на 80 и укажите ваш hostname или IP):

# Было (закомментировано по умолчанию):
# listen          8080;
# server_name     zabbix.example.ru;
 
# Стало (раскомментировать и изменить):
listen          80;
server_name     zabbix.example.ru;

Если на сервере уже есть другой сайт на порту 80 — используйте отдельный server_name и убедитесь, что нет конфликта с другими конфигами в /etc/nginx/conf.d/.

После редактирования обязательно проверьте синтаксис конфига перед перезапуском:


sudo nginx -t
# Ожидаемый вывод:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

Настройка PHP-FPM для Zabbix

Файл /etc/php-fpm.d/zabbix.conf также создаётся при установке пакетов Zabbix в шаге 8. Внести изменения можно будет только после шага 8. Ниже описаны параметры, которые нужно настроить:

sudo nano /etc/php-fpm.d/zabbix.conf

Временная зона — обязательный параметр, без него веб-установщик выдаст ошибку:

# Раскомментируйте и укажите вашу временную зону:
php_value[date.timezone] = Europe/Moscow

Список допустимых значений: https://www.php.net/manual/ru/timezones.php

Для окружения с 1000+ устройств дополнительно увеличьте следующие параметры. Они влияют на стабильность веб-интерфейса при высокой нагрузке и длительных операциях (массовый импорт хостов, генерация отчётов, сложные запросы):

# Максимальное число одновременных PHP-FPM процессов.
# По умолчанию — 5, чего недостаточно при большом числе параллельных сессий.
pm.max_children = 50
 
# Таймаут выполнения одного запроса (секунды).
# По умолчанию — 0 (без ограничений) или 60 в некоторых сборках.
# Для долгих операций (импорт шаблонов, массовые действия) устанавливаем 300.
request_terminate_timeout = 300

pm.max_children: каждый PHP-FPM процесс занимает ~30–50 МБ RSS (реальная физическая память). Виртуальная память (VSZ) будет выше, но это нормально — Linux не выделяет её физически до реального использования. При значении 50 реальное потребление составит ~1.5–2.5 ГБ RSS. Для окружения 1000+ устройств pm.max_children=50 является обоснованным значением.

Создание расширения TimescaleDB в базе

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

Применение схемы TimescaleDB (гипертаблицы)

Скрипт конвертирует таблицы истории и трендов в гипертаблицы TimescaleDB:

cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix

Предупреждения вида «best practices are not followed» при использовании TimescaleDB 2.9.0+ можно игнорировать — конфигурация применяется корректно

Проверка установки расширения

Убедитесь, что расширение TimescaleDB корректно зарегистрировано в базе данных zabbix:

# Способ 1: краткий список расширений (мета-команда psql)
sudo -u postgres psql zabbix -c "\\dx"
# В выводе должны присутствовать: timescaledb и plpgsql
 
# Способ 2: явный SQL-запрос к системному каталогу
sudo -u postgres psql zabbix -c "SELECT extname, extversion FROM pg_extension;"

Ожидаемый вывод второй команды должен содержать строки: plpgsql и timescaledb с номером версии (например, 2.x.x). Если timescaledb отсутствует — вернитесь к шагу 9.1 и повторите создание расширения

Настройка Zabbix Server для масштаба 1000+ устройств

При мониторинге более 1000 узлов конфигурация по умолчанию становится узким местом. Необходимо правильно рассчитать количество процессов-обработчиков, настроить кэши и параметры опроса. Все изменения вносятся в файл /etc/zabbix/zabbix_server.conf.

sudo cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.orig
sudo nano /etc/zabbix/zabbix_server.conf

Подключение к базе данных

Базовые параметры соединения с PostgreSQL:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<ваш_пароль>
 
# Размер пула соединений с БД.
# Правило: не более max_connections в postgresql.conf минус 10 (резерв для psql/admin).
# Для 1000+ устройств рекомендуется 20-50.

DBPassword хранится в файле в открытом виде (plain text). По умолчанию права на файл могут быть слишком широкими. Сразу после редактирования ограничьте доступ — файл должен быть читаем только пользователем root и группой zabbix:

sudo chown root:zabbix /etc/zabbix/zabbix_server.conf
sudo chmod 640 /etc/zabbix/zabbix_server.conf
 
# Проверить результат:
ls -l /etc/zabbix/zabbix_server.conf
# Ожидаемый вывод: -rw-r----- 1 root zabbix ... zabbix_server.conf

Тонкость: DBHost=localhost заставляет PostgreSQL использовать TCP-соединение (127.0.0.1), а не UNIX-сокет. UNIX-сокет быстрее и не требует сетевого стека, но тогда нужно оставить DBHost= пустым. Для большинства установок разница незначительна; localhost удобнее при настройке SELinux и pg_hba.conf.

Пример конфигурации для UNIX-сокета (если хотите максимальную производительность локального соединения):

# Для UNIX-сокета — оставить значение пустым:
DBHost=
# При этом убедитесь, что в pg_hba.conf разрешено локальное подключение
# пользователя zabbix через метод 'trust' или 'md5' для local-сокета.

Рабочие процессы (pollers)

Pollers — процессы, которые опрашивают агентов и внешние источники. Их количество напрямую влияет на пропускную способность мониторинга. Для 1000+ устройств значения по умолчанию (5–10) недостаточны:

# Основные опросчики (пассивные агенты, SNMP, внешние проверки)
# Правило: ~1 poller на 50-100 одновременных проверок
StartPollers=80
 
# Опросчики для недоступных хостов (unreachable)
# Должны обрабатывать все хосты в случае массового падения
StartPollersUnreachable=20
 
# IPMI-опросчики (если используется мониторинг серверного оборудования)
StartIPMIPollers=5
 
 
# HTTP-агент (мониторинг URL, REST API, переименован в StartHTTPAgentPollers в Zabbix 7.x)
StartHTTPAgentPollers=20

Суммарное количество всех poller-процессов потребляет ~20–30 МБ RAM каждый. При 80 pollers — это ~2 ГБ только на процессы опроса. Для сервера с 8+ ГБ RAM это нормально.

Trap и SNMP обработчики

# SNMP trapper — приём SNMP-trap от оборудования
StartSNMPTrapper=1
 
# Порт для SNMP trapper
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
 
# Java gateway (для мониторинга JMX — Java-приложений)
# JavaGateway=127.0.0.1
# JavaGatewayPort=10052
# StartJavaPollers=5

Препроцессинг и эскалации

# Процессы препроцессинга (JavaScript, регулярки, JSONPath на входящих данных)
# При 1000+ устройств входящий поток метрик большой — увеличиваем
StartPreprocessors=24
 
# Менеджер эскалаций (отправка уведомлений, alert actions)
StartEscalators=4
 
# Обработчики алертов (media types: email, telegram, webhook и т.д.)
StartAlerters=10
 
# Обработчик истории (history poller) — запись метрик в PostgreSQL/TimescaleDB
# Ключевой параметр для TimescaleDB: увеличение снижает задержку записи
StartHistoryPollers=8
 
# Количество значений в одном batch-запросе к БД (history cache flush)
# Увеличение снижает нагрузку на PostgreSQL при высоком NVPS
HistoryCacheSyncFrequency=1

Таймеры и триггеры

# Процессы вычисления триггеров
# При большом количестве триггеров (>10000) увеличиваем
StartTimers=4
 
# Housekeeping — очистка устаревших данных
# С TimescaleDB можно увеличить интервал, т.к. очистка эффективнее
HousekeepingFrequency=1
 
# Максимальное количество строк, удаляемых housekeeper за один проход
# Увеличение ускоряет очистку, но создаёт нагрузку на БД
MaxHousekeeperDelete=50000

Кэши — ключевой параметр производительности

Кэши хранятся в shared memory. Недостаточный размер кэша — главная причина деградации производительности Zabbix при масштабировании. Проверяйте утилизацию кэшей в Administration → Queue и разделе System Information.

# Кэш конфигурации — хранит хосты, айтемы, триггеры в памяти
# Для 1000 устройств с ~50 метриками каждый: ~500K айтемов → 512MB
CacheSize=512M
 
# Кэш истории — буфер между сбором метрик и записью в PostgreSQL
# Правило: NVPS (new values per second) × 4 байта × период сброса (сек) × 2
# Для 1000 устройств при NVPS ~5000: 5000 × 4 × 5 × 2 = ~200MB
HistoryCacheSize=256M
 
# Кэш индексов истории — ускоряет поиск в history cache
# Обычно 1/4 от HistoryCacheSize
HistoryIndexCacheSize=64M
 
# Кэш трендов — буфер для агрегированных данных (тренды по часам)
TrendCacheSize=64M
 
# Кэш функций триггеров (last(), avg(), max() и т.д.)
# При большом количестве триггеров увеличить до 128M
ValueCacheSize=128M
 
# Кэш VM (виртуальные машины — VMware и т.д.)
# Если не используется VMware мониторинг — оставить по умолчанию
# VMwareCacheSize=256M

Суммарный объём всех кэшей: ~1 ГБ. Убедитесь, что на сервере достаточно RAM. Для 1000+ устройств рекомендуется минимум 8 ГБ RAM только для Zabbix Server.

Сетевые таймауты

Корректные таймауты предотвращают зависание poller-процессов при недоступных хостах и позволяют быстрее переключаться на следующий хост:

# Таймаут соединения с агентом/устройством (секунды)
# Не делать слишком маленьким — медленные устройства будут недоступны
Timeout=10
 
# Таймаут внешних проверок (скрипты, UserParameter)
# Должен быть >= Timeout
# Timeout применяется ко всем проверкам, включая внешние
 
# Задержка перед повторной попыткой опроса недоступного хоста (секунды)
UnreachablePeriod=45
 
# Период, после которого хост считается недоступным (секунды)
UnavailableDelay=60
 
# Задержка опроса недоступных хостов (секунды)
# Уменьшить для быстрого обнаружения восстановления
UnreachableDelay=15

Логирование и диагностика

# Файл лога
LogFile=/var/log/zabbix/zabbix_server.log
 
# Максимальный размер файла лога (МБ, 0 = без ограничений)
LogFileSize=100
 
# Уровень логирования:
# 0=panic, 1=critical, 2=error, 3=warning, 4=debug, 5=trace
# В production использовать 3 (warning). Для диагностики временно 4.
DebugLevel=3
 
# Логировать медленные SQL-запросы к БД (мс, 0 = отключено)
# Полезно для диагностики проблем с PostgreSQL
LogSlowQueries=3000

Параметры для TimescaleDB

# Разрешить работу с версиями TimescaleDB новее, чем поддерживается Zabbix официально
# Нужно, если TimescaleDB обновился, а Zabbix ещё не добавил его в список совместимых
# AllowUnsupportedDBVersions=1
 
# Отключить встроенный housekeeper для истории и трендов — TimescaleDB управляет этим сам
# (Настраивается в веб-интерфейсе: Administration > Housekeeping)
# Параметры ниже задаются через UI после установки:
#   Override item history period = включить
#   Override item trend period   = включить

Мониторинг VMware (опционально)

Если необходим мониторинг VMware vCenter или ESXi — раскомментируйте и добавьте в zabbix_server.conf следующие параметры, затем перезапустите сервер:

### VMWARE ###
# Количество VMware collector процессов
StartVMwareCollectors=2
 
# Интервал синхронизации данных VMware (секунды)
VMwareFrequency=60
 
# Интервал сбора метрик производительности VMware
VMwarePerfFrequency=60
 
# Размер кэша VMware
VMwareCacheSize=16M
 
# Таймаут соединения с VMware
VMwareTimeout=10

После включения VMware collector добавьте хост vCenter/ESXi в Zabbix: Data collection → Hosts → Create host. Укажите макросы {$VMWARE.URL}, {$VMWARE.USERNAME}, {$VMWARE.PASSWORD} и подключите шаблон VMware.

Полный итоговый конфиг для 1000+ устройств

Итоговый набор параметров для вставки в zabbix_server.conf (остальные параметры оставить по умолчанию):

### DATABASE ###
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<ваш_пароль>
 
### POLLERS ###
StartPollers=80
StartPollersUnreachable=20
StartIPMIPollers=5
StartHTTPAgentPollers=20
 
### TRAPS & SYNC ###
StartSNMPTrapper=1
StartPreprocessors=24
StartEscalators=4
StartAlerters=10
StartHistoryPollers=8
StartTimers=4
 
### CACHES ###
CacheSize=512M
HistoryCacheSize=256M
HistoryIndexCacheSize=64M
TrendCacheSize=64M
ValueCacheSize=128M
 
### TIMEOUTS ###
Timeout=10
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
 
### HOUSEKEEPING ###
HousekeepingFrequency=1
MaxHousekeeperDelete=50000
 
### VMWARE (раскомментировать если нужен мониторинг VMware) ###
# StartVMwareCollectors=2
# VMwareFrequency=60
# VMwarePerfFrequency=60
# VMwareCacheSize=16M
# VMwareTimeout=10
 
### LOGGING ###
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=100
DebugLevel=3
LogSlowQueries=3000

Мониторинг утилизации кэшей

После запуска регулярно проверяйте утилизацию кэшей в веб-интерфейсе. Если утилизация превышает 80% — увеличивайте соответствующий кэш:

# Администрирование > Сводка системы (System Information)
# Проверить секцию: Cache statistics
#
# Configuration cache:    используемый % от CacheSize
# Value cache:            используемый % от ValueCacheSize
# History cache:          используемый % от HistoryCacheSize
# History index cache:    используемый % от HistoryIndexCacheSize
 
# Также можно проверить из лога:
grep -i 'cache' /var/log/zabbix/zabbix_server.log | tail -20
 
# Посмотреть NVPS (new values per second) в реальном времени:
grep -i 'processed' /var/log/zabbix/zabbix_server.log | tail -5

Таблица рекомендуемых параметров по масштабу

Параметрдо 5001000–20002000–50005000+
StartPollers2080150200+
StartPollersUnreachable5203050
StartHTTPPollers5204060
StartPreprocessors8244060
StartHistoryPollers481220
CacheSize128M512M1G2G+
HistoryCacheSize64M256M512M1G+
ValueCacheSize32M128M256M512M
StartHTTPAgentPollers5204060
RAM сервера (мин.)4 ГБ8 ГБ16 ГБ32+ ГБ
CPU ядра (мин.)24–88–1616+

Колонка «1000–2000» выделена синим — именно эти значения использованы в итоговом конфиге (10.11). Корректируйте в зависимости от реальной нагрузки по данным System Information.

Установка языковых пакетов (опционально)

Для корректного отображения русского интерфейса установите языковые пакеты:

sudo dnf install -y glibc-langpack-en glibc-langpack-ru
sudo localectl set-locale LANG=en_US.UTF-8

Запуск и включение всех сервисов

sudo systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php-fpm

Проверка статуса сервисов

sudo systemctl status zabbix-server
sudo systemctl status nginx
sudo systemctl status php-fpm
sudo systemctl status postgresql-17

Просмотр лога Zabbix Server

sudo tail -50 /var/log/zabbix/zabbix_server.log

В логе не должно быть сообщений об ошибках подключения к БД. Предупреждение «TimescaleDB version is too new» — некритично. Если оно появляется, добавьте в zabbix_server.conf: AllowUnsupportedDBVersions=1

Начальная настройка через веб-интерфейс

Откройте браузер и перейдите по адресу. Zabbix открывается в корне сайта — без /zabbix в пути (это поведение пакета zabbix-nginx-conf):

http://zabbix.example.ru

В мастере установки выполните следующие шаги:

  1. Выберите язык интерфейса (Russian / English) → Next step
  2. Проверьте выполнение требований PHP → все пункты должны быть зелёными → Next step
  3. Укажите параметры подключения к БД: Database type = PostgreSQL, Host = localhost, Port = 5432, Database = zabbix, User = zabbix, Password = <ваш_пароль> → Next step
  4. Укажите имя сервера (Server name) и временную зону → Next step
  5. Проверьте сводку параметров → Next step → Finish

Учётные данные по умолчанию: логин Admin, пароль zabbix. Немедленно смените пароль после первого входа в User settings → Change password

Возврат SELinux в режим enforcing

На шаге 3.5 SELinux был переведён в permissive для упрощения установки. В этом режиме политики не блокируют ничего — они только фиксируют нарушения в лог, не мешая работе сервисов. Это означает, что пока SELinux в permissive, пакет zabbix-selinux-policy фактически не проверяется. Не оставляйте сервер в таком состоянии: permissive лишает смысла всю защиту SELinux.

Выполняйте этот шаг только после того, как убедились, что Zabbix работает корректно: веб-интерфейс открывается, данные собираются, ошибок в логах нет.

Включение enforcing

# Переключить немедленно (без перезагрузки):
sudo setenforce 1
 
# Зафиксировать постоянно в конфигурации:
sudo sed -i 's/^SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config
 
# Проверить текущий режим:
getenforce
# Ожидаемый вывод: Enforcing

Проверка работы сервисов после включения enforcing

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

sudo systemctl status zabbix-server zabbix-agent2 nginx php-fpm postgresql-17

Откройте веб-интерфейс и убедитесь, что данные продолжают собираться: Reports → System Information.

Диагностика при возникновении ошибок

Если после включения enforcing какой-либо сервис перестал работать — SELinux блокирует разрешённое действие. Алгоритм диагностики:

# Посмотреть последние заблокированные действия:
sudo grep 'denied' /var/log/audit/audit.log | tail -20
 
# Более читаемый вывод с пояснениями (если установлен setroubleshoot):
sudo sealert -a /var/log/audit/audit.log 2>/dev/null | tail -50
 
# Установить setroubleshoot для удобной диагностики (опционально):
sudo dnf install -y setroubleshoot-server
sudo systemctl restart auditd

Пакет zabbix-selinux-policy (установленный в шаге 8) покрывает стандартные сценарии работы Zabbix. Если после его установки всё равно есть блокировки — скорее всего, нестандартный путь к файлу или порт. Используйте audit.log для точной диагностики.

Создание кастомной политики при нестандартных блокировках

Если zabbix-selinux-policy не покрывает специфику вашей конфигурации, можно сгенерировать дополнительный модуль политики на основе реальных блокировок:

# Сгенерировать модуль политики из лога аудита:
sudo grep 'denied' /var/log/audit/audit.log | audit2allow -M zabbix-custom
 
# Применить сгенерированный модуль:
sudo semodule -i zabbix-custom.pp
 
# Проверить, что модуль загружен:
sudo semodule -l | grep zabbix

Внимательно изучайте содержимое сгенерированного модуля (.te файл) перед применением: audit2allow разрешает всё, что было заблокировано, не анализируя легитимность действий.

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

После входа в Zabbix выполните следующие настройки для активации функций TimescaleDB:

  1. Перейдите в Administration → Housekeeping
  2. Включите Override item history period (переопределение периода хранения истории)
  3. Включите Override item trend period (переопределение периода хранения трендов)
  4. Сохраните настройки (кнопка Update)

Эти настройки необходимы для корректной работы housekeeping с TimescaleDB. Без них housekeeper не сможет удалять данные из сжатых чанков.

Мониторинг самого Zabbix Server (Zabbix Server Health)

После завершения установки рекомендуется сразу настроить самомониторинг Zabbix Server. Шаблон «Zabbix Server Health» входит в стандартную поставку и позволяет отслеживать состояние внутренних процессов, очередей, кэшей и производительности самого сервера мониторинга — критически важно для окружений с 1000+ устройств.

Что отслеживает шаблон

Шаблон Zabbix Server Health включает мониторинг следующих ключевых метрик:

  • Утилизация кэшей: Configuration cache, Value cache, History cache, History index cache — при превышении 80% нужно увеличивать размер в zabbix_server.conf
  • Очередь элементов данных (Queue): число элементов, ожидающих опроса более 10 минут — индикатор нехватки poller-процессов
  • Производительность: NVPS (new values per second) — реальный поток входящих метрик
  • Процессы сервера: процент занятости каждого типа процессов (pollers, preprocessors, history syncers и др.)
  • Внутренние проверки: доступность zabbix-agent на самом сервере
  • Highload-предупреждения: триггеры при критической утилизации ресурсов

Подключение шаблона через веб-интерфейс

Шаблон подключается к хосту Zabbix Server, который создаётся автоматически при установке:

  1. Перейдите в Data collection → Hosts
  2. Найдите хост «Zabbix server» (создаётся автоматически при установке)
  3. Нажмите на имя хоста → вкладка Templates
  4. В поле «Link new templates» введите: Zabbix Server Health
  5. Выберите шаблон из выпадающего списка → нажмите Add → Update
  6. Убедитесь, что агент на сервере запущен и доступен: интерфейс хоста должен указывать на 127.0.0.1, порт 10050

Если хост «Zabbix server» не создан автоматически — создайте его вручную: Data collection → Hosts → Create host. Укажите имя «Zabbix server», группу «Zabbix servers», интерфейс Agent: 127.0.0.1:10050.

Ключевые триггеры и пороги

После подключения шаблона обратите особое внимание на следующие триггеры:

МетрикаПорог тревогиДействие
Configuration cache utilization> 80%Увеличить CacheSize в zabbix_server.conf
Value cache utilization> 80%Увеличить ValueCacheSize
History cache utilization> 80%Увеличить HistoryCacheSize
Queue over 10 min> 100Увеличить StartPollers или оптимизировать интервалы опроса
Process busy: pollers> 75%Увеличить StartPollers в zabbix_server.conf
Process busy: preprocessors> 75%Увеличить StartPreprocessors
Process busy: history syncers> 75%Увеличить StartHistorySyncers
Zabbix agent unavailable> 1 минутыПроверить статус zabbix-agent2 на сервере

Проверка через System Information

Быстрая проверка состояния кэшей и очередей доступна без шаблона — прямо в веб-интерфейсе:

  1. Перейдите в Reports → System Information
  2. Раздел «Zabbix server details» — показывает утилизацию всех кэшей в процентах
  3. Раздел «High availability node»: статус сервера должен быть Active
  4. Перейдите в Administration → Queue → Overview — показывает число элементов в очереди с разбивкой по задержке

Если утилизация любого кэша превышает 80% сразу после запуска — значения в zabbix_server.conf (шаг 10) занижены для вашей нагрузки. Увеличьте соответствующий параметр и перезапустите сервер: sudo systemctl restart zabbix-server

Устранение типичных проблем

Zabbix server не запускается

Проверьте лог:

sudo tail -100 /var/log/zabbix/zabbix_server.log

Типичные причины: неверный пароль в zabbix_server.conf, PostgreSQL не запущен, TimescaleDB не активировано в БД.

Ошибка подключения к БД в веб-интерфейсе

# Проверить подключение от имени zabbix пользователя:
sudo -u zabbix psql -h localhost -U zabbix -d zabbix -c "SELECT version();"

Nginx отдаёт ошибку 502 Bad Gateway

# Проверить статус PHP-FPM:
sudo systemctl status php-fpm
sudo tail -30 /var/log/php-fpm/error.log

TimescaleDB: версия слишком новая

Если в логе /var/log/zabbix/zabbix_server.log появляется предупреждение о слишком новой версии TimescaleDB:

# Добавьте в /etc/zabbix/zabbix_server.conf:
AllowUnsupportedDBVersions=1
 
sudo systemctl restart zabbix-server

Справочник: ключевые пути и команды

Конфиг Zabbix Server/etc/zabbix/zabbix_server.conf
Конфиг Zabbix Frontend/etc/zabbix/web/zabbix.conf.php
Конфиг Nginx (Zabbix)/etc/nginx/conf.d/zabbix.conf
Конфиг PHP-FPM (Zabbix)/etc/php-fpm.d/zabbix.conf
Лог Zabbix Server/var/log/zabbix/zabbix_server.log
Данные PostgreSQL/var/lib/pgsql/17/data/
Конфиг PostgreSQL/var/lib/pgsql/17/data/postgresql.conf
Веб-интерфейс Zabbixhttp://<IP>/
Порт Zabbix Server10051/tcp
Порт Zabbix Agent10050/tcp

Оцените статью
IT-Sierra