Профессиональный мониторинг ИТ-инфраструктуры на базе Zabbix: от основ до Big Tech решений

Комплексный курс по развертыванию и эксплуатации системы Zabbix, ориентированный на создание отказоустойчивых систем мониторинга. Студенты пройдут путь от установки сервера до настройки распределенной архитектуры и оптимизации производительности в высоконагруженных средах.

1. Архитектура Zabbix и фундаментальные принципы работы системы

Архитектура Zabbix и фундаментальные принципы работы системы

В 2012 году крупная европейская авиакомпания пережила сбой системы бронирования билетов, который длился четыре часа. Причиной стало переполнение жесткого диска на одном из серверов баз данных. Сервер продолжал работать, сеть функционировала, но транзакции не записывались. Инженеры узнали о проблеме только после шквала звонков от разгневанных клиентов. Этот инцидент обошелся компании в миллионы евро упущенной выгоды. Подобные ситуации возникают, когда ИТ-инфраструктура существует как «черный ящик»: серверы гудят, индикаторы мигают, но никто не знает, что происходит внутри операционных систем и приложений. Мониторинг — это нервная система ИТ-инфраструктуры, которая превращает этот черный ящик в прозрачную, управляемую среду.

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

Три столпа архитектуры Zabbix

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

Zabbix Server: вычислительное ядро

