· 15 мин чтения

Zabbix 7 для мониторинга офиса: готовый сетап от АйТи Фреш

За пятнадцать лет в IT-аутсорсинге я внедрял Zabbix у десятков клиентов — от стоматологии на 5 РМ до производственного предприятия на 200. Седьмая версия в 2026 году стала по-настоящему зрелой: новый веб-интерфейс, нативный TimescaleDB, плагины для zabbix_agent2 на Go и нормальный ML-прогноз. Расскажу, как мы разворачиваем Zabbix 7 в офисах до 50 рабочих мест и что мониторим в первую очередь.

Почему именно Zabbix, а не Prometheus или Grafana Cloud

Меня регулярно спрашивают: «Зачем Zabbix, когда есть Prometheus?» Отвечаю честно. Prometheus идеален для динамических микросервисных сред в Kubernetes, где сервисы рождаются и умирают каждые пять минут. Grafana Cloud — отличный SaaS, если у вас зарубежные карты и нет требований к локализации данных в РФ.

В классическом офисе картина другая. Есть пара физических серверов, гипервизор с десятком ВМ, контроллер домена, файловый сервер, 1С, маршрутизатор Mikrotik, коммутатор Cisco, NAS, принтеры с SNMP, ИБП APC. Всё это нужно мониторить в едином окне, с уведомлениями в Telegram, с отчётами для бухгалтерии. Zabbix покрывает 95% задач коробкой.

Вторая причина — российская юрисдикция. Zabbix LLC — компания из Латвии, но код полностью открыт, инсталляция идёт на наш сервер, никаких санкционных рисков. Для бухгалтерии и юристов это часто решающий фактор.

Архитектура для офиса до 50 РМ

Не нужно усложнять. Для типичного офиса достаточно одной виртуалки. Я разворачиваю на Ubuntu Server 24.04 LTS со следующим стеком:

Ресурсы: 4 vCPU, 8 ГБ RAM, 200 ГБ диска. С TimescaleDB и сжатием хроники старше 30 дней этого хватает на 5000-7000 элементов данных при опросе раз в минуту.

Установка из официального репозитория Zabbix:

# Подключаем репозиторий Zabbix 7.0 для Ubuntu 24.04
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest+ubuntu24.04_all.deb
sudo apt update

# Ставим всё разом
sudo apt install -y zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf \
  zabbix-sql-scripts zabbix-agent2 zabbix-agent2-plugin-postgresql

# Импортируем схему БД
sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

# Включаем TimescaleDB
sudo -u postgres psql zabbix -c "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;"
sudo cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix

В /etc/zabbix/zabbix_server.conf минимально правлю:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=...
StartPollers=20
StartTrappers=10
StartPingers=4
CacheSize=512M
HistoryCacheSize=128M
TrendCacheSize=128M
ValueCacheSize=256M
Timeout=10
LogSlowQueries=3000

Параметр LogSlowQueries=3000 особенно полезен: записывает в лог запросы дольше 3 секунд. Без него на этапе настройки сложно понять, где тормозит — в БД, в скрипте или в сети.

Zabbix Agent 2: почему только он

Agent 2 — это переписанный на Go клиент, который заменил собой классический агент на C. Преимуществ много, но три ключевых для офисной инсталляции:

Плагины из коробки. Для PostgreSQL, MySQL, Docker, Memcached, Ceph не нужно писать UserParameter — есть нативная поддержка. Установил zabbix-agent2-plugin-postgresql, прописал DSN в конфиге, на хосте подключил шаблон «PostgreSQL by Zabbix agent 2» — и сразу видишь сессии, размеры баз, replication lag.

Конфигурация плагина в /etc/zabbix/zabbix_agent2.d/plugins.d/postgres.conf:

Plugins.PostgreSQL.Sessions.zbx-monitor.Uri=tcp://localhost:5432
Plugins.PostgreSQL.Sessions.zbx-monitor.User=zbx_monitor
Plugins.PostgreSQL.Sessions.zbx-monitor.Password=...
Plugins.PostgreSQL.Sessions.zbx-monitor.Database=postgres

