← Все статьи
Полезные статьи

Мониторинг VPS: нагрузка и доступность

Как настроить мониторинг сервера: базовые команды, графики нагрузки, проверка доступности сайта и уведомления в Telegram, когда что-то упало.

Про упавший сайт чаще всего узнают от клиента. Между падением и звонком проходит несколько часов, а если это случилось ночью — то и до утра.

Мониторинг решает две разные задачи, и путать их не стоит:

  • доступность — работает ли сайт прямо сейчас, и если нет, кто об этом узнает
  • нагрузка — сколько ресурсов тратится и когда кончится запас

Первое настраивается за десять минут и нужно всем. Второе — инструмент для диагностики и планирования.

Часть 1. Быстрая проверка руками

Когда нужно посмотреть состояние сервера прямо сейчас, хватает пяти команд.

Общая нагрузка:

uptime
 14:32:05 up 23 days,  4:11,  1 user,  load average: 0.42, 0.51, 0.48

Три числа в конце — средняя нагрузка за 1, 5 и 15 минут. Сравнивать их нужно с количеством ядер: на одноядерном сервере 1.0 означает полную загрузку, на четырёхъядерном — четверть. Узнать число ядер:

nproc

Тревожно, когда пятнадцатиминутное значение стабильно выше числа ядер: нагрузка не пиковая, а постоянная.

Память:

free -h

Смотрите на строку Mem в колонке available — это реально доступная память с учётом кэша. Колонка free почти всегда маленькая, и пугаться её не нужно: Linux намеренно занимает свободную память под кэш.

А вот ненулевой used в строке Swap — сигнал. Значит, память кончилась и система вытесняет данные на диск, отчего всё замедляется в разы.

Диск:

df -h

Заполнение выше 90% — повод разбираться сегодня. При 100% сервер перестаёт работать: базы не пишут, логи не пишутся, сайт отдаёт ошибки.

Найти, что занимает место:

du -sh /var/* | sort -h | tail -10

Чаще всего виноваты логи в /var/log, старые бэкапы или образы Docker.

Что грузит процессор прямо сейчас:

apt install htop -y
htop

Интерактивная таблица процессов: сортировка по CPU и памяти, видно, кто именно нагружает сервер. Выход — q.

Кто занимает порты:

ss -tulpn

Полезно, чтобы найти забытую службу, которая висит и ест ресурсы.

Часть 2. Уведомления о падении

Это тот самый минимум, который стоит настроить всем и сразу. Даже если графиков нет — вы должны узнавать о падении раньше клиента.

Uptime Kuma

Самый простой вариант: ставится контейнером, интерфейс понятен без чтения документации, умеет слать уведомления в Telegram, почту и десяток других каналов.

mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
nano docker-compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    volumes:
      - kuma_data:/app/data
    networks:
      - web

volumes:
  kuma_data:

networks:
  web:
    external: true
docker compose up -d

Установка Docker и общего reverse proxy с автоматическим SSL описана здесь: Docker на VPS. Добавьте домен в Caddyfile:

status.example.com {
    reverse_proxy uptime-kuma:3001
}

В интерфейсе создаёте проверку: тип HTTP(s), адрес сайта, интервал 60 секунд. Дальше подключаете уведомления — для Telegram нужен токен бота от @BotFather и ваш chat id.

Что стоит проверять помимо главной страницы:

  • страницу, которая обращается к базе — тогда проверка поймает и «сайт открывается, но база лежит»
  • срок действия SSL-сертификата — Kuma предупредит заранее
  • отдельные API-эндпоинты, если они есть

Важно: мониторинг должен стоять не на том сервере, который он проверяет. Иначе при падении сервера упадёт и мониторинг, и уведомления не придут. Поставьте Kuma на отдельный VPS за 5 € или используйте внешний сервис — этого достаточно.

Вариант без своего сервера

Если не хочется поднимать ещё одну машину, берите внешний сервис проверки доступности — у большинства есть бесплатный тариф на несколько адресов. Работает это по тому же принципу и требует только адреса сайта.

Часть 3. Графики нагрузки

Графики отвечают на вопросы, которые не видны в моменте: когда начались проблемы, растёт ли потребление памяти день ото дня, справится ли сервер в следующем сезоне.

Netdata

Ставится одной командой и сразу показывает сотни метрик в реальном времени с секундной детализацией.

wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry

Интерфейс поднимается на порту 19999.

Не открывайте этот порт в firewall. Netdata по умолчанию не требует авторизации, и открытая наружу панель раскрывает всё о вашем сервере. Правильный способ — SSH-туннель: ssh -L 19999:localhost:19999 deploy@ВАШ_IP После этого панель доступна на http://localhost:19999 только у вас.

Netdata заметно экономнее, чем кажется, но на тарифе «Старт» с 2 ГБ памяти имеет смысл уменьшить срок хранения истории — по умолчанию он держит данные в памяти.

Что смотреть на графиках

Память, растущая монотонно — утечка в приложении. Ищите процесс, который увеличивается день ото дня и сбрасывается только при перезапуске.

Пики нагрузки в одно и то же время — почти всегда cron: бэкап, выгрузка, индексация. Если пик совпадает с рабочим временем, задачу стоит перенести на ночь.

Рост iowait — сервер ждёт диск. Частая причина на нагруженных базах.

Ровный высокий CPU круглосуточно — либо пора оптимизировать, либо пора расти: Выделенный сервер или VPS.

Часть 4. Мониторинг без установки

Иногда не нужны ни графики, ни панели — достаточно скрипта, который напишет в Telegram при проблеме.

nano /opt/check.sh
#!/bin/bash
BOT_TOKEN="$TG_TOKEN"
CHAT_ID="$TG_CHAT"

alert() {
  curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
    -d chat_id="$CHAT_ID" -d text="$1" > /dev/null
}

DISK=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
[ "$DISK" -gt 90 ] && alert "⚠️ Диск заполнен на ${DISK}%"

MEM=$(free | awk '/Mem:/ {printf "%.0f", $3/$2*100}')
[ "$MEM" -gt 90 ] && alert "⚠️ Память занята на ${MEM}%"

systemctl is-active --quiet nginx || alert "🔴 nginx не работает"
systemctl is-active --quiet mysql || alert "🔴 mysql не работает"
chmod +x /opt/check.sh
crontab -e
*/10 * * * * . /opt/tg.env && /opt/check.sh