Zabbix Server — это центральный процесс (написанный на языке C), который выполняет всю тяжелую работу. Его можно сравнить с мозгом системы мониторинга. Сервер работает в фоновом режиме (как демон в Unix-системах) и выполняет три ключевые задачи:

  • Сбор данных: сервер опрашивает устройства в сети, принимает входящие данные от агентов и собирает метрики через различные протоколы (SNMP, IPMI, JMX).
  • Вычисление состояний (Триггеры): каждое полученное значение сервер пропускает через логические фильтры. Если свободное место на диске упало ниже 10%, сервер мгновенно фиксирует изменение состояния системы с «ОК» на «Проблема».
  • Реакция (Действия): при обнаружении проблемы сервер инициирует ответные меры — отправляет уведомление дежурному инженеру в Telegram или запускает скрипт для автоматической очистки временных файлов.
  • Внутри себя Zabbix Server распараллеливает эти задачи между десятками специализированных процессов. Например, процессы poller занимаются активным опросом устройств, trapper слушают входящие соединения, а alerter отвечают за рассылку уведомлений. Такая многопоточность позволяет серверу обрабатывать огромные потоки данных без задержек.

    База данных: долгосрочная память

    Zabbix Server не хранит данные в своей оперативной памяти постоянно. Вся конфигурация (какие серверы мониторить, кому отправлять письма) и все собранные метрики (загрузка процессора за последний год) хранятся в реляционной базе данных. Zabbix поддерживает MySQL/MariaDB, PostgreSQL и Oracle.

    База данных Zabbix концептуально разделена на три логических блока:

  • Конфигурация: таблицы, описывающие структуру мониторинга (узлы сети, шаблоны, пользователи). Сервер считывает эти данные при запуске и периодически обновляет свой кэш.
  • История (History): сырые значения метрик. Если мы собираем загрузку CPU каждую минуту, в таблицах истории будет 60 записей за час. Это самая тяжелая часть базы данных.
  • Динамика (Trends): агрегированные исторические данные. Zabbix автоматически сжимает старую историю, оставляя только минимальное, максимальное и среднее значение за каждый час. Это позволяет хранить графики за несколько лет, не переполняя диски петабайтами данных.
  • Frontend: панель управления

    Zabbix Frontend — это веб-интерфейс, написанный на PHP. Важно понимать: веб-интерфейс напрямую не управляет процессом сбора данных. Он взаимодействует исключительно с базой данных и, в некоторых случаях, с API Zabbix Server (например, для проверки статуса самого сервера).

    Когда вы создаете новый узел сети в браузере, Frontend просто записывает новую строку в таблицу базы данных. Zabbix Server, благодаря процессу configuration syncer, замечает изменения в базе и начинает мониторинг нового устройства. Разделение сервера и интерфейса позволяет вынести Frontend на отдельную физическую машину, чтобы тяжелые запросы пользователей при построении графиков не отнимали ресурсы у процесса сбора критически важных метрик.

    !Архитектура компонентов Zabbix

    Агенты и безагентный мониторинг

    Чтобы Zabbix Server мог узнать, сколько оперативной памяти свободно на конкретном сервере базы данных, ему нужен способ заглянуть внутрь операционной системы этого сервера. Для этого используются методы сбора данных, которые делятся на агентские и безагентные.

    Zabbix Agent — это легковесная программа (демон/служба), которая устанавливается на целевой хост (Linux, Windows, macOS). Агент имеет прямой доступ к системным вызовам ОС, поэтому он может собрать максимально детальную информацию: от загрузки ядер процессора до состояния конкретного процесса в памяти.

    Взаимодействие между сервером и агентом строится на двух принципиально разных моделях: пассивных и активных проверках.

    Пассивные проверки (Pull-модель)

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

  • Сервер открывает TCP-соединение с агентом на порт 10050.
  • Сервер отправляет запрос: «Дай мне текущую загрузку CPU».
  • Агент вычисляет значение и отправляет ответ: «Загрузка 15%».
  • Соединение закрывается.
  • Эта модель проста в настройке, но имеет два существенных недостатка при масштабировании. Во-первых, сервер тратит свои ресурсы на поддержание тысяч сетевых соединений и ожидание ответов. Во-вторых, если агент находится за NAT (преобразованием сетевых адресов) или строгим файрволом, сервер просто не сможет до него «достучаться».

    Активные проверки (Push-модель)

    При активной проверке инициатором выступает сам Zabbix Agent.

  • Агент открывает TCP-соединение с сервером на порт 10051 и запрашивает: «Дай мне список метрик, которые я должен собирать».
  • Сервер отдает конфигурацию (например: CPU каждую минуту, RAM каждые 5 минут).
  • Агент сохраняет этот список в своей памяти, сам по расписанию собирает данные и периодически отправляет пакеты готовых значений на сервер.
  • Активные проверки радикально снижают нагрузку на Zabbix Server. Серверу больше не нужно держать таймеры и инициировать опросы — он просто работает как приемник данных. Кроме того, активному агенту не нужны открытые входящие порты на файрволе, ему достаточно иметь возможность отправить исходящий трафик на сервер. В высоконагруженных инфраструктурах Big Tech компаний абсолютное большинство метрик собирается именно через активные проверки.

    !Сравнение активных и пассивных проверок

    Безагентный мониторинг

    Не на каждое устройство можно установить агента. Маршрутизаторы Cisco, коммутаторы, источники бесперебойного питания или сетевые принтеры работают на закрытых прошивках. Для них Zabbix использует стандартные сетевые протоколы. Самый частый из них — SNMP (Simple Network Management Protocol). Сервер отправляет SNMP-запрос сетевому устройству, и оно отвечает стандартизированным набором метрик (например, объем трафика на конкретном порту).

    Конвейер данных: от метрики к инциденту

    Понимание того, как данные проходят через Zabbix, требует знания базового словаря системы. Весь процесс мониторинга строится вокруг пяти логических сущностей, которые образуют единый конвейер.

    1. Узел сети (Host)

    Узел сети — это любой логический или физический объект, который мы мониторим. Это может быть физический сервер, виртуальная машина, Docker-контейнер, коммутатор или даже веб-сайт. Узел сети всегда имеет IP-адрес или DNS-имя.

    2. Элемент данных (Item)

    Элемент данных — это конкретная метрика, которую мы собираем с узла сети. У одного сервера (Host) могут быть сотни элементов данных (Items): system.cpu.load, vfs.fs.size[/,free], net.if.in[eth0]. Каждый элемент данных определяет:
  • Что собираем (ключ метрики).
  • Как часто (интервал обновления, например, 60 секунд).
  • Тип данных (целое число, число с плавающей точкой, текст).
  • Срок хранения (сколько дней хранить сырую историю, а сколько — усредненные тренды).
  • 3. Триггер (Trigger)

    Сам по себе собранный элемент данных (например, значение «95% загрузки диска») — это просто число в базе. Система не знает, хорошо это или плохо. Триггер — это логическое выражение, которое оценивает полученные данные и определяет состояние системы.

    Триггер всегда находится в одном из двух состояний: OK или PROBLEM. Логика работы триггера описывается математической функцией. В общем виде вычисление состояния можно представить формулой:

    Где — итоговое состояние (True для проблемы, False для нормы), — функция оценки (например, среднее значение), — последние собранные значения метрики, а — пороговое значение (threshold).

    Например, триггер может быть настроен так: «Если последнее значение свободного места на диске C: меньше 5 гигабайт, перевести триггер в состояние PROBLEM». Как только приходит новое значение элемента данных, Zabbix Server мгновенно пересчитывает все триггеры, зависящие от этой метрики.

    4. Событие (Event)

    Каждый раз, когда триггер меняет свое состояние (с OK на PROBLEM или обратно с PROBLEM на OK), Zabbix генерирует Событие. Событие — это историческая запись, фиксирующая факт того, что в конкретную секунду времени произошел инцидент. События формируют ленту проблем, которую инженеры видят на дашбордах.

    5. Действие (Action)

    Генерация события — это лишь констатация факта. Действие — это алгоритм реакции Zabbix на появление события. Действие состоит из условий («Если событие произошло на серверах из группы "Базы данных" и его важность "Высокая"») и операций («Отправить email администратору» или «Выполнить SSH-команду для перезапуска службы»).

    Пример работы конвейера: Представим мониторинг веб-сервера Nginx.

  • Host: web-server-01.
  • Item: Агент раз в минуту проверяет статус службы Nginx. Значение 1 означает, что процесс запущен, 0 — остановлен.
  • В 14:05 процесс падает. Агент передает на сервер значение 0.
  • Trigger: На сервере настроен триггер: «Если последнее значение Item равно 0, то PROBLEM». Триггер срабатывает.
  • Event: Генерируется событие: «14:05:01 — Служба Nginx недоступна».
  • Action: Система проверяет правила и видит, что для группы веб-серверов нужно выполнить операцию: отправить POST-запрос в корпоративный мессенджер Slack с текстом об ошибке.
  • Масштабирование архитектуры

    Описанная выше схема отлично работает для десятков и сотен серверов. Но когда инфраструктура вырастает до тысяч узлов, распределенных по разным странам, классическая схема начинает давать сбои. Сетевые задержки между континентами замедляют сбор данных, а центральный сервер задыхается от миллионов входящих соединений.

    Для решения этой проблемы архитектура Zabbix включает еще один фундаментальный компонент — Zabbix Proxy.

    Прокси — это промежуточный сервер сбора данных. Он устанавливается в удаленном дата-центре или филиале. Все агенты в этом филиале отправляют свои метрики не на центральный сервер, а на локальный прокси. Прокси собирает данные, буферизирует их в своей собственной небольшой базе данных и затем отправляет на центральный Zabbix Server единым сжатым потоком.

    Это решает сразу несколько проблем:

  • Отказоустойчивость: если канал связи между филиалом и центральным офисом падает, прокси продолжает собирать данные. Когда связь восстановится, он выгрузит всю накопленную историю на центральный сервер. Ни один график не прервется.
  • Сетевая безопасность: вместо того чтобы открывать доступы через межсетевые экраны для сотен серверов филиала, достаточно открыть один порт для связи между Zabbix Server и Zabbix Proxy.
  • Снижение нагрузки: прокси берет на себя тяжелую работу по опросу устройств (особенно SNMP и IPMI), освобождая процессорное время центрального сервера исключительно для вычисления триггеров и обработки действий.
  • Использование связки Server + Database + Frontend + Proxy позволяет строить системы мониторинга, обрабатывающие десятки тысяч новых значений в секунду (NVPS — New Values Per Second). Понимание того, как эти компоненты передают данные друг другу — от локального процесса агента до записи в таблице history и отображения красного алерта на экране дежурного — является главным фундаментом для дальнейшего изучения логики триггеров, шаблонов и автоматизации.

    2. Развертывание компонентов и базовая настройка сервера мониторинга

    В 2021 году крупный региональный интернет-провайдер потерял контроль над своей сетью на 40 минут из-за банального шторма сетевых пакетов. Когда магистральный маршрутизатор начал отбрасывать соединения, тысячи устройств одновременно сгенерировали события недоступности. Система мониторинга, развернутая на одной виртуальной машине с медленными дисками, не справилась с лавиной записей в базу данных. Очередь записи заблокировала чтение, веб-интерфейс перестал отвечать, а инженеры не могли увидеть, какой именно узел стал первопричиной аварии. Этот инцидент произошел не из-за ошибок в настройке триггеров, а из-за фундаментально неверного подхода к развертыванию инфраструктуры мониторинга.

    Выбор топологии развертывания

    Прежде чем выполнять команды в консоли Linux, необходимо определить, как компоненты Zabbix будут распределены по вычислительным ресурсам. Выбор топологии напрямую определяет, сможет ли система пережить пиковые нагрузки.

    Монолитная архитектура (All-in-One)

    При монолитном развертывании Zabbix Server, база данных и веб-интерфейс (Frontend) устанавливаются на одну операционную систему.

    Этот подход оправдан только в двух случаях: развертывание тестового стенда (Proof of Concept) или мониторинг небольшой закрытой инфраструктуры (до 100–200 узлов сети). Главный минус монолита — конкуренция за ресурсы. База данных требует высоких показателей IOPS (операций ввода-вывода в секунду) и оперативной памяти для кэширования. Zabbix Server активно использует процессорное время для вычисления триггеров. При инциденте, когда нагрузка на оба компонента возрастает кратно, они начинают «душить» друг друга, что приводит к отказу всей системы мониторинга именно в тот момент, когда она нужна больше всего.

    Распределенная архитектура

    В Enterprise-сегменте и Big Tech компаниях компоненты всегда изолируются друг от друга.

    !Сравнение монолитного и распределенной архитектуры развертывания Zabbix

    В классической распределенной схеме выделяются минимум три независимых узла:

  • Сервер баз данных — получает самые быстрые NVMe-накопители и максимум оперативной памяти.
  • Сервер Zabbix — требует мощного многоядерного процессора для параллельной обработки метрик тысячами внутренних процессов (поллеров и трапперов).
  • Веб-сервер (Frontend) — выносится на отдельную легковесную машину. Это гарантирует, что даже если Zabbix Server перегружен обработкой данных, инженеры смогут зайти в интерфейс, проанализировать графики и отключить проблемные проверки.
  • Технологический стек: ОС и База данных

    Zabbix работает исключительно на UNIX-подобных системах. Несмотря на поддержку множества дистрибутивов, негласным стандартом для высоконагруженных инсталляций являются RHEL-совместимые системы (AlmaLinux, Rocky Linux, Oracle Linux) или LTS-релизы Ubuntu Server. Они обеспечивают предсказуемый жизненный цикл пакетов и стабильную работу подсистемы systemd.

    Самый критичный выбор на этапе проектирования — система управления базами данных (СУБД). Zabbix поддерживает MySQL/MariaDB, PostgreSQL и Oracle.

    Для небольших инсталляций разница между MySQL и PostgreSQL минимальна. Однако при проектировании системы с прицелом на Big Tech, выбор однозначно склоняется в сторону PostgreSQL. Причина кроется в официальной поддержке расширения TimescaleDB.

    Zabbix генерирует огромный объем исторических данных. Со временем таблица history разрастается до сотен гигабайт. В стандартных СУБД удаление старых данных (процесс Housekeeper в Zabbix) выполняется через ресурсоемкие запросы DELETE, которые блокируют таблицы и создают колоссальную нагрузку на диски. TimescaleDB превращает стандартные таблицы PostgreSQL в гипертаблицы, автоматически разбивая данные на временные отрезки (чанки). Удаление старых данных сводится к удалению целого файла-чанка с диска (операция DROP), что происходит мгновенно и без нагрузки на СУБД.

    Для веб-интерфейса связка Nginx и PHP-FPM показывает лучшую производительность и меньшее потребление памяти по сравнению с классическим Apache.

    Механика установки компонентов

    Процесс развертывания состоит из строгой последовательности шагов. Пропуск любого из них приведет к неработоспособности системы.

    1. Подключение официальных репозиториев

    Пакеты Zabbix, находящиеся в стандартных репозиториях операционных систем (например, EPEL или Universe), часто безнадежно устарели. Установка всегда начинается с загрузки release-пакета с официального сайта Zabbix, который добавляет актуальные ключи GPG и ссылки на репозитории разработчика.

    2. Установка пакетов

    При использовании PostgreSQL и Nginx базовый набор пакетов выглядит так: zabbix-server-pgsql — бинарные файлы и конфигурация ядра системы. zabbix-web-pgsql — файлы веб-интерфейса, адаптированные для работы с PostgreSQL. zabbix-nginx-conf — преднастроенные конфигурационные файлы для веб-сервера. zabbix-sql-scripts — набор SQL-дампов для инициализации структуры базы данных.

    3. Инициализация базы данных (Схема и Данные)

    В отличие от многих современных веб-приложений, которые при первом запуске автоматически создают нужные таблицы в пустой базе через ORM-миграции, Zabbix Server требует заранее подготовленной структуры.

    После создания пользователя zabbix и одноименной базы данных в PostgreSQL, администратор должен вручную импортировать схему. Файл схемы поставляется в сжатом виде и содержит инструкции CREATE TABLE для более чем 150 таблиц, а также первичные данные (базовые шаблоны, настройки по умолчанию).

    Импорт выглядит как распаковка архива «на лету» с передачей потока в консоль СУБД:

    Если запустить Zabbix Server до выполнения этого шага, процесс мгновенно завершится с ошибкой в логах, сообщив об отсутствии таблицы users или config.

    Базовая конфигурация Zabbix Server

    Главный конфигурационный файл ядра находится по пути /etc/zabbix/zabbix_server.conf. Это текстовый файл, содержащий сотни параметров, большинство из которых закомментированы символом #.

    Важный нюанс синтаксиса, на котором спотыкаются новички: если параметр закомментирован, это не значит, что он отключен. Это значит, что Zabbix использует значение по умолчанию, которое указано в этой же строке для справки.

    Для минимально успешного старта необходимо настроить блок подключения к базе данных:

    Даже если база данных установлена на том же сервере, рекомендуется явно раскомментировать DBHost=localhost. При использовании PostgreSQL это заставляет Zabbix подключаться через TCP-сокет, что упрощает отладку сетевых проблем по сравнению с использованием локальных UNIX-сокетов.

    На этом этапе не стоит менять параметры кэшей (CacheSize, HistoryCacheSize) или количество поллеров (StartPollers). Тонкий тюнинг производительности делается позже, на основе метрик самого Zabbix, когда система начнет собирать реальные данные.

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

    Веб-интерфейс Zabbix написан на PHP. Его конфигурация состоит из двух частей: настройки веб-сервера (Nginx) и настройки интерпретатора (PHP-FPM).

    В файле /etc/nginx/conf.d/zabbix.conf необходимо раскомментировать директивы listen (обычно порт 8080 или 80) и server_name (IP-адрес или доменное имя сервера).

    В конфигурации PHP-FPM критически важно раскомментировать и правильно задать временную зону, например php_value[date.timezone] = Europe/Moscow. Если временная зона сервера, базы данных и PHP не будут совпадать, графики в веб-интерфейсе будут отображаться со сдвигом во времени, а триггеры, зависящие от времени суток, начнут срабатывать некорректно.

    Невидимые барьеры: Firewall и SELinux

    Службы настроены, команды запуска systemctl start zabbix-server zabbix-agent nginx php-fpm выполнены без ошибок. Инженер открывает браузер, но видит ошибку тайм-аута, либо веб-интерфейс загружается, но внизу экрана горит красная надпись: «Zabbix server is not running: the information displayed may not be current».

    Это классическая ситуация, вызванная системами безопасности ОС.

    Firewall (Межтевой экран): По умолчанию операционные системы блокируют все входящие соединения, кроме SSH. Чтобы веб-интерфейс стал доступен извне, необходимо открыть порты HTTP (80) и HTTPS (443). Если планируется принимать данные от активных агентов или прокси-серверов, также необходимо открыть порт 10051 (стандартный порт Zabbix Server).

    SELinux (Security-Enhanced Linux): В системах семейства RHEL SELinux включен по умолчанию в режиме Enforcing. Он контролирует доступ процессов к файлам и сетевым портам на уровне ядра. Веб-интерфейс Zabbix (работающий под процессом PHP) должен делать две вещи:

  • Подключаться к базе данных (порт 5432 для PostgreSQL).
  • Подключаться к Zabbix Server (порт 10051) для проверки его статуса.
  • По умолчанию SELinux запрещает веб-серверу инициировать исходящие сетевые соединения. Из-за этого Frontend не может достучаться до ядра системы, выдавая ошибку о неработающем сервере, даже если процесс zabbix_server активен. Решается это не отключением SELinux (что является грубым нарушением стандартов безопасности), а переключением специального булевого значения:

    Мастер первоначальной настройки (Web Wizard)

    При первом открытии веб-интерфейса Zabbix встречает пользователя мастером установки. Здесь важно понимать архитектурную особенность: Frontend не берет настройки подключения к базе данных из файла zabbix_server.conf.

    Веб-интерфейс и Zabbix Server — это два независимых клиента одной базы данных. Поэтому в мастере установки потребуется заново ввести IP-адрес СУБД, имя пользователя и пароль.

    После успешной проверки соединения мастер сгенерирует файл zabbix.conf.php и сохранит его в директории веб-сервера. С этого момента Frontend получает прямой доступ к таблицам конфигурации (hosts, items, triggers) и таблицам исторических данных (history, trends).

    Проверка жизнеспособности и первые шаги

    После завершения работы мастера открывается окно авторизации. Учетные данные суперадминистратора по умолчанию, которые закладываются еще на этапе импорта SQL-схемы: логин Admin (с заглавной буквы) и пароль zabbix.

    Первое действие в любой новой инсталляции — переход в раздел администрирования пользователей и смена стандартного пароля. Оставленный по умолчанию пароль — одна из самых частых причин компрометации инфраструктуры.

    Вторым шагом инженер должен проверить логи ядра системы. Файл /var/log/zabbix/zabbix_server.log — главный инструмент диагностики. Здоровый старт сервера выглядит как последовательность сообщений о подключении к базе данных и успешном запуске десятков дочерних процессов: server #1 started [configuration syncer #1] server #2 started [poller #1] server #15 started [trapper #1]

    Если в логах нет строк с текстом database is down или cannot allocate shared memory, это означает, что фундамент системы мониторинга заложен корректно. Компоненты развернуты, база данных готова принимать метрики, а веб-интерфейс корректно отображает конфигурацию. Инфраструктура мониторинга переведена в режим ожидания и готова к подключению первых целевых узлов.

    3. Методы сбора метрик: типы элементов данных и работа агентов

    Методы сбора метрик: типы элементов данных и работа агентов

    В 2017 году крупный стриминговый сервис пережил сорокаминутный каскадный отказ инфраструктуры, хотя система мониторинга показывала идеальную картину: загрузка процессоров на критических узлах не превышала 45%. Расследование инцидента вскрыло фундаментальную ошибку в логике сбора данных. Процессоры серверов действительно «задыхались», упираясь в 100% утилизации на 5–7 секунд каждые полминуты из-за особенностей работы сборщика мусора (Garbage Collector) в приложении. Однако агент мониторинга опрашивал метрику раз в минуту и усреднял значение. Система была слепа к микро-всплескам нагрузки. Этот случай доказывает: в высоконагруженных средах то, как и с какой частотой собираются данные, не менее важно, чем сам факт их сбора.

    Анатомия элемента данных: от сырого значения к долговременной памяти

    Элемент данных в Zabbix — это не просто указание, какую метрику забрать с узла сети. Это сложный конфигурационный объект, определяющий жизненный цикл полученного значения. При настройке сбора метрик в масштабах сотен серверов критически важно понимать, как типы данных влияют на производительность базы данных.

    Существует пять основных типов информации, которые может хранить элемент данных:

  • Числовой (целое положительное) — используется для счетчиков (байты, пакеты, количество процессов). Занимает минимум места в БД.
  • Числовой (с плавающей точкой) — применяется для метрик, требующих дробных значений (загрузка CPU в процентах, время ответа в миллисекундах).
  • Символьный — короткие текстовые строки (до 255 байт), например, версия операционной системы или статус службы.
  • Текстовый — длинные строки, не имеющие жесткого ограничения по длине.
  • Журнал (Log) — специализированный тип для парсинга лог-файлов, сохраняющий не только само сообщение, но и его локальное время, ID события и уровень критичности.
  • Собранные данные проходят через механизм раздельного хранения: историю (History) и динамику изменений (Trends).

    История хранит каждое полученное значение в неизменном виде. Если метрика собирается раз в секунду, за сутки в таблице истории появится 86 400 новых записей только для одного элемента данных. В масштабах Big Tech инфраструктуры (например, 10 000 серверов по 500 метрик) хранение сырой истории за длительный срок приведет к деградации дисковой подсистемы.

    Динамика изменений (тренды) решает эту проблему для числовых данных. Zabbix автоматически агрегирует исторические данные за каждый час, сохраняя всего четыре значения: минимум, максимум, среднее и общее количество полученных значений за этот час.

    Математика сайзинга базы данных напрямую зависит от этих настроек. Если — количество элементов данных, — количество дней хранения, а — средний размер одного значения в байтах (около 90 байт для истории и 128 байт для трендов в PostgreSQL), требуемый объем диска вычисляется по формуле:

    Ограничение срока хранения сырой истории (обычно 7–14 дней) и длительное хранение трендов (1–2 года) — обязательный стандарт при проектировании отказоустойчивого мониторинга.

    Глубокая механика Zabbix Agent: сеть, таймауты и буферизация

    Сбор системных метрик с операционных систем чаще всего делегируется локальной службе — Zabbix Agent. Разница между активными и пассивными проверками выходит далеко за рамки направления сетевого соединения; она определяет устойчивость мониторинга к сетевым аномалиям.

    Уязвимость пассивных проверок

    При пассивном режиме инициатором выступает Zabbix Server. Процесс-поллер (poller) на сервере открывает TCP-соединение к порту 10050 целевого узла, запрашивает конкретную метрику и ждет ответа.

    Главная проблема этого подхода — синхронное ожидание и блокировка процессов. Если скрипт, собирающий метрику на агенте, выполняется 4 секунды, поллер сервера простаивает все это время. При лимите таймаута (параметр Timeout в конфигурации сервера, максимум 30 секунд) медленные проверки могут исчерпать пул свободных поллеров. Возникает эффект домино: сервер перестает успевать опрашивать другие, абсолютно здоровые узлы, и в интерфейсе появляются ложные срабатывания об отсутствии данных.

    Автономность активных проверок

    В активном режиме логика инвертируется. Агент подключается к порту 10051 Zabbix Server (или Proxy) и запрашивает список метрик, которые ему поручено собирать (параметр конфигурации RefreshActiveChecks, по умолчанию раз в 2 минут).

    Получив расписание, агент начинает самостоятельный сбор данных, помещая их в оперативную память — локальный буфер. Размер этого буфера регулируется параметром BufferSize (до 65535 значений). Каждую секунду (или при заполнении буфера) агент формирует единый пакет данных и отправляет его на сервер.

    !Симуляция работы буфера активного агента

    Такая архитектура дает два критических преимущества для распределенных сетей:

  • Асинхронность для сервера: Zabbix Server не тратит время на ожидание ответа от серверов с высоким latency. Он только принимает готовые пачки данных процессом trapper, что позволяет обрабатывать десятки тысяч значений в секунду.
  • Защита от потери данных: Если сетевой канал между дата-центрами падает, активный агент продолжает собирать метрики и складывать их в буфер. При восстановлении связи агент «выплевывает» накопленные данные на сервер с сохранением оригинальных временных меток (timestamps). Графики отрисовываются без разрывов.
  • Для корректной работы активного агента критически важно точное совпадение параметра Hostname в конфигурационном файле zabbix_agentd.conf с именем узла сети, заданным в веб-интерфейсе Zabbix. При несовпадении сервер отклонит данные, так как не сможет сопоставить пришедший массив с конфигурацией базы.

    Безагентный сбор и интеграция со сторонними системами

    Установка агента не всегда возможна. Сетевое оборудование, аппаратные системы хранения данных, принтеры и закрытые appliance-решения требуют иных подходов.

    !Коммутатор Cisco Catalyst

    Мониторинг по протоколу SNMP

    Simple Network Management Protocol (SNMP) — индустриальный стандарт для опроса сетевого оборудования. Zabbix выступает в роли SNMP-менеджера, отправляя запросы к SNMP-агентам на устройствах.

    Данные в SNMP организованы в виде древовидной структуры, где каждая переменная имеет уникальный объектный идентификатор (OID). Например, OID 1.3.6.1.2.1.2.2.1.10.1 может означать количество входящих байт на первом интерфейсе маршрутизатора.

    Сложность SNMP заключается в динамических индексах. При перезагрузке коммутатора индекс порта GigabitEthernet0/1 может измениться с 1 на 25. Жесткая привязка к статичным OID приведет к сбору данных с чужого порта. Для решения этой задачи используются динамические индексы (SNMP index) и механизмы низкоуровневого обнаружения, которые автоматически находят актуальные OID по текстовым именам интерфейсов.

    HTTP Agent и работа с API

    Современная инфраструктура (Kubernetes, микросервисы, облачные базы данных) часто отдает метрики через REST API в формате JSON или XML. Тип элемента данных HTTP Agent позволяет Zabbix Server самостоятельно выполнять GET или POST запросы к заданным эндпоинтам.

    HTTP Agent поддерживает базовую и NTLM аутентификацию, передачу пользовательских HTTP-заголовков (например, токенов авторизации) и работу через HTTP-прокси. Это устраняет необходимость писать внешние Bash/Python скрипты для банального curl-запроса, перенося всю логику сбора внутрь конфигурации Zabbix.

    Zabbix Trapper: push-архитектура для кастомных задач

    Когда данные появляются не по расписанию, а по факту события (например, успешное завершение ночного резервного копирования), поллинг неэффективен. Для таких случаев используется тип элемента данных Zabbix Trapper.

    Сервер открывает порт и пассивно слушает входящие соединения. Отправка данных осуществляется утилитой zabbix_sender, которая встраивается в скрипты или CI/CD пайплайны. Синтаксис отправки предельно прост: утилите передается адрес сервера, имя узла сети, ключ элемента данных и само значение. Как только скрипт бэкапа завершается, он выполняет одну команду, и Zabbix мгновенно фиксирует время выполнения и статус задачи.

    Конвейер предобработки данных (Preprocessing)

    В enterprise-среде сырые данные редко пригодны для прямого анализа. Коммутатор отдает счетчик байт, а инженеру нужна скорость в мегабитах в секунду. API отдает огромный JSON-документ, а нужен только один статус.

    Предобработка (Preprocessing) — это встроенный в Zabbix конвейер трансформации значений до их сохранения в базу данных. Эта концепция кардинально снижает нагрузку на сеть, позволяя забирать большие массивы данных одним запросом, а затем нарезать их на нужные метрики прямо в оперативной памяти сервера.

    !Конвейер предобработки данных

    Извлечение данных: JSONPath и регулярные выражения

    Если HTTP Agent скачал JSON-ответ от веб-сервера Nginx, сохранять весь текст в базу бессмысленно. В настройках элемента данных добавляется шаг предобработки JSONPath.

    Синтаксис JSONPath позволяет точечно извлечь нужное значение. Выражение Value_nValue_{n-1}Time_n - Time_{n-1}$). Полученная скорость в байтах в секунду затем умножается на пользовательский множитель (Custom multiplier) равный 8, чтобы перевести байты в биты. На выходе формируется чистая метрика bps` (bits per second), готовая для настройки пороговых значений.

    Оптимизация хранения: Discard unchanged

    Один из самых мощных инструментов предобработки для экономии места в БД — шаг «Отбрасывать неизменное» (Discard unchanged with heartbeat).

    Предположим, мы мониторим версию прошивки на 1000 маршрутизаторах раз в час. Версия меняется раз в полгода. Без предобработки Zabbix запишет в базу 8 760 000 одинаковых строк за год. При включении Discard unchanged конвейер сравнит новое значение с предыдущим. Если версия не изменилась, значение просто уничтожается в оперативной памяти и не доходит до базы данных. Параметр heartbeat (например, 1 день) заставит систему принудительно сохранять значение раз в сутки, просто чтобы подтвердить, что сбор метрики всё ещё функционирует.

    Выбор между активными и пассивными проверками, грамотное использование безагентных методов и выстраивание логики предобработки формируют фундамент, на котором строится вся последующая аналитика. Ошибки на этапе сбора данных невозможно компенсировать красивыми дашбордами или сложными алгоритмами оповещений, поскольку система будет оперировать искаженной картиной реальности.