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, используя следующий стек технологий:
- 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» мы ставим задержку в 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
Безопасность: чего я никогда не делаю
За годы внедрений я выработал короткий список «никогда»:
- Никогда не оставляю дефолтный пароль
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 рабочих дня.