Persistent connections. Старый агент открывал TCP-соединение на каждую проверку. На сервере с 200 элементами данных каждые 30 секунд это создавало неприятную нагрузку. Agent 2 держит постоянное соединение и опрашивает по нему — нагрузка падает в разы.

Асинхронные проверки. Несколько проверок одного хоста выполняются параллельно. На медленных Windows-серверах это экономит секунды на каждом цикле.

Установка на Linux-хост (одной командой):

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest+ubuntu24.04_all.deb
sudo apt update && sudo apt install -y zabbix-agent2

# Минимальная правка /etc/zabbix/zabbix_agent2.conf
Server=10.10.10.5
ServerActive=10.10.10.5
Hostname=srv-1c-prod
ListenIP=0.0.0.0
HostMetadata=os:linux,role:1c

На Windows ставится MSI-инсталлятор, в нём те же поля. Я никогда не ставлю агент в режиме passive only — только active, чтобы агент сам отправлял данные на сервер. Это упрощает межсетевой экран (нужен только outbound TCP/10051) и позволяет работать через NAT.

Шаблоны: что подключить в первый день

Zabbix 7 поставляется с библиотекой из 200+ официальных шаблонов. Я не использую и трети, но базовый набор для офиса всегда одинаковый.

Объект мониторингаШаблонЧто снимаем
Linux-серверLinux by Zabbix agent 2CPU, RAM, swap, disk space, IO, network, fs inodes
Windows-серверWindows by Zabbix agent activeТо же + service status, eventlog
PostgreSQLPostgreSQL by Zabbix agent 2Connections, replication, locks, db size, slow queries
VMware ESXiVMware HypervisorCPU/RAM hosts, datastore usage, VM state, vMotion
MikrotikMikrotik by SNMPInterface traffic, CPU, RAM, temperature, uptime
UPS APCAPC UPS SNMPBattery charge, runtime, load, input voltage
ПринтерыGeneric Printer SNMPToner level, paper jam, page count
HTTP-сервисыHTTP ServiceStatus code, response time, SSL expiration

Шаблон HTTP Service я особенно люблю — он умеет проверять по списку URL: статус 200, время ответа, срок действия SSL-сертификата. Триггер «SSL истекает через 14 дней» спасает от классического конфуза, когда сертификат продлить не успели.

Кастомные UserParameters: 1С, RAID, бэкапы

Из коробки Zabbix не знает про 1С, про статус аппаратного RAID HP/Dell, про свежесть бэкапа. Это закрывается через UserParameter — простые скрипты, которые возвращают значение в STDOUT.

Мониторинг кластера 1С через утилиту rac:

# /etc/zabbix/zabbix_agent2.d/userparameters_1c.conf
UserParameter=1c.cluster.sessions[*],/usr/local/bin/rac session list --cluster=$1 | grep -c '^session :'
UserParameter=1c.cluster.connections[*],/usr/local/bin/rac connection list --cluster=$1 | grep -c '^connection :'
UserParameter=1c.cluster.locks[*],/usr/local/bin/rac lock list --cluster=$1 | wc -l
UserParameter=1c.process.ragent,pgrep -c ragent
UserParameter=1c.process.rmngr,pgrep -c rmngr
UserParameter=1c.port.1541,nc -z -w2 127.0.0.1 1541 && echo 1 || echo 0

Триггер «1С: упал ragent на хосте» формулируется так: last(/srv-1c/1c.process.ragent)=0 and nodata(/srv-1c/1c.process.ragent,5m)=0. Условие nodata=0 защищает от ложных срабатываний при потере связи с агентом.

Мониторинг RAID HP Smart Array через ssacli:

UserParameter=raid.status,/opt/smartstorageadmin/ssacli/bin/ssacli ctrl all show status | grep -c "OK"
UserParameter=raid.degraded,/opt/smartstorageadmin/ssacli/bin/ssacli ctrl all show config | grep -c "Failed\|Rebuilding"

