Серверы падали незаметно: внедрение Zabbix 7 для розничной сети из 12 магазинов

Задача клиента: розничная сеть без мониторинга

К нам обратился владелец розничной сети «ПродМаркет» — 12 продуктовых магазинов в Московской области. Клиент столкнулся с типичной, но крайне болезненной проблемой: серверы и кассовые узлы в магазинах периодически выходили из строя, а единственный IT-специалист узнавал об этом только когда звонили раздражённые продавцы. Иногда простой длился часами — касса не работала, продажи останавливались, покупатели уходили к конкурентам.

Ситуация на момент обращения:

  • 12 магазинов с локальными серверами (кассовое ПО, 1С, Wi-Fi контроллеры)
  • Центральный офис с основным сервером баз данных и бухгалтерии
  • Ноль мониторинга — IT-специалист узнавал о сбоях исключительно по звонкам из магазинов
  • Среднее время реакции на инцидент — 2-3 часа
  • Потери из-за простоев — по оценке клиента, до 150 000 рублей в месяц

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

Проведённый аудит и предложенное решение

Мы провели полный аудит инфраструктуры клиента: побывали в трёх магазинах, изучили серверное оборудование, каналы связи между точками и текущие средства администрирования. По результатам аудита мы предложили внедрить Zabbix 7 — одну из самых зрелых и функциональных систем мониторинга с открытым исходным кодом.

Версия 7, выпущенная в 2024 году, стала значительным шагом вперёд в области производительности и автоматизации. Для данного проекта были особенно важны следующие нововведения:

  • Переработанный веб-интерфейс — быстрая загрузка дашбордов, улучшенная навигация, поддержка тёмной темы
  • Улучшенный механизм Proxy — поддержка пассивных и активных прокси-групп для балансировки нагрузки
  • Новые типы элементов данных — расширенная поддержка Prometheus-метрик и браузерного мониторинга
  • Оптимизация работы с БД — значительное ускорение операций с историей данных при использовании TimescaleDB
  • Расширенный API — новые методы для управления конфигурацией через автоматизацию

В ходе аудита мы обнаружили, что в каждом магазине работает по 2-4 устройства: кассовый сервер (Debian Linux), коммутатор, Wi-Fi точка доступа и иногда IP-камера. В головном офисе — основной сервер базы данных, файловый сервер и маршрутизатор. Суммарно — около 50 устройств, которые никто не контролировал. Мы также выяснили, что VPN-каналы между магазинами и офисом работают нестабильно — пропадают на 5-15 минут несколько раз в день. Это определило выбор архитектуры с локальными Proxy-серверами в каждом магазине.

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

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

  • Zabbix Server — центральный процесс в головном офисе, собирающий данные, обрабатывающий триггеры и отправляющий оповещения
  • Zabbix Frontend — веб-интерфейс на PHP для управления и визуализации, доступный IT-отделу
  • PostgreSQL Database — хранилище конфигурации и исторических данных
  • Zabbix Agent 2 — лёгкий агент, установленный на каждом сервере в магазине и офисе
  • Zabbix Proxy — промежуточные серверы в каждом магазине для надёжного сбора данных даже при нестабильном VPN-канале

Агенты на серверах собирают метрики (CPU, RAM, диски, сеть) и отправляют их на локальный Proxy в магазине. Proxy буферизирует данные и передаёт на центральный Zabbix Server в офисе. Сервер обрабатывает триггеры и при необходимости отправляет уведомления через Telegram. Для инфраструктуры клиента (около 50 хостов) одного центрального сервера было достаточно.

Планирование ресурсов

Мы подготовили план ресурсов с запасом на рост:

ПараметрДо 100 хостов100-500 хостов500+ хостов
CPU2 ядра4 ядра8+ ядер
RAM4 ГБ8 ГБ16+ ГБ
Диск50 ГБ SSD200 ГБ SSD500+ ГБ NVMe
База данныхPostgreSQL 15PostgreSQL 15PostgreSQL 15 + TimescaleDB

Центральный сервер Zabbix мы разместили на существующем сервере в офисе — 4 ядра, 8 ГБ RAM, SSD. В качестве СУБД рекомендовали PostgreSQL — она показывает лучшую производительность и поддерживает TimescaleDB для сжатия исторических данных.

