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

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

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 РМ

Знаете, не стоит усложнять там, где не нужно. Для обычного офиса вполне хватит одной виртуальной машины. Лично я разворачиваю Zabbix на 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» мы ставим задержку в 2 минуты перед отправкой в Telegram (часто бывает, что через минуту проблема сама собой «рассасывается»). А вот «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, или Low-Level Discovery, это вообще сказка! Он используется прямо внутри шаблонов: 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-аутсорсинге для бизнеса.

Подпишитесь на рассылку ITfresh

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

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.