Токен бота держите в отдельном файле /opt/tg.env с правами 600, а не в скрипте. Как получить токен и поднять бота: Telegram-бот 24/7 на сервере.

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

Что мониторить в первую очередь

Метрика Порог тревоги Чем грозит
Свободное место на диске меньше 10% сервер перестаёт работать целиком
Память / своп своп растёт всё замедляется в разы
Load average (15 мин) выше числа ядер запросы встают в очередь
Доступность сайта нет ответа 2 раза подряд потеря клиентов
Срок SSL-сертификата меньше 14 дней браузер пугает посетителей
Бэкап не выполнился пропуск одного дня нечем восстанавливаться

Последняя строка — та, про которую забывают. Мониторить нужно не только сервер, но и то, что копии действительно создаются: Бэкапы VPS.

Частые вопросы

Сколько ресурсов ест мониторинг? Uptime Kuma — около 150 МБ памяти. Netdata — от 100 МБ при уменьшенной истории. Скрипт на bash — ничего заметного.

Можно ли поставить мониторинг на тот же сервер? Графики — да. Проверку доступности — нет: она должна работать снаружи, иначе не сработает именно тогда, когда нужна.

Что такое load average и какое значение нормально? Это среднее число процессов, ожидающих выполнения. Норма — ниже количества ядер. Значение 4.0 на четырёх ядрах — полная загрузка без очереди, 8.0 — очередь вдвое длиннее, чем сервер успевает обрабатывать.

Почему память почти вся занята, хотя сайт не нагружен? Linux использует свободную память под кэш файлов и отдаёт её приложениям по требованию. Смотреть нужно на available, а не на free.

Нужен ли отдельный сервер под мониторинг? Для проверки доступности — да, и хватит самого дешёвого тарифа. Одной машины за 5 € достаточно, чтобы следить за десятком сайтов.

Как понять, что пора расширять тариф? Три признака: память регулярно уходит в своп, load average стабильно выше числа ядер, диск заполнен больше чем на 80%. Один признак — оптимизация, два и больше — расширение.

Итог

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

Графики добавляются позже — когда появляется вопрос «почему вчера вечером тормозило». Без истории на него не ответить, а с ней причина обычно находится за пару минут.

Взять сервер под мониторинг за 5 € →

Команда Puws.Cloud
Puws.Cloud
Начать

СЕРВЕР ДЛЯ ВАШЕГО ПРОЕКТА

Начните
с тарифа.

ПОЛЕЗНОЕ О СЕРВЕРАХИнструкции
и советы.
Открыть блог
Наш Аптайм