Вот наше решение: установка Zabbix 7 на Debian 12

Мы приступили к установке всех компонентов на чистый Debian 12 (Bookworm). Использовали связку Zabbix Server + PostgreSQL + Nginx.

Подготовка системы и подключение репозитория

Обновили систему и установили необходимые пакеты:

# Обновление системы
apt update && apt upgrade -y

# Установка необходимых пакетов
apt install -y wget gnupg2 lsb-release software-properties-common

# Добавление репозитория Zabbix 7
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
dpkg -i zabbix-release_latest_7.0+debian12_all.deb
apt update

Установили основные компоненты:

# Установка Zabbix сервера, фронтенда и агента
apt install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

# Установка PostgreSQL
apt install -y postgresql postgresql-client

Проверили корректность установки:

dpkg -l | grep zabbix
zabbix_server --version

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

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

# Переключаемся на пользователя postgres
sudo -u postgres psql

-- Создаём пользователя
CREATE USER zabbix WITH PASSWORD 'STRONG_PASSWORD_HERE';

-- Создаём базу данных
CREATE DATABASE zabbix OWNER zabbix;

-- Устанавливаем расширение для TimescaleDB (опционально)
-- \c zabbix
-- CREATE EXTENSION IF NOT EXISTS timescaledb;

\q

Импортировали начальную схему:

# Импорт схемы (занимает 1-3 минуты)
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | \
  sudo -u zabbix psql zabbix

Настроили пароль в конфигурации Zabbix Server:

# Редактируем конфигурацию
nano /etc/zabbix/zabbix_server.conf

# Находим и устанавливаем параметры:
DBPassword=STRONG_PASSWORD_HERE
DBHost=localhost
DBName=zabbix
DBUser=zabbix

Настройка Nginx и PHP для веб-интерфейса

Сконфигурировали Nginx для фронтенда:

# Редактируем конфигурацию Nginx
nano /etc/zabbix/nginx.conf

# Раскомментируем и настраиваем:
listen 80;
server_name zabbix.example.com;

Настроили параметры PHP:

# Редактируем PHP-FPM конфигурацию
nano /etc/zabbix/php-fpm.conf

# Проверяем параметры:
php_value[max_execution_time] = 300
php_value[memory_limit] = 256M
php_value[post_max_size] = 32M
php_value[upload_max_filesize] = 16M
php_value[max_input_time] = 300
php_value[date.timezone] = Europe/Moscow

Запустили все службы:

# Запуск и включение служб
systemctl enable --now zabbix-server zabbix-agent2 nginx php8.2-fpm

# Проверка статуса
systemctl status zabbix-server
systemctl status nginx

Прошли мастер первоначальной настройки, сменили пароль по умолчанию и создали отдельные учётные записи для IT-специалистов клиента.

Подключение хостов и настройка шаблонов мониторинга

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

Этот этап оказался самым трудоёмким — нужно было установить агенты на серверы во всех 12 магазинах, часть из которых находилась в 40-50 километрах от офиса. Мы подготовили скрипт автоматической установки и настройки агента, который IT-специалист клиента мог запустить через SSH на каждом сервере. Весь процесс подключения одного магазина занимал 15-20 минут: установка агента, регистрация в Zabbix, привязка шаблонов и проверка сбора данных. За два рабочих дня все 12 магазинов были подключены к мониторингу.

Установка Zabbix Agent 2 на серверы в магазинах

На каждый сервер в магазинах мы установили Zabbix Agent 2 — новую версию агента на Go с поддержкой плагинов:

# На Debian/Ubuntu целевого хоста
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
dpkg -i zabbix-release_latest_7.0+debian12_all.deb
apt update
apt install -y zabbix-agent2

# Настройка агента
nano /etc/zabbix/zabbix_agent2.conf

Мы применили следующую конфигурацию:

# IP-адрес Zabbix сервера
Server=192.168.1.10

# Для активных проверок
ServerActive=192.168.1.10

# Уникальное имя хоста (должно совпадать с именем в веб-интерфейсе)
Hostname=web-server-01

# Разрешаем удалённые команды (опционально)
AllowKey=system.run[*]

