termal.in

← Блог

Лёгкий мониторинг VPS: Beszel против Netdata, Uptime Kuma и Nezha (и когда не нужен ни один)

· Termalin Team vpslinuxcomparisontoolshomelab

Для лёгкого мониторинга VPS-сервера — одного или нескольких — честный короткий список и правда короток, а правильный выбор зависит от того, какой вопрос вы задаёте. Хотите знать, здоровы ли ваши серверы, — берите Beszel. Хотите знать, могут ли пользователи открыть ваш сайт, — берите Uptime Kuma. Для панели по парку VPS в разных регионах — Nezha, для одной машины прямо сейчас — Glances, а для посекундной детализации во время инцидента — Netdata. Большинству нужен один из них, иногда два, редко — полноценный стек наблюдаемости.

Оговорюсь сразу: мы делаем Termalin — один из вариантов ниже. Инструменты с открытым исходным кодом описаны по их публичной документации, проверенной 15 октября 2026 года, и некоторые из них по ряду пунктов выигрывают прямо.

Этот пост о том, что отслеживает каждый инструмент, во что на самом деле обходится «лёгкость» и о тех частях, которые топовые результаты пропускают: кто следит за монитором, когда умирает сам VPS, как не дать оповещениям превратиться в шум, маленький запасной скрипт и как мониторить машину без единого открытого порта.

Короткий ответ: какой инструмент под какой вопрос

  • Beszel — «в порядке ли мои серверы?» Хаб плюс крошечный агент на каждом сервере. Метрики хоста и статистика Docker, с оповещениями в Telegram и не только. Лёгкий выбор по умолчанию.
  • Netdata — «что произошло ровно в ту секунду?» Посекундные метрики и глубокая детализация по каждому процессу. Самый прожорливый до данных здесь — в этом и смысл.
  • Uptime Kuma — «может ли внешний мир достучаться до моего сервиса?» Проверки HTTP, TCP, ping и DNS со страницами статуса. Он не следит за CPU, памятью или диском.
  • Nezha — «как чувствует себя мой парк VPS — у разных провайдеров и в разных регионах?» Панель в стиле «пробника» с веб-терминалом, популярная для мультирегиональных схем.
  • Glances — «что эта одна машина делает прямо сейчас?» Живой обзор, как htop или btop, только больше на экране. Не инструмент оповещений.
  • Termalin — «следи за моими серверами и предупреждай меня — без установки чего-либо лишнего». Мониторинг едет поверх коннектора для SSH-доступа, который у вас уже есть. Платный, и с реальными ограничениями (ниже).

Что на самом деле значит «лёгкий» для мониторинга серверов

«Лёгкость» обычно меряют памятью агента — и это не то число. Считайте всё целиком:

  • Агент на каждой машине — обычно один скомпилированный бинарник, маленький по задумке.
  • Хаб или дашборд — вот где сидит вес: веб-приложение, часто с базой данных, работающее где-то, что должно оставаться на связи.
  • Открытые порты — каждый слушающий порт — это поверхность атаки, за которую теперь отвечаете вы.
  • Контейнеры и службы, которые надо патчить — ещё одна вещь, которую придётся держать обновлённой, всегда.

По этой мерке Beszel (один агент + один контейнер-хаб) и Uptime Kuma (один контейнер) по-настоящему легки. Посекундный сбор Netdata — самый требовательный в этой группе и к CPU, и к хранилищу: это плата за его разрешение. А классический «большой стек» — Prometheus плюс node_exporter плюс Grafana плюс Alertmanager — это четыре движущиеся части, которые надо развернуть, защитить и патчить. Он отличный, но не лёгкий, и для одного-двадцати серверов это обычно больше, чем нужно для задачи.

Претенденты

Beszel