Свежесть бэкапов мы уже обсудили в статье про 3-2-1, но повторюсь — это базовый паттерн:

UserParameter=backup.borg.last[*],stat -c %Y /var/log/backup/borg-$1.success 2>/dev/null || echo 0
UserParameter=backup.restic.last[*],stat -c %Y /var/log/backup/restic-$1.success 2>/dev/null || echo 0

Триггер: разница между fuzzytime(28h) и last value больше 0 — отправляется алерт.

Триггеры: только то, что требует реакции

Самая частая ошибка новичков — настроить 200 триггеров на каждый чих. Через неделю инженер перестаёт смотреть оповещения, потому что 80% — шум. Я придерживаюсь правила: триггер существует только если на него предусмотрена конкретная реакция. Нет реакции — нет триггера, есть только график для разбора инцидентов.

Базовый набор триггеров для офисного сервера:

Severity «Disaster» уходит в Telegram немедленно с упоминанием дежурного. «High» — в Telegram с задержкой 2 минуты (часто через минуту проблема рассасывается). «Average» — почтой раз в 15 минут агрегатом. «Warning» и «Information» — в утренний отчёт.

Telegram-нотификации: правильная настройка

Веб-интерфейс Zabbix хорош, но никто не сидит в нём 24/7. Алерты должны прилетать туда, где инженер уже есть — в Telegram. В Zabbix 7 для этого есть встроенный media type.

Настройка по шагам. Сначала создаём бота через @BotFather, получаем токен. Создаём отдельный канал «ZBX Alerts ACME», добавляем туда бота с правами администратора, узнаём chat_id.

В Zabbix: Administration → Media types → Telegram → клонируем дефолтный → подставляем токен. На уровне пользователя в Profile → Media — добавляем send to (chat_id) и расписание (например, 24/7 для дежурного).

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

Subject:
{{ALERT.SUBJECT}}

Body:
🚨 *{HOST.NAME}*
{{ITEM.NAME1}}: {{ITEM.VALUE1}}
Severity: {EVENT.SEVERITY}
Started: {{EVENT.DATE}} {{EVENT.TIME}}
Trigger: {{TRIGGER.NAME}}

Last 3 values:
1. {ITEM.LASTVALUE1}
2. {ITEM.LASTVALUE2}
3. {ITEM.LASTVALUE3}

Open in Zabbix:
https://zbx.itfresh.ru/tr_events.php?triggerid={{TRIGGER.ID}}&eventid={{EVENT.ID}}

Эмодзи в начале строки помогает мгновенно разобрать поток сообщений. У нас принято: 🚨 — disaster, ⚠️ — high, ℹ️ — info, ✅ — recovery.

Дашборды: что должно быть на главном экране

В Zabbix 7 переработали систему дашбордов — теперь они нормально настраиваются drag-and-drop, поддерживают условную окраску, можно делать вложенные страницы. Я делаю три уровня:

Overview Office. Один дашборд на всех клиентов или на текущий офис. Карта проблем с цветовой подсветкой по severity, график доступности критичных хостов за 24 часа, топ-5 хостов по CPU и RAM, таймлайн событий.

Per-host detail. Отдельный дашборд на каждый критичный сервер: CPU, RAM, swap, диски, сеть, бизнес-метрики (для 1С — сессии, для PostgreSQL — connections и slow queries). Используется при разборе инцидентов.

Daily report. Дашборд для утреннего обхода. Сводка за прошедшие сутки: были ли алерты, сколько триггеров сработало, какие хосты были недоступны, статус всех бэкапов.

Важная фишка Zabbix 7 — функция «Top hosts» с условной окраской. Можно за 10 секунд увидеть, у какого хоста CPU выше 80% или диск заполнен на 95%. Раньше для этого приходилось пилить SQL-запросы или грязные хаки.

Discovery и LLD: масштабируемся без ручной работы