# Таймаут выполнения проверок
Timeout=10
# Запуск и автозагрузка агента
systemctl enable --now zabbix-agent2

# Проверка работоспособности
zabbix_agent2 -t system.uptime

Для Windows-систем в офисе использовали MSI-установщик с аналогичными параметрами (C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf).

Добавление хостов и привязка шаблонов

Для каждого хоста настроили мониторинг: Data collection → Hosts → Create host:

  • Host name — совпадает с Hostname в конфигурации агента
  • Visible name — «Магазин №3 — Кассовый сервер»
  • Groups — группы по магазинам и типам устройств
  • Interfaces — Agent interface с IP-адресом и портом 10050

Шаблоны для Linux-серверов:

  • Linux by Zabbix agent — CPU, память, диски, сеть, процессы
  • Zabbix agent — состояние агента
  • Nginx by Zabbix agent — для серверов с Nginx
  • PostgreSQL by Zabbix agent 2 — для серверов с PostgreSQL

Пользовательские шаблоны для кассового ПО

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

  • Template name: Custom Web Application
  • Groups: Templates/Applications

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

  • Name: Application response time
  • Type: HTTP agent
  • Key: app.response.time
  • URL: http://localhost:8080/health
  • Type of information: Numeric (float)
  • Update interval: 30s

Для мониторинга специфических метрик использовали UserParameter:

# В zabbix_agent2.conf или в /etc/zabbix/zabbix_agent2.d/custom.conf
UserParameter=app.connections,ss -tn state established | grep :8080 | wc -l
UserParameter=app.queue.length,redis-cli llen task_queue 2>/dev/null || echo 0
UserParameter=app.disk.usage[*],df -P $1 | tail -1 | awk '{print $5}' | tr -d '%'
systemctl restart zabbix-agent2

# Проверка с сервера
zabbix_get -s 192.168.1.20 -k app.connections

Настройка триггеров, дашбордов и оповещений

Ключевое требование клиента — мгновенно узнавать о проблемах и видеть состояние всей сети на одном экране. Мы настроили систему триггеров с разными уровнями серьёзности, создали наглядные дашборды и подключили оповещения в Telegram.

Помимо стандартных триггеров на CPU, память и диски, мы создали бизнес-триггеры, специфичные для розничной сети: мониторинг доступности кассового ПО, контроль VPN-туннелей между магазинами и офисом, отслеживание состояния UPS (источников бесперебойного питания). Мы также настроили корреляцию событий — если VPN-туннель до магазина падает, Zabbix не генерирует десятки алертов по каждому хосту в этом магазине, а создаёт одну проблему «Магазин N недоступен» с агрегированной информацией.

Триггеры, адаптированные под бизнес клиента

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

# Высокая загрузка CPU (более 90% в течение 5 минут)
Name: CPU utilization is too high on {HOST.NAME}
Severity: High
Expression: min(/Linux by Zabbix agent/system.cpu.util,5m)>90

# Диск заполнен более чем на 90%
Name: Disk space is critically low on {HOST.NAME}
Severity: Disaster  
Expression: last(/Linux by Zabbix agent/vfs.fs.size[/,pused])>90

# Сервис не отвечает
Name: {HOST.NAME} is unreachable
Severity: Disaster
Expression: max(/Linux by Zabbix agent/agent.ping,3m)=0

# Мало свободной памяти (менее 10%)
Name: Lack of free memory on {HOST.NAME}
Severity: Warning
Expression: last(/Linux by Zabbix agent/vm.memory.util)>90

# Высокая нагрузка на диск (iowait)
Name: High disk IO wait on {HOST.NAME}
Severity: Warning
Expression: avg(/Linux by Zabbix agent/system.cpu.util[,iowait],10m)>30

Уровни серьёзности настроили с учётом приоритетов клиента: Disaster (касса не работает) вызывает немедленный звонок, High — Telegram с требованием реакции, Warning — для планового обслуживания.

Дашборд «Обзор сети магазинов»

Создали специальный дашборд для видимости всех 12 магазинов на одном экране:

  • Problems — список текущих проблем с фильтрацией по серьёзности
  • Host availability — карта доступности хостов по магазинам
  • Graph (classic) — графики загрузки CPU и памяти кассовых серверов
  • Top hosts — топ хостов по загрузке ресурсов
  • Map — топологическая карта сети с расположением магазинов