Хаб (построен на PocketBase) плюс небольшой агент на Go на каждом сервере. Агент может работать двумя способами: хаб подключается к нему по SSH на порту 45876, либо агент сам звонит наружу в хаб по WebSocket с токеном — второй режим не требует входящего порта и работает за NAT. Он читает метрики хоста и статистику контейнеров Docker и шлёт оповещения по CPU, памяти, диску, трафику, температуре и статусу up/down в 25+ каналов, включая Telegram и ntfy. Лицензия MIT; на момент написания документация — на версии v0.21. Это тот, кого надо обойти в простом вопросе «здоровы ли мои серверы».

Netdata

Посекундные метрики с плотным живым дашбордом и массой автоматической детализации по процессам и службам. Агент бесплатен и работает без ограничений на ваших хостах, отдавая собственный дашборд локально. Netdata Cloud, который связывает агенты вместе и маршрутизирует уведомления, бесплатен на тарифе Community до 5 подключённых узлов; дальше это Homelab за $90/год (без ограничений, в рамках разумного использования) или Business за $4,50 за узел в месяц при годовой оплате. Берите его, когда отлаживаете скачок и минутного среднего слишком грубо.

Uptime Kuma

Self-hosted-монитор доступности: проверки HTTP(s), TCP, по ключевому слову, ping, DNS, push и контейнеров Docker, 90+ сервисов уведомлений и публичные страницы статуса. Около 92 тыс. звёзд на GitHub, MIT. Об одном стоит сказать прямо: Uptime Kuma не собирает CPU, память или диск хоста — он снаружи следит за тем, отвечают ли сервисы. Это делает его естественным напарником инструмента метрик хоста, а не заменой ему, и обычный ответ на запрос «self-hosted аналог Uptime Kuma» на самом деле — «поставьте Kuma в пару с Beszel».

Nezha

Дашборд плюс агент, который сообщает статус системы, выполняет проверки HTTP/TCP/ping и проверки срока сертификатов, поднимает оповещения, запускает задачи по расписанию и даёт веб-терминал к каждому хосту. Агент звонит наружу к дашборду. Это де-факто панель-«пробник» для VPS в китайско- и корееязычных сообществах, и она блистает, когда у вас много маленьких VPS у разных провайдеров и в разных регионах, а хочется одну страницу на всех.

Glances (и htop/btop)

Glances — живой обзор одной машины: CPU, память, диск, сеть, процессы и прочее на одном экране, по SSH или через необязательную локальную веб-страницу. Как htop и btop, он отвечает на вопрос «что эта машина делает прямо сейчас» и не более — ни истории, ни настоящих оповещений. Держите его в наборе инструментов для ручной отладки; не ждите, что он вас разбудит.

Таблица сравнения

ИнструментЧто отслеживаетОповещения и каналыНужен входящий порт?ЦенаСильная сторона
BeszelМетрики хоста + статистика DockerCPU/память/диск/трафик/температура/статус; 25+ каналов (Telegram, ntfy)Нет в режиме WebSocket; да (45876) в режиме SSHБесплатно, MIT (self-hosted)Лёгкий контроль здоровья парка
NetdataМетрики хоста, посекундноВстроенные алармы; уведомления через агент или CloudЛокальный дашборд на 19999; связь с Cloud — исходящаяАгент бесплатно; Cloud бесплатно до 5 узлов, далее $90/год или $4,50 за узел в месяцДетализация инцидента в высоком разрешении
Uptime KumaДоступность: HTTP/TCP/ping/DNS/push/контейнеры (без метрик хоста)90+ сервисов; страницы статусаСам обращается к целям; дашборд хостите выБесплатно, MIT (self-hosted)Внешняя доступность + страницы статуса
NezhaСтатус системы + HTTP/TCP/ping + срок сертификатовОповещения, задачи по расписанию; веб-терминалАгенты звонят наружу к дашбордуБесплатно (self-hosted)Панель для VPS в разных регионах
GlancesОдна машина, в реальном времениНе инструмент оповещенийЛокально; опционально веб-интерфейсБесплатно (self-hosted)Одна машина прямо сейчас
TermalinМетрики хоста через Connector (без второго агента)Оповещения с порогами по умолчанию; email, iOS-пуш, Telegram, webhookНет — Connector только на исходящихPro $10/мес или $8/мес за год; Team $15 за пользователяЗдоровье + оповещения без установки