В офисе с десятком серверов добавлять хосты вручную нормально. С пятидесятью — уже больно. С сотней — невозможно. Спасает Network Discovery и Low-Level Discovery (LLD).

Network Discovery я настраиваю для подсети рабочих станций: каждые 30 минут Zabbix пингует диапазон 10.10.20.0/24, при отклике — добавляет хост в группу «Workstations» и применяет шаблон с минимальным мониторингом (uptime, ответ ICMP, открытые порты).

LLD используется внутри шаблонов: Linux Agent сам обнаруживает все диски, файловые системы, сетевые интерфейсы и создаёт элементы данных по прототипам. Не нужно вручную добавлять каждый раздел — добавили диск, через минуту в Zabbix появились метрики.

Пример прототипа в шаблоне для дисков:

LLD rule: vfs.fs.discovery (returns {#FSNAME}, {#FSTYPE})
Item prototype:
  Key: vfs.fs.size[{#FSNAME},pfree]
  Name: Free space on {#FSNAME} (%)
  Trigger prototype:
    Expression: last(/Linux/vfs.fs.size[{#FSNAME},pfree])<10
    Severity: High
    Description: Disk {#FSNAME} less than 10% free

Безопасность: чего я никогда не делаю

За годы внедрений я выработал короткий список «никогда»:

Шифрование агент-сервер через PSK включается на уровне агента:

# /etc/zabbix/zabbix_agent2.conf
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK-srv-1c-prod
TLSPSKFile=/etc/zabbix/psk/srv-1c-prod.psk

На стороне Zabbix Server в свойствах хоста на вкладке Encryption — выбираем PSK, вводим Identity, вставляем ключ.

Что в итоге получает клиент

Стандартный пакет внедрения от АйТи Фреш для офиса до 50 РМ включает:

Сроки — 5-7 рабочих дней при наличии доступов. Стоимость — от 60 до 120 тысяч рублей разово, дальнейшее сопровождение в рамках абонентского договора. Лицензии не нужны — Zabbix полностью open source.

FAQ

Сколько ресурсов требует Zabbix Server для офиса на 30-50 РМ?
Виртуалка с 4 vCPU, 8 ГБ RAM и 200 ГБ диска под PostgreSQL 16 и TimescaleDB. Этого хватает на 50 хостов с примерно 5000 элементов данных и историей за 90 дней.

В чём разница между zabbix_agent и zabbix_agent2?
Agent2 написан на Go, поддерживает плагины (Docker, PostgreSQL, MySQL, Memcached, Ceph), асинхронные проверки и persistent connections. Я ставлю исключительно agent2 на новых инсталляциях с 2023 года.

Как мониторить 1С через Zabbix?
Через UserParameter в zabbix_agent2 запускаем rac (утилита кластера) и парсим вывод: количество сессий, блокировок, размер базы. Отдельно мониторим процессы ragent/rmngr и порт 1541.

Можно ли заменить Zabbix на бесплатный аналог?
Prometheus + Grafana — топовый стек для динамической инфраструктуры с микросервисами. Для классического офиса с серверами, рабочими станциями и сетевым железом Zabbix удобнее: всё из коробки, без сборки exporter под каждый сервис.

Сколько стоит внедрение Zabbix под ключ для офиса?
Лицензия — 0 (open source). Работа АйТи Фреш по полному внедрению — от 60 до 120 тысяч рублей в зависимости от количества хостов и сложности шаблонов. Сопровождение входит в абонентский договор.

Хотите Zabbix без головной боли?

Если вы устали разбираться с шаблонами и триггерами самостоятельно — обратитесь в АйТи Фреш. Мы развернём Zabbix 7 в вашем офисе под ключ и возьмём на сопровождение. Заявка на itfresh.ru или по почте 7296241@gmail.com. Аудит существующей инсталляции — 3 рабочих дня.

Семёнов Е.С., технический директор АйТи Фреш. 15+ лет в IT-аутсорсинге для бизнеса.