Также создали топологическую карту в Monitoring → Maps со всеми магазинами, офисом и связями между ними. Состояние каждого магазина отображается цветом иконки.

Telegram-бот и email-оповещения

Настроили email через SMTP Яндекса (Alerts → Media types → Email) и создали Telegram-бота для мгновенных оповещений IT-отделу:

curl -s https://api.telegram.org/bot<TOKEN>/getUpdates | python3 -m json.tool

Шаблон информативного сообщения:

Subject: [{TRIGGER.SEVERITY}] {TRIGGER.NAME} on {HOST.NAME}

Body:
Проблема: {TRIGGER.NAME}
Хост: {HOST.NAME} ({HOST.IP})
Серьёзность: {TRIGGER.SEVERITY}
Время: {EVENT.DATE} {EVENT.TIME}

Текущее значение: {ITEM.LASTVALUE}
Описание: {TRIGGER.DESCRIPTION}

Event ID: {EVENT.ID}

Теперь IT-специалист получает Telegram-уведомление за секунды вместо часов ожидания звонка из магазина.

Автообнаружение сети и SNMP-мониторинг оборудования

Помимо серверов, в магазинах клиента были коммутаторы, Wi-Fi точки и другое оборудование. Мы настроили автоматическое обнаружение устройств.

Автоматическое обнаружение стало одной из самых полезных функций для клиента. Когда в магазине №9 заменили неисправный коммутатор на новый, Zabbix обнаружил его автоматически через Network Discovery и начал мониторинг без какого-либо вмешательства IT-специалиста.

Автообнаружение хостов в сети

Для каждой подсети настроили правила обнаружения: Data collection → Discovery:

  • IP range: 192.168.1.1-254
  • Update interval: 1h
  • Checks: Zabbix agent, SNMP, ICMP ping

Действия для обнаруженных хостов: автоматическое добавление в группу «Discovered hosts» и привязка шаблона. Новое оборудование в магазине подхватывается автоматически.

Для облачных сред Zabbix 7 поддерживает обнаружение через API: VMware vCenter, AWS CloudWatch, Azure Monitor.

Мониторинг коммутаторов и Wi-Fi через SNMP

Сетевое оборудование подключили через SNMP:

apt install -y snmp snmp-mibs-downloader

# Проверка доступности SNMP на устройстве
snmpwalk -v2c -c public 192.168.1.1 sysDescr

Для каждого устройства создали хост с SNMP-интерфейсом и привязали соответствующий шаблон:

  • Cisco IOS by SNMP — для Cisco
  • MikroTik by SNMP — для RouterOS
  • Generic by SNMP — универсальный шаблон
  • HP Enterprise Switch by SNMP — для HP/Aruba

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

Распределённый мониторинг через Zabbix Proxy

Для надёжного мониторинга 12 магазинов мы развернули Zabbix Proxy в каждой точке — VPN-каналы между магазинами и офисом иногда нестабильны, а Proxy буферизирует данные.

Решение с Proxy оказалось стратегически верным: уже через неделю после запуска один из магазинов потерял VPN-связь с офисом на 4 часа из-за проблем у интернет-провайдера. Zabbix Proxy в магазине продолжал собирать данные в локальный буфер, и когда связь восстановилась, все метрики за период offline были автоматически отправлены на центральный сервер. Ни один элемент данных не был потерян — IT-специалист увидел полную картину, включая период недоступности канала.

Установка Proxy в магазинах

На каждом сервере магазина установили Proxy с SQLite:

# Установка
apt install -y zabbix-proxy-sqlite3

# Конфигурация
nano /etc/zabbix/zabbix_proxy.conf

Мы применили следующую конфигурацию:

# Режим работы: 0 — активный
ProxyMode=0

# Адрес Zabbix сервера
Server=zabbix.example.com

# Уникальное имя прокси
Hostname=proxy-office-spb

# Путь к базе данных SQLite
DBName=/var/lib/zabbix/proxy.db

# Частота отправки данных
DataSenderFrequency=5

# Буферы
ProxyLocalBuffer=2
ProxyOfflineBuffer=24

