← Вернуться к оглавлению

📊 Мониторинг VPS: выбор инструмента

Версия 1.0 | 12 сентября 2026

Сравнение трёх систем мониторинга — Netdata, Prometheus + node_exporter + Grafana и Zabbix — применительно к конкретному серверу: Docker-стек веб-проектов + VPN-панель 3x-ui. В конце — рекомендация.

📋 Исходные данные и требования

Сервер

Что работает (кандидаты на мониторинг)

VPS 193.32.179.138
├── Nginx Proxy Manager (:80, :443, :81)
├── Portainer (:9443)
├── Dozzle (:9999)              # логи контейнеров
├── Watchtower                  # автообновление образов
├── Uptime Kuma (:3001)         # доступность
├── 3x-ui (VPN)                 # порты 20000–20100 TCP/UDP, панель vpn.avk27.ru
├── Main Site (avk27.ru)
└── Проекты (go / php / node.js + БД)
        

Требования к мониторингу

  1. Диск — занято/свободно по разделам, алерты при 80–90%. Критично: 40 GB съедают бэкапы (/opt/backups), образы Docker, БД проектов
  2. Нагрузка — CPU, load average, RAM, swap
  3. Сеть — суммарный трафик и трафик именно VPN-контейнера 3x-ui
  4. Контейнеры — CPU/RAM каждого, включая 3x-ui
  5. История — видеть динамику, а не только «прямо сейчас»
  6. Уведомления — Telegram при выходе за пороги
  7. Безопасность — панель мониторинга не должна торчать в интернет (сервер с VPN регулярно сканируется)

🔍 Что уже есть и чего не хватает

Инструмент Диск (место) CPU / нагрузка История и алерты
Portainer ❌ только объём образов/томов Docker ⚠️ по контейнерам, в реальном времени
Uptime Kuma ⚠️ только доступность (HTTP/TCP/ping)
Dozzle ❌ только логи

Вывод: хостовых метрик (диск, load average, RAM) с историей и уведомлениями нет ни у одного установленного сервиса. Нужен отдельный инструмент.

🛡️ Специфика: сервер с 3x-ui

💡 Разделение ответственности: статистику трафика по каждому inbound и клиенту показывает сама панель 3x-ui (раздел статистики в веб-интерфейсе). Ни одна из трёх сравниваемых систем этого не заменяет — они работают на уровне хоста и контейнеров и дополняют панель.

Что добавляет хостовый мониторинг именно для VPN-части:

⚠️ Безопасность: диапазон 20000–20100 открыт всему интернету, сервер регулярно сканируется. Панель мониторинга публикуем только через Nginx Proxy Manager с SSL и Basic Auth (схема из инструкции, шаг 13), порт в ufw не открываем.

1️⃣ Netdata

Что это: один Docker-контейнер, мониторинг в реальном времени с разрешением до 1 секунды. Конфигурация после запуска не нужна — метрики собираются автоматически.

Покрытие требований

Ресурсы и эксплуатация

Слабые стороны

2️⃣ Prometheus + node_exporter + Grafana

Что это: конструктор из компонентов: node_exporter собирает метрики хоста, cAdvisor — контейнеров, Prometheus хранит временные ряды (TSDB) и вычисляет алерты на языке PromQL, Grafana рисует дашборды. Промышленный стандарт: именно этот стек чаще всего встречается в вакансиях и продакшене.

Покрытие требований

Ресурсы и эксплуатация

Слабые стороны

3️⃣ Zabbix

Что это: всеохватывающая платформа мониторинга «всё в одном»: сервер + база PostgreSQL + веб-интерфейс + агент. Шаблоны, триггеры, зависимости, эскалации, SLA-отчёты. Создан для парков серверов и сетевого оборудования.

Покрытие требований

Ресурсы и эксплуатация

Слабые стороны

⚖️ Сравнительная таблица

Критерий Netdata Prometheus + Grafana Zabbix
Диск, CPU, RAM, сеть хоста ✅ из коробки ✅ node_exporter ✅ шаблон
Контейнеры (вкл. 3x-ui) ✅ из коробки (cgroups) ⚠️ нужен cAdvisor ✅ agent2 + Docker-плагин
Разрешение метрик 1 секунда 15–60 секунд ~1 минута
Прогноз заполнения диска ✅ из коробки ⚠️ писать правило PredictLinear ✅ forecast-функции в триггерах
История часы–дни (до недель) месяцы–годы месяцы–годы
Алерты + Telegram ✅ минимальная настройка ⚠️ правила + Alertmanager ✅ триггеры, эскалации
Дашборды готовые, слабо кастомные ⭐ лучшие (Grafana) функциональные
RAM (ориентир) 200–400 MB 400–800 MB 600 MB – 1.2 GB
Диск (ориентир) 1–2 GB 1–3 GB/мес 2–5 GB
Компонентов 1 3–5 4
Развёртывание 15–30 мин 2–4 часа 3–6 часов
Один сервер ⭐ идеально ради истории и дашбордов избыточен
Парк серверов слабее ⭐ стандарт индустрии ⭐ сильнейший

