1. Архитектура Zabbix и установка компонентов системы на Linux
Представьте инфраструктуру среднего банка: 5000 серверов, 2000 единиц сетевого оборудования, десятки баз данных. Если с каждого устройства собирать всего 100 метрик раз в минуту, система мониторинга должна принимать, обрабатывать, оценивать на предмет аварий и записывать на диск более 11 000 значений каждую секунду. Монолитное приложение захлебнётся под такой нагрузкой в первый же час работы. Способность Zabbix выживать и масштабироваться в подобных условиях заложена не в оптимизации конкретного куска кода, а в его строгой, раздельной архитектуре.
Анатомия системы: пять столпов Zabbix
Zabbix не является единой программой, которую можно запустить одним файлом. Это комплекс независимых демонов и служб, каждая из которых выполняет узкоспециализированную задачу. Понимание того, где заканчивается зона ответственности одного компонента и начинается другого — главный навык инженера при траблшутинге.
1. Zabbix Server (Ядро)
Это центральный процесс, написанный на языке C для максимального быстродействия. Zabbix Server — это мозг системы. Он не хранит данные долгосрочно и не рисует графики. Его задачи:Внутри Server состоит из множества подпроцессов. Например, pollers (поллеры) сами ходят за метриками, trappers (трапперы) слушают входящие соединения, а escalators (эскалаторы) отвечают за логику отправки алертов. Если система начинает тормозить, инженер настраивает количество конкретных подпроцессов в конфигурационном файле, а не просто "выделяет больше оперативной памяти".
2. База данных (Память)
Zabbix Server абсолютно "амнезичен" без базы данных. В реляционной СУБД (чаще всего MySQL/MariaDB или PostgreSQL) хранится всё:Именно база данных в 90% случаев становится узким местом (bottleneck) при масштабировании мониторинга. Скорость дисковой подсистемы (IOPS), на которой лежит БД, определяет максимальный размер инсталляции Zabbix.
3. Zabbix Frontend (Веб-интерфейс)
Лицо системы, написанное на PHP. Frontend работает под управлением веб-сервера (Apache или Nginx). Важнейший архитектурный нюанс: веб-интерфейс практически не общается с Zabbix Server напрямую.Когда вы открываете график в браузере, Frontend делает SQL-запрос напрямую в Базу данных, минуя Server. Когда вы добавляете новый сервер для мониторинга в интерфейсе, Frontend записывает эту конфигурацию в Базу данных. Zabbix Server раз в минуту (по умолчанию) перечитывает конфигурацию из БД в свою оперативную память (Configuration Cache) и только тогда начинает мониторить новый узел.
!Архитектура Zabbix: потоки данных между Server, DB, Frontend и Agents
4. Zabbix Agent
Легковесная служба, устанавливаемая на целевые ОС (Linux, Windows). Агент имеет прямой доступ к ядру ОС, файловой системе и счетчикам производительности. Он может работать в двух режимах: пассивном (ждет запроса от сервера) и активном (сам собирает метрики и отправляет их на сервер).5. Zabbix Proxy
Прокси-сервер — это "младший брат" Zabbix Server. Он устанавливается в удаленных дата-центрах, закрытых сетевых сегментах или филиалах. Прокси берет на себя черновую работу: собирает метрики с локальных агентов, буферизует их в свою собственную небольшую базу данных (часто SQLite) и затем пакетами отправляет на центральный Zabbix Server.Подготовка Linux-окружения: фундамент для установки
Установка Zabbix из исходных кодов (компиляция) применяется редко и только для специфических платформ. В Enterprise-среде стандартом является установка из официальных пакетных репозиториев (APT для Debian/Ubuntu или DNF для RHEL/AlmaLinux/Rocky).
Перед выполнением команд apt install или dnf install, инфраструктура должна быть подготовлена. Ошибки на этом этапе гарантируют проблемы в будущем.
Синхронизация времени (NTP)
В системах мониторинга время — это критический параметр. Если время на сервере базы данных отстает от времени на Zabbix Server на 2 минуты, метрики будут записываться "в прошлое", триггеры начнут ложно срабатывать, а графики отобразят разрывы. Службыchronyd или systemd-timesyncd должны быть настроены и синхронизированы с надежными NTP-серверами до начала установки компонентов.Выбор СУБД и кодировки
Исторически Zabbix поддерживает MySQL и PostgreSQL. Для новых инсталляций часто выбирают PostgreSQL из-за встроенной поддержки партиционирования таблиц (TimescaleDB), что радикально решает проблему очистки старых данных. Однако MySQL/MariaDB остается самым популярным и простым в настройке вариантом.Критический нюанс при создании базы данных MySQL — правильная кодировка и параметры сопоставления (collation). Zabbix требует строгой чувствительности к регистру. Имена хостов Server-A и server-a — это разные объекты.
При создании БД необходимо использовать:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Использование стандартного utf8mb4_general_ci (case-insensitive) приведет к тому, что база данных откажется импортировать схему Zabbix, выдав ошибку о дублирующихся ключах, так как для нее Host1 и host1 станут идентичными.
Проблема безопасных функций в MySQL 8.0+
Современные версии MySQL по умолчанию запрещают создание пользовательских функций без строгих гарантий безопасности. Схема базы данных Zabbix использует такие функции. Поэтому перед импортом схемы необходимо временно ослабить этот параметр:set global log_bin_trust_function_creators = 1;
После успешного импорта структуры таблиц этот параметр обязательно возвращается в значение 0 ради безопасности.Пошаговая логика развертывания
Процесс установки Zabbix Server с MySQL и Nginx на современный Linux-дистрибутив подчиняется строгой последовательности. Попытка запустить веб-интерфейс до импорта базы данных приведет к фатальным ошибкам PHP.
Шаг 1. Подключение официального репозитория.
Штатные репозитории ОС содержат безнадежно устаревшие версии Zabbix (например, версию 4.0 или 5.0, когда актуальна 7.0). Установка начинается с загрузки .deb или .rpm пакета zabbix-release, который добавляет ключи GPG и ссылки на серверы repo.zabbix.com.
Шаг 2. Установка пакетов.
Устанавливается мета-пакет. Для связки с MySQL и Nginx команда выглядит как установка zabbix-server-mysql, zabbix-frontend-php, zabbix-nginx-conf, zabbix-sql-scripts и zabbix-agent.
Шаг 3. Инициализация базы данных.
После создания пустой БД с правильным COLLATE, в нее загружается схема и начальные данные. В пакете zabbix-sql-scripts поставляется сжатый файл server.sql.gz.
Импорт выполняется утилитой zcat, которая читает архив и передает SQL-команды в клиент базы данных. Этот процесс может занимать от 1 до 5 минут, так как создаются сотни таблиц и загружаются дефолтные шаблоны мониторинга.
Шаг 4. Конфигурация Zabbix Server.
Главный конфигурационный файл — /etc/zabbix/zabbix_server.conf. На этапе установки в нем необходимо изменить ровно один параметр: DBPassword. Сервер должен знать, как подключиться к базе данных. Остальные параметры (количество поллеров, размеры кэшей) на старте можно оставить по умолчанию.
Шаг 5. Настройка веб-сервера и PHP.
Zabbix Frontend требователен к настройкам PHP. Конфигурационный файл Nginx для Zabbix (обычно /etc/zabbix/nginx.conf) требует раскомментирования строк с директивами listen (порт 8080 или 80) и server_name.
В настройках PHP-FPM обязательно задается часовой пояс (date.timezone), иначе веб-интерфейс откажется завершать процесс установки.
Шаг 6. Запуск и автозагрузка.
Только после выполнения всех предыдущих шагов службы zabbix-server, zabbix-agent, nginx и php-fpm запускаются и добавляются в автозагрузку (systemctl enable --now).
Невидимые барьеры: Сеть и Mandatory Access Control
Частая ситуация: службы запущены, статус active (running), но веб-интерфейс пишет "Zabbix server is not running", а агенты не присылают данные. Проблема кроется на уровне ОС.
Сетевые порты
Компоненты Zabbix общаются по строго определенным TCP-портам, которые должны быть открыты в Firewall (iptables, firewalld или ufw):SELinux (Security-Enhanced Linux)
В дистрибутивах семейства RHEL (CentOS, Rocky, AlmaLinux) по умолчанию включен SELinux в режимеEnforcing. Это система принудительного контроля доступа. Даже если процесс запущен от пользователя root, SELinux может запретить ему определенные действия.Для Zabbix SELinux создает две классические проблемы:
setsebool -P httpd_can_connect_zabbix on.Отключение SELinux (setenforce 0) — это плохая практика, нарушающая стандарты корпоративной безопасности. Правильный подход — установка пакета политик zabbix-selinux-policy, который автоматически настраивает нужные контексты и разрешения для демонов Zabbix.
Масштабирование архитектуры: роль Zabbix Proxy
Когда инфраструктура выходит за пределы одного дата-центра, прямая отправка метрик от агентов к центральному серверу становится неэффективной и опасной.
Представьте филиал с 200 серверами. Если канал связи между филиалом и головным офисом обрывается на час, метрики за этот час будут безвозвратно потеряны. Кроме того, центральный Zabbix Server вынужден поддерживать 200 отдельных TCP-соединений через WAN-канал.
Внедрение Zabbix Proxy меняет топологию. Прокси устанавливается внутри филиала.
!Сравнение топологий: прямая связь агентов с сервером против использования Zabbix Proxy
Если канал связи падает, Proxy продолжает собирать данные. Как только связь восстанавливается, он выгружает всю накопленную историю на центральный сервер. Графики достраиваются, потери данных не происходит.
Zabbix Proxy не вычисляет триггеры и не отправляет алерты. Его задача — исключительно сбор и буферизация. Конфигурацию (какие метрики собирать) Proxy получает от центрального сервера. Это делает управление централизованным: инженеру не нужно заходить на прокси-сервер для добавления нового узла сети, всё делается в едином веб-интерфейсе.
В Enterprise-инсталляциях центральный Zabbix Server часто вообще не опрашивает конечные устройства. Вся нагрузка по сбору данных (включая тяжелые SNMP-запросы и WMI-проверки) распределяется между десятками Zabbix Proxy, оставляя ядру системы только оценку триггеров и запись в мощную центральную базу данных.
Понимание архитектурного разделения на Server, Frontend, DB и Proxy позволяет не просто "установить программу по инструкции", а спроектировать отказоустойчивую систему мониторинга, способную пережить падение сети, рост количества собираемых метрик и строгие требования корпоративной безопасности. В следующих этапах мы начнем наполнять эту пустую архитектуру реальными данными, начав с настройки агентов на Linux-системах.