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 со следующим стеком:
- PostgreSQL 16 с расширением TimescaleDB 2.13 — хранит метрики и историю.
- Zabbix Server 7.0 LTS — собственно сервер мониторинга.
- Zabbix Frontend на nginx + PHP 8.3.
- Zabbix Agent 2 локально на самом сервере для самомониторинга.
Ресурсы: 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 2 | CPU, RAM, swap, disk space, IO, network, fs inodes |
| Windows-сервер | Windows by Zabbix agent active | То же + service status, eventlog |
| PostgreSQL | PostgreSQL by Zabbix agent 2 | Connections, replication, locks, db size, slow queries |
| VMware ESXi | VMware Hypervisor | CPU/RAM hosts, datastore usage, VM state, vMotion |
| Mikrotik | Mikrotik by SNMP | Interface traffic, CPU, RAM, temperature, uptime |
| UPS APC | APC UPS SNMP | Battery charge, runtime, load, input voltage |
| Принтеры | Generic Printer SNMP | Toner level, paper jam, page count |
| HTTP-сервисы | HTTP Service | Status 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% — шум. Я придерживаюсь правила: триггер существует только если на него предусмотрена конкретная реакция. Нет реакции — нет триггера, есть только график для разбора инцидентов.
Базовый набор триггеров для офисного сервера:
- Disaster: сервер недоступен (ICMP), упала критичная служба (1С, AD, БД), бэкап не сделан более 26 часов.
- High: CPU > 90% в течение 15 минут, RAM используется > 95%, диск заполнен > 90%, RAID degraded.
- Average: диск заполнен > 80%, CPU > 80% в течение 30 минут, swap usage > 50%.
- Warning: SSL-сертификат истекает через 30 дней, обновления безопасности не установлены 30 дней.
- Information: uptime сервера сброшен (был перезапуск).
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
Безопасность: чего я никогда не делаю
За годы внедрений я выработал короткий список «никогда»:
- Никогда не оставляю дефолтный пароль
zabbix/zabbix. Меняется первой же командой. - Никогда не открываю Zabbix Frontend в публичный интернет без TLS и MFA. Только через VPN или через nginx с basic auth + Cloudflare Access.
- Никогда не использую один и тот же PSK для всех агентов. Скрипт генерирует уникальный 256-битный ключ на каждый хост.
- Никогда не запускаю агент с правами root. Только пользователь zabbix, sudo через NOPASSWD только на конкретные команды (smartctl, ssacli).
- Никогда не храню пароли БД и Telegram-токены в plaintext в репозитории. Только в Vault или KeePassXC.
Шифрование агент-сервер через 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 РМ включает:
- Развёрнутый Zabbix 7 на отдельной ВМ с TimescaleDB и сжатием хроники.
- Подключённые шаблоны для Windows/Linux/PostgreSQL/Mikrotik/SNMP-устройств.
- Кастомные UserParameter для 1С, RAID, бэкапов.
- 3 настроенных дашборда (Overview, Per-host, Daily Report).
- Telegram-канал с эскалацией (Disaster — мгновенно, High — через 2 минуты).
- Документ «Реакция на алерты» — что делать инженеру на каждый тип.
- Backup конфигурации Zabbix через еженедельный pg_dump в репозиторий 3-2-1.
Сроки — 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 рабочих дня.