Кто следит за монитором, когда умирает VPS?

Вот пробел, который пропускает большинство сравнений. Если ваш хаб или дашборд работает на том же VPS, за которым следит, он умрёт вместе с этим VPS — а мёртвый сервер не может сообщить вам, что он мёртв. «Сервер недоступен» — ровно то оповещение, которое вам нужнее всего, и работает оно только со второй точки наблюдения.

Три способа закрыть это:

  • Второй дешёвый VPS в другом месте, на котором крутится внешняя проверка. Так делаем мы: мы держим Uptime Kuma на отдельном недорогом VPS, единственная задача которого — заметить, когда основные машины перестают отвечать.
  • Бесплатный внешний чекер, который пингует ваши публичные эндпоинты извне вашей сети.
  • Облачный сервис, чья логика «работает ли оно?» крутится на инфраструктуре, которая вам не принадлежит, — и потому переживает падение вашей машины.

Что бы вы ни выбрали, правило простое: то, что обнаруживает «offline», не должно жить на машине, которая уходит в offline.

Оповещения, которые не приучают вас их игнорировать

Монитор, который дёргает вас десять раз в час, заглушат за неделю — и тогда он хуже, чем ничего. Инструменты «из коробки» обычно либо молчат, пока вы не напишете правила, либо болтливы, пока вы их не настроите. Так или иначе работа одна и та же:

  • Одно сообщение, когда проблема возникает, и одно, когда она уходит — а не напоминание каждые пять минут.
  • Группировка — несколько проблем в одну минуту приходят одним сообщением; по-настоящему критическое всё равно проходит сразу.
  • Без повторов в тот же день по одной и той же проблеме, если только она не критична и не держится.
  • Тихий первый день, чтобы только что подключённая машина не вывалила на вас разом все уже упавшие юниты и просроченные сертификаты.
  • Заглушка по каждому виду оповещений и по каждому серверу, чтобы одна шумная проверка не вынуждала вас выключать всё.

И выбирайте пороги, которые что-то значат: диск на 90% — предупреждение, на 95% — критично, или прогноз заполнения в течение суток; заканчивающиеся inodes; процесс, убитый из-за нехватки памяти (OOM); упавший юнит systemd; TLS-сертификат за 14 дней до истечения (критично — за 3); и «offline» только через несколько минут, чтобы перезагрузка не была тревогой. Какой бы инструмент вы ни выбрали, именно эта настройка — настоящая работа мониторинга, важнее выбора самого инструмента.

Запасной вариант в десять строк: оповещение о месте на диске в Telegram

Прежде чем что-то разворачивать, самый частый отказ VPS — заполненный диск — можно закрыть с помощью cron, df и curl. Это ответ на запросы «disk space alert script linux» и «server monitoring telegram alerts», когда дашборд вам пока не нужен.

Держите секреты вне скрипта. Читайте их из окружения:

#!/usr/bin/env bash
# disk-alert.sh — warn via Telegram when a filesystem is too full.
set -euo pipefail

: "${TELEGRAM_BOT_TOKEN:?set TELEGRAM_BOT_TOKEN}"
: "${TELEGRAM_CHAT_ID:?set TELEGRAM_CHAT_ID}"
threshold="${DISK_THRESHOLD:-90}"

df -x tmpfs -x devtmpfs --output=pcent,target | tail -n +2 | while read -r pct mount; do
  used="${pct%\%}"
  [ "$used" -ge "$threshold" ] || continue
  curl -fsS --max-time 15 \
    --data-urlencode "chat_id=${TELEGRAM_CHAT_ID}" \
    --data-urlencode "text=$(hostname): ${mount} is ${used}% full" \
    "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" >/dev/null
done

Реальные значения положите в файл, доступный только root, — никогда в сам скрипт или в crontab:

# /etc/disk-alert.env  — chmod 600, owned by root
export TELEGRAM_BOT_TOKEN=123456789:replace-with-your-bot-token
export TELEGRAM_CHAT_ID=987654321
export DISK_THRESHOLD=90

Затем запускайте его каждые пятнадцать минут через cron. Сохраните эту строку как /etc/cron.d/disk-alert (этот формат, с именем пользователя, — для файлов в /etc/cron.d/):

*/15 * * * * root . /etc/disk-alert.env && /usr/local/bin/disk-alert.sh

Он повторяется каждые пятнадцать минут, пока диск остаётся полным. Для оповещения на крайний случай это сделано намеренно; если слишком громко — запускайте раз в час.

Создайте бота через @BotFather, отправьте ему одно сообщение, чтобы он мог вам отвечать, и один раз прочитайте свой chat_id из getUpdates. Вот и всё: ни агента, ни порта, ни дашборда. Дальше нескольких машин это не масштабируется, но поймает отказ, который кладёт большинство VPS.

Мониторинг за NAT, CGNAT или без открытых портов

Машина за NAT или CGNAT не может принять входящее соединение, так что любой монитор, который работает, подключаясь к машине, отпадает. Те, что работают, все устроены одинаково — машина тянется наружу:

  • Beszel в режиме WebSocket: агент звонит наружу в хаб, без входящего порта. (Режим SSH требует входящего 45876, так что здесь его избегайте.)
  • Netdata: связь агента с Netdata Cloud — исходящая.
  • Uptime Kuma: используйте push-монитор — машина по расписанию зовёт URL Kuma, и Kuma предупреждает, когда вызовы прекращаются.
  • Termalin: Connector работает только на исходящих и никогда не слушает порт.

Общий приём — и почему «пусть тянется наружу» единственный безопасный ответ для приватной машины — в SSH за NAT без проброса портов (на английском), а версия для домашней лаборатории — в SSH к домашнему NAS или серверу.

Где место Termalin — и где нет

Подход Termalin отличается от инструментов выше: он вообще не добавляет отдельного агента мониторинга. Если на сервере уже есть Connector от Termalin — тот самый агент на исходящих, без входящего порта, что вы используете для доступа по SSH без ключа, — то он уже под мониторингом. Второго агента нет: раз в минуту Termalin выполняет несколько команд только для чтения (/proc, df, ps и подобные) поверх соединения, которое Connector уже держит. Машине это стоит нескольких миллисекунд CPU и примерно килобайта в минуту.

Читает он обычную картину здоровья: CPU (включая iowait и steal), нагрузку и давление (PSI), память и swap, место на диске и inodes, дисковый и сетевой I/O, сокеты и открытые файлы, процессы, контейнеры, упавшие службы, неудачные входы по SSH, ожидающие обновления безопасности, слушающие порты и TLS-сертификаты с числом дней до истечения. Оповещения работают с порогами по умолчанию, без правил, которые надо писать, и сделаны так, чтобы молчать: одно при возникновении, одно при снятии, с группировкой, без повторов в тот же день, со спокойным первым днём и заглушкой по каждому виду. Они уходят на email, в iOS-пуш, в Telegram (бот подключается одним касанием) и в webhook, который принимают Slack и Discord, подписанный HMAC-SHA256. История — 90 дней на Pro и два года на Team.

Поскольку ИИ-ассистент может читать те же данные через облачный эндпоинт MCP Termalin (server_metrics и alerts_list), можно просто спросить «как там мои серверы?» в Claude или ChatGPT и получить ответ по собранным данным. В веб-терминале выделите ошибку в выводе и выберите «Объяснить выделенное»: ассистент пишет короткий диагноз простым языком и заканчивает несколькими командами-проверками только для чтения, которые кнопка набирает в сессию за вас. Полную картину смотрите на странице мониторинг серверов.