# Процессы сбора данных
StartPollers=10
StartPollersUnreachable=3
systemctl enable --now zabbix-proxy

Оптимизация производительности и бэкапы

Для стабильной долгосрочной работы выполнили оптимизации:

Housekeeper — очистка старых данных:

# В zabbix_server.conf
HousekeepingFrequency=1
MaxHousekeeperDelete=10000

Оптимизация PostgreSQL:

# В postgresql.conf
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 64MB
maintenance_work_mem = 512MB
wal_buffers = 64MB
checkpoint_completion_target = 0.9
random_page_cost = 1.1

Настроили ежедневное резервное копирование:

# Бэкап конфигурации Zabbix
pg_dump -U zabbix --schema-only zabbix > /backup/zabbix_schema_$(date +%Y%m%d).sql

# Бэкап конфигурационных данных
pg_dump -U zabbix -t hosts -t items -t triggers -t actions \
  -t media -t users zabbix > /backup/zabbix_config_$(date +%Y%m%d).sql

Результаты внедрения

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

  • Время реакции на инциденты сократилось с 2-3 часов до 5-10 минут благодаря Telegram-оповещениям и дашбордам
  • Под мониторингом — 48 хостов (серверы, коммутаторы, Wi-Fi точки) во всех 12 магазинах и офисе
  • Предотвращённые инциденты — за первый месяц триггеры предупредили о 3 заполняющихся дисках и 2 проблемах с памятью до того, как они привели к сбоям
  • Снижение потерь от простоев — с 150 000 до менее 20 000 рублей в месяц
  • Распределённая архитектура — Zabbix Proxy в каждом магазине гарантирует сбор данных при нестабильных каналах связи
  • Автообнаружение — новые устройства подхватываются автоматически
  • Окупаемость проекта — менее одного месяца с учётом предотвращённых простоев

Особенно показательным стал случай через 10 дней после запуска: триггер «Disk space critically low» сработал на кассовом сервере в магазине №7 — диск был заполнен на 92%. IT-специалист клиента увидел Telegram-уведомление, подключился удалённо и обнаружил, что логи кассового ПО росли бесконтрольно. Проблема была решена за 15 минут — вместо падения кассы и потери продаж на несколько часов. Клиент оценил эффект ёмко: «Раньше мы тушили пожары, теперь предотвращаем их».

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

Часто задаваемые вопросы

Один правильно настроенный Zabbix-сервер с PostgreSQL на выделенном оборудовании (8 ядер, 16 ГБ RAM, NVMe SSD) способен обрабатывать 5 000-10 000 метрик в секунду (NVPS), что соответствует примерно 3 000-5 000 хостов со стандартными шаблонами. С TimescaleDB и Zabbix Proxy масштабирование возможно до десятков тысяч хостов.

Мы рекомендуем PostgreSQL 15+ для всех новых установок. PostgreSQL показывает лучшую производительность при больших объёмах данных, поддерживает расширение TimescaleDB для автоматического сжатия истории и партицирования таблиц. MySQL/MariaDB допустимы для небольших инсталляций до 500 хостов.

Zabbix Agent 2 написан на Go (классический — на C), поддерживает подключаемые плагины, выполняет проверки параллельно (а не последовательно), имеет встроенную поддержку мониторинга Docker, PostgreSQL, MySQL и других сервисов без внешних скриптов. Для новых установок однозначно рекомендуется Agent 2.

Используйте режим активных проверок (Active checks). В этом режиме агент сам инициирует подключение к серверу или прокси. Настройте параметр ServerActive в конфигурации агента и убедитесь, что агент может подключиться к порту 10051 сервера (исходящее соединение). Входящий порт 10050 открывать не нужно.

Да, Zabbix 7 включает шаблоны для AWS CloudWatch, Azure Monitor, Google Cloud, а также HTTP-мониторинг произвольных API. Для облачных сервисов без агента используются HTTP agent, Script items и встроенные коннекторы. Также поддерживается мониторинг Kubernetes через Prometheus-эндпоинты.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#zabbix 7 настройка#мониторинг инфраструктуры#zabbix debian 12#zabbix установка#snmp мониторинг#zabbix telegram оповещения#zabbix шаблоны#zabbix триггеры