📈 Учет масштабирования до 8 GB / 80 GB

С апгрейдом до 8 GB RAM + 80 GB SSD ресурсы перестают быть ограничением: все три стека помещаются с запасом рядом с текущими сервисами и 3x-ui. Выбор становится вопросом не «влезет ли», а «сколько времени и внимания вы готовы вкладывать» и «что будет дальше»:

Сценарий Лучший выбор
Один сервер, закрыть вопрос за вечер Netdata
Красивые дашборды, история за месяцы, интерес к DevOps-практикам Prometheus + Grafana
Несколько серверов, регламенты, эскалации, SLA Zabbix (сервер — на отдельной, более мощной машине, на этом VPS только agent2 ~30 MB)

🏆 Рекомендация

Вердикт: Netdata — сейчас, Prometheus + Grafana — на вырост, Zabbix — не для этого сервера.

Netdata закрывает все семь требований из раздела «Требования» за полчаса, без единой строчки конфигурации: место на диске с прогнозом заполнения, нагрузка, и — отдельно от всего остального трафика — CPU и сеть контейнера 3x-ui. При текущих 4 GB он занимает вдвое-втрое меньше конкурентов, при апгрейде до 8 GB это перестаёт быть важно, но простота остаётся.

Если со временем серверов станет несколько и захочется дашбордов уровня «как в больших компаниях» — имеет смысл собрать Prometheus + Grafana: экспортеры на узлах лёгкие, а знания PromQL окупаются. Апгрейд до 8 GB / 80 GB даёт этому стеку комфортный запас и для истории за месяцы.

Zabbix для одного VPS не рекомендуем независимо от ресурсов: столько же метрик дадут дешевле по времени и обслуживанию. Его ниша — парк машин с регламентами и эскалациями.

В любом варианте per-client статистика VPN остаётся в панели 3x-ui, Uptime Kuma продолжает следить за доступностью, Portainer — за контейнерами, Dozzle — за логами.

🚀 Быстрый старт: Netdata за 15 минут

Шаг 1: compose-файл

Создайте файл /opt/infrastructure/netdata.yml:

version: '3.8'

services:
  netdata:
    image: netdata/netdata:stable
    container_name: netdata
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    pid: host
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./netdata/config:/etc/netdata
      - ./netdata/lib:/var/lib/netdata
      - ./netdata/cache:/var/cache/netdata
    expose:
      - "19999"
    networks:
      - webproxy

networks:
  webproxy:
    external: true
        

Шаг 2: запуск

cd /opt/infrastructure
docker compose -f netdata.yml up -d

# Проверка
docker ps | grep netdata
docker logs netdata 2>&1 | tail -5
        

Шаг 3: доступ через NPM

  1. Откройте админку NPM: http://193.32.179.138:81
  2. Hosts → Proxy Hosts → Add Proxy Host
  3. Domain: netdata.avk27.ru, Scheme: http, Forward Hostname: netdata, Forward Port: 19999
  4. Вкладка SSL: сертификат *.avk27.ru, Force SSL, HTTP/2
  5. Вкладка Advanced — Basic Auth по схеме из шага 13 инструкции
⚠️ Порт 19999 в ufw НЕ открываем — используется expose вместо ports, наружу панель выглядит только через NPM с SSL и паролем.

Шаг 4: уведомления в Telegram (опционально, ~10 минут)

  1. Создайте бота через @BotFather, получите токен
  2. Узнайте свой chat_id (например, через @userinfobot)
  3. Впишите их в файл /opt/infrastructure/netdata/config/health_alarm_notify.conf: TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID, выставите role_recipients_telegram
  4. Перезапустите: docker restart netdata
💡 Облако: регистрация в Netdata Cloud опциональна — локальная панель, метрики и алерты полностью работают и без неё. Просто не выполняйте claim.

🔐 Безопасность (общие правила для любого из трёх стеков)

  1. Панели мониторинга — только через NPM: SSL + Basic Auth, никаких открытых портов в ufw;
  2. Exporter'ы (node_exporter :9100, cAdvisor :8080) и Zabbix agent (:10050) не имеют собственной авторизации — не публикуйте их наружу вообще, только во внутренней Docker-сети;
  3. Prometheus (:9090) тоже держать только внутри сети webproxy;
  4. Доступ к docker.sock (Netdata, cAdvisor, Zabbix agent2) — только read-only (:ro);
  5. Помните: у VPN-сервера повышенный «интерес» извне — лишняя открытая панель = лишняя точка входа.

🎉 Готово. Сравнение обновляйте при изменении конфигурации сервера или появлении новых узлов.