Теперь честные ограничения — потому что по ряду из них инструменты с открытым кодом его обходят:

  • Нет внешних проверок доступности и нет страниц статуса. Это инструмент метрик хоста и оповещений, а не монитор доступности — Uptime Kuma по-прежнему его дополняет.
  • Нет сбора логов и нет пользовательских метрик. Это не замена Grafana/Prometheus.
  • Дашборды пока только в веб-кабинете, не в десктоп-приложении — хотя само десктоп-приложение показывает CPU, память и диск подключённого хоста в реальном времени на панели статистики и в сетке наблюдения (на английском).
  • Без сквозного шифрования — эти числа хранятся в виде, который сервис может прочитать, потому что ему приходится их читать, чтобы рисовать графики и поднимать оповещения.
  • Нет на тарифе Free. Нужен Connector, который входит в Pro ($10/мес, или $8/мес при оплате за год — $96/год) и Team ($15 за пользователя), с пробным периодом Pro на 14 дней без привязки карты.

Если «бесплатно и self-hosted» — жёсткое требование, ваш ответ — Beszel или Uptime Kuma, и это честный выбор. Случай Termalin уже: вы и так используете его для SSH-доступа, и вам не хочется поднимать и нянчить отдельный стек мониторинга ради графиков здоровья и вменяемых оповещений.

Выбор по ситуации

  • Один VPS для хобби. Beszel для здоровья — или просто скрипт на cron выше, если всё, чего вы боитесь, — заполненный диск. Позже добавьте Uptime Kuma, если держите публичный сайт.
  • 5–20 VPS у разных провайдеров (Hetzner, Contabo, Hostinger, пара дроплетов). Beszel для метрик плюс Uptime Kuma для доступности, причём инстанс Kuma — на отдельной машине. Если предпочитаете одну панель с веб-терминалом — Nezha. Если у вас уже есть Termalin для SSH — включите его мониторинг и обойдитесь без лишнего стека.
  • Домашняя лаборатория за CGNAT. Что угодно только на исходящих: Beszel в режиме WebSocket, Netdata в Cloud или push-монитор Kuma — см. плейбук «SSH за NAT» (на английском).
  • «Хочу, чтобы мой ИИ-ассистент отвечал на вопрос „как там серверы”». Это случай Termalin: те же данные, что видит человек, прочитанные агентом через MCP.

Вопросы и ответы

Netdata бесплатен? Агент бесплатен и работает без ограничений на ваших хостах, со своим локальным дашбордом. Тариф Community у Netdata Cloud бесплатен до 5 подключённых узлов; сверх того — Homelab за $90/год или Business за $4,50 за узел в месяц при годовой оплате.

Следит ли Uptime Kuma за CPU, памятью или диском? Нет. Uptime Kuma проверяет, отвечают ли сервисы — HTTP, TCP, ping, DNS, контейнеры и push — снаружи. Для CPU, памяти и диска хоста поставьте его в пару с Beszel, Netdata или Termalin.

Beszel против Netdata — что легче? Beszel. Это один маленький агент на машину плюс единственный хаб. Netdata собирает посекундно и самый прожорливый в этой группе; его выбирают за разрешение, а не за лёгкость.

Какой лучший бесплатный мониторинг VPS с оповещениями в Telegram? Для здоровья хоста Beszel шлёт в Telegram и бесплатен в self-hosted. Для доступности то же умеет Uptime Kuma. Для затычки без установки скрипт cron + curl выше шлёт прямо в Telegram, ничего не держа в фоне.

Как мониторить VPS за NAT или без открытых портов? Используйте инструмент, где машина тянется наружу: Beszel в режиме WebSocket, агент Netdata в Cloud, push-монитор Kuma или Connector от Termalin. Ни одному из них не нужен входящий порт. См. SSH за NAT без проброса портов (на английском).


Termalin — кроссплатформенный SSH-клиент; на Pro и Team каждый сервер с Connector под мониторингом — с графиками и оповещениями по порогам по умолчанию, и на машину не ставится ничего лишнего — см. мониторинг серверов или скачайте его.

Попробуйте на одном хосте.

Termalin — быстрый SSH-клиент для вас и ваших агентов.

Бесплатный тариф · 14 дней Pro бесплатно · цены