Мониторинг сервера — это разница между «сайт лежал всю ночь, узнали от клиентов» и «пришёл алерт, починили за десять минут». Хорошая новость: для VPS не нужны платные системы наблюдения — связка из htop для ручной диагностики и Netdata с уведомлениями в Telegram закрывает 90% задач и настраивается за полчаса. В этой инструкции пошагово поднимем мониторинг VPS своими руками на Ubuntu 24.04 LTS: посмотрим на метрики в реальном времени, установим Netdata, спрячем панель от посторонних и заставим сервер сам писать вам в Telegram при проблемах.
Что вообще мониторить на VPS
Прежде чем ставить инструменты, полезно понимать, на какие метрики смотреть:
- CPU — постоянная загрузка выше 80–90% означает, что процессор стал узким местом; отдельно важен показатель steal (виртуализация отбирает такты — на KVM с выделенными ядрами он должен быть близок к нулю).
- Load average — среднее число процессов в очереди. Ориентир: не выше количества ядер. Для 12 vCPU load 8 — норма, load 30 — беда.
- RAM и swap — важна не цифра «занято» (Linux использует свободную память под кеш, это хорошо), а активный обмен со swap и появление OOM-killer в логах.
- Диск — свободное место (заполненный диск роняет базы данных) и загруженность по вводу-выводу (iowait).
- Сеть — трафик и число соединений: аномальный рост часто первым сигналит об атаке или взломе.
- Службы — жив ли nginx, MySQL, ваше приложение; отвечает ли сайт по HTTP.
Уровень 1. htop: ручная диагностика за секунды
Htop — интерактивный монитор процессов, первый инструмент, который открывают при любых «сервер тормозит». Установка на Ubuntu 24.04:
sudo apt update
sudo apt install htop
Запускается командой htop. Сверху — шкалы загрузки каждого ядра, память и swap, load average и uptime; ниже — список процессов. Что нажимать:
F6— сортировка (по CPU%, MEM% и другим колонкам);F4— фильтр по имени процесса, напримерnginx;F5— дерево процессов: видно, кто кого породил;F9— отправить сигнал (аккуратно: SIGKILL убивает процесс без сохранения данных);q— выход.
Полезное дополнение к htop — пара утилит для дисков и сети:
sudo apt install iotop-c nethogs
sudo iotop-c # кто грузит диск
sudo nethogs # какой процесс ест трафик
df -h # свободное место на дисках
Слабое место ручной диагностики очевидно: htop показывает «сейчас», но не хранит историю и не разбудит вас ночью. Для этого нужен уровень 2.
Уровень 2. Netdata: графики всего в реальном времени
Netdata — опенсорсный агент мониторинга, который после установки сам находит запущенные службы (nginx, MySQL, PostgreSQL, Redis, Docker и десятки других) и рисует сотни графиков с посекундной детализацией. Настройки для старта не требуются вообще.
Установка
Официальный установщик работает на Ubuntu, Debian, AlmaLinux и Rocky Linux:
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh
Скрипт подключит репозиторий Netdata и поставит пакет. Проверяем, что служба запустилась:
sudo systemctl status netdata
Панель поднимается на порту 19999. По ресурсам агент скромен — около 1–3% одного ядра и 150–300 МБ RAM, но на самых маленьких VPS это заметно. Комфортный минимум для «Netdata + ваши приложения» — что-то вроде тарифа Pro у Cheap-Host: 12 vCPU, 16 ГБ RAM и NVMe за 750 ₽/мес — мониторинг занимает пару процентов ресурсов и не мешает основной нагрузке.
Закрываем панель от посторонних
Важный момент: из коробки Netdata слушает все интерфейсы, а авторизации в панели нет — любой, кто знает IP, увидит метрики вашего сервера. Привязываем панель только к localhost. Открываем конфиг:
sudo /etc/netdata/edit-config netdata.conf
В секции [web] задаём:
[web]
bind socket to IP = 127.0.0.1
Перезапускаем:
sudo systemctl restart netdata
Теперь панель доступна только с самого сервера. Чтобы открыть её со своего компьютера, пробрасываем порт через SSH-туннель:
ssh -L 19999:127.0.0.1:19999 user@IP_сервера
Пока сессия открыта, панель живёт в браузере по адресу http://localhost:19999. Альтернатива туннелю — правило файрвола, разрешающее порт 19999 только с вашего IP: как это сделать, разобрано в статье настройка файрвола UFW. Кстати, этот способ работает и на NAT VPS: панель на 127.0.0.1 не требует отдельного внешнего порта — хватает SSH-доступа.
Уровень 3. Уведомления в Telegram
Netdata умеет не только рисовать графики: в комплекте сотни готовых проверок здоровья (место на диске, RAM, iowait, упавшие службы), и каждая может отправить алерт. Настроим доставку в Telegram.
Шаг 1. Создаём бота
- Пишем в Telegram боту
@BotFatherкоманду/newbot, задаём имя и логин. - Сохраняем выданный токен вида
1234567890:AAE4ik…. - Открываем чат со своим новым ботом и отправляем ему любое сообщение (без этого бот не сможет писать вам первым).
Шаг 2. Узнаём chat id
Выполняем на сервере или в любом терминале (подставьте свой токен):
curl -s "https://api.telegram.org/bot<ТОКЕН>/getUpdates"
В JSON-ответе ищем "chat":{"id":123456789… — это и есть ваш chat id.
Шаг 3. Включаем Telegram в Netdata
sudo /etc/netdata/edit-config health_alarm_notify.conf
Находим и правим три строки:
SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="1234567890:AAE4ik..."
DEFAULT_RECIPIENT_TELEGRAM="123456789"
Перезапускаем службу и проверяем доставку встроенным тестом (запускается от пользователя netdata):
sudo systemctl restart netdata
sudo su -s /bin/bash netdata -c '/usr/libexec/netdata/plugins.d/alarm-notify.sh test'
В Telegram должны прийти тестовые сообщения о WARNING, CRITICAL и восстановлении. Всё — теперь заполненный диск или упавший MySQL сервер сообщит вам сам.
Подстройка порогов
Если какой-то алерт шумит, его порог можно поменять. Правила лежат в health.d, редактируются так же:
sudo /etc/netdata/edit-config health.d/disks.conf
sudo netdatacli reload-health
В файлах меняются значения warn: и crit: — например, предупреждать о диске не при 80%, а при 90% заполнения.
Бонус: пинг сайта с алертом без Netdata
Иногда нужен максимально простой внешний контроль: отвечает ли сайт. Скрипт из десяти строк плюс cron решают задачу:
#!/bin/bash
# /usr/local/bin/site-check.sh
URL="https://example.com"
TOKEN="1234567890:AAE4ik..."
CHAT_ID="123456789"
CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL")
if [ "$CODE" != "200" ]; then
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="Сайт ${URL} вернул код ${CODE}"
fi
Делаем исполняемым и вешаем в cron каждые 5 минут:
sudo chmod +x /usr/local/bin/site-check.sh
( crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/site-check.sh" ) | crontab -
Важный нюанс: такой скрипт должен работать с другого сервера, иначе при падении VPS он упадёт вместе с сайтом и промолчит. Идеальный кандидат — копеечный NAT VPS: у Cheap-Host тариф NAT Start стоит 59 ₽/мес, и его 1 ГБ RAM для «сторожа» более чем достаточно.
Что выбрать: сводная таблица
| Инструмент | Что даёт | История | Алерты | Когда использовать |
|---|---|---|---|---|
| htop | Процессы и ресурсы в моменте | Нет | Нет | Ручная диагностика «здесь и сейчас» |
| Netdata | Сотни графиков, автообнаружение служб | Есть | Telegram, email и др. | Основной мониторинг 1–5 серверов |
| Скрипт + cron | Проверка доступности извне | Нет | Telegram | Внешний «сторож» на втором сервере |
| Grafana + Prometheus | Гибкие дашборды и правила | Есть | Любые | Парк серверов, продакшн-инфраструктура |
Про последний вариант у нас есть отдельный разбор — Grafana + Prometheus: профессиональный мониторинг VPS: он оправдан, когда серверов становится много или нужны кастомные метрики приложения.
FAQ
Сколько ресурсов потребляет Netdata?
Порядка 1–3% одного ядра CPU и 150–300 МБ RAM в зависимости от числа собираемых метрик. На VPS с 1 ГБ памяти это ощутимо — там разумнее сократить историю метрик в настройках или ограничиться htop и скриптом с алертами. На тарифах от 8 ГБ RAM накладные расходы незаметны.
Безопасно ли открывать панель Netdata наружу?
Нет: по умолчанию порт 19999 доступен без авторизации. Привяжите панель к 127.0.0.1 и смотрите через SSH-туннель, закройте порт файрволом или поставьте перед Netdata обратный прокси с паролем.
Чем Netdata отличается от Grafana + Prometheus?
Netdata — решение «поставил и работает»: само находит службы, рисует графики, присылает алерты. Grafana + Prometheus гибче и лучше масштабируются на парк серверов, но требуют настройки экспортеров, правил и дашбордов. Для 1–5 серверов Netdata обычно достаточно.
Что делать, если алерты приходят слишком часто?
Поднимите пороги под свою нагрузку: sudo /etc/netdata/edit-config health.d/<файл>.conf, поменяйте warn и crit, шумные проверки переведите на to: silent. Примените изменения командой sudo netdatacli reload-health.
Можно ли мониторить несколько VPS в одной панели?
Да. У Netdata есть режим стриминга: агенты на «детях» отправляют метрики на «родительский» узел, где хранится история и работают алерты. Альтернатива — бесплатный тариф Netdata Cloud, объединяющий панели нескольких агентов.
Вывод
Мониторинг VPS своими руками — это три уровня: htop для быстрой диагностики, Netdata для графиков и истории, Telegram-алерты, чтобы о проблеме узнавать раньше пользователей. Всё бесплатно, опенсорсно и ставится за полчаса. Дополните картину резервным копированием — мониторинг предупреждает о проблемах, а бэкап спасает, когда предупреждение опоздало. Если под проект с мониторингом нужен сервер с запасом — у Cheap-Host тариф Pro за 750 ₽/мес: 12 vCPU, 16 ГБ RAM, NVMe, безлимитный трафик и uptime 99,9%, а сервер выдаётся за 45–60 секунд.