Руководства

Мониторинг серверов: от бесплатных проверок до Prometheus и Grafana

Мониторинг серверов: от бесплатных проверок до Prometheus и Grafana

Мониторинг нужен, чтобы о проблеме с сервером вы узнавали раньше клиентов: в три часа ночи от уведомления в Telegram, а не в девять утра от возмущённого письма. Для одного сайта хватит бесплатной проверки раз в минуту, для парка серверов понадобятся метрики, графики и правила оповещений. Ниже — что именно мониторить, какие инструменты выбрать под свою задачу (от бесплатных проверок до Prometheus, Grafana и Zabbix), как их поставить и как не утонуть в ложных тревогах.

Что мониторить: четыре уровня

УровеньЧто проверяемЧто ловит
Доступность снаружиОткрывается ли сайт, отвечает ли порт, не истекает ли SSL-сертификат и доменПадение сервера, проблемы сети и DNS, истёкший сертификат
Ресурсы сервераПроцессор, память, диск, сетьЗаканчивается место, утечка памяти, перегрузка — до того, как сайт упадёт
СервисыNginx, PHP-FPM, база, очереди, бэкапыУпавшую службу при живом сервере, остановившийся бэкап
ПриложениеВремя ответа, доля ошибок 5xx, бизнес-метрикиМедленные страницы, сломанное оформление заказа

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

Главное правило: мониторинг живёт не на том же сервере

Если проверка доступности запущена на сервере, который она проверяет, то при падении сервера упадёт и она — и никого не предупредит. Внешний мониторинг должен работать из другого места: со стороннего сервиса или с отдельного недорогого VPS, лучше в другой стране и у другого дата-центра. Тогда он заметит и падение сервера, и проблему с сетью площадки.

Уровень 1. Проверка доступности

Готовые сервисы

Самый быстрый старт — внешний сервис проверок: указываете адрес сайта, он раз в несколько минут его открывает и пишет вам при сбое. У многих сервисов есть бесплатные тарифы, но условия (число проверок, интервал, разрешено ли коммерческое использование) периодически меняются — смотрите актуальные на сайте сервиса.

У нашего провайдера тоже есть мониторинг доступности: бесплатный тариф — до 10 проверок раз в 15 минут, платный — до 50 проверок каждую минуту за $5 в месяц (на момент публикации). Его особенность: уведомление о сбое уходит в техподдержку провайдера, чтобы она могла вмешаться. Если хотите получать оповещения сами — в Telegram или на почту, — добавьте к нему собственную проверку из следующего раздела.

Свой мониторинг: Uptime Kuma

Uptime Kuma — бесплатная программа с открытым кодом и удобным веб-интерфейсом. Она проверяет сайты по HTTP(S), порты, ping, DNS и срок SSL-сертификата и шлёт уведомления в Telegram, на почту и в десятки других каналов. Версия 2.0 вышла в октябре 2025 года.

Ставится на отдельный VPS одной командой (нужен Docker — как его установить, в статье «Docker на VPS»):

docker run -d --name uptime-kuma --restart=unless-stopped \
  -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data \
  louislam/uptime-kuma:2

Порт привязан к 127.0.0.1, чтобы панель не торчала в интернет без шифрования. Откройте её через Nginx с HTTPS (сертификат — по инструкции «SSL на VPS»):

server {
    listen 443 ssl;
    server_name status.example.com;
    # ssl_certificate ... — добавит certbot

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

Заголовки Upgrade и Connection нужны: интерфейс работает через WebSocket и без них не обновляется. При первом входе Kuma попросит создать администратора.

Что добавить в первую очередь:

  • HTTP(S) главной страницы с интервалом 60 секунд и проверкой ключевого слова — тогда «сайт отдаёт 200, но вместо страницы ошибка базы» тоже будет пойман.
  • Тяжёлую страницу (каталог, поиск) с порогом времени ответа.
  • Срок SSL-сертификата — с 2025 года Let's Encrypt не присылает писем об истечении, так что это единственный способ узнать заранее.
  • Порт SSH или базы на других ваших серверах, если они не отдают веб-страниц.

Уведомления настраиваются в разделе Settings → Notifications: для Telegram нужен токен бота от @BotFather и ID чата.

Уровень 2. Метрики сервера

Проверка доступности скажет, что сайт упал. Метрики скажут, почему — и часто предупредят заранее: диск заполнен на 90%, память растёт третий день подряд.

Простые варианты: Netdata и Beszel

Если нужны графики «здесь и сейчас» без сложной настройки, есть лёгкие инструменты. Netdata ставится одним скриптом и сразу показывает сотни метрик с секундной детализацией. Beszel — минималистичный: центральная панель и маленький агент на каждом сервере, графики CPU, памяти, диска, сети и Docker-контейнеров, оповещения при превышении порогов. Для пары-тройки серверов этого часто достаточно.

Стандарт индустрии: Prometheus + Grafana

Связка, на которой работает мониторинг в большинстве компаний:

  • node_exporter — маленький агент на каждом сервере, отдаёт метрики системы на порту 9100;
  • Prometheus — раз в 15–30 секунд собирает метрики со всех агентов и хранит их;
  • Alertmanager — рассылает оповещения по правилам (в том числе в Telegram);
  • Grafana — графики и дашборды.

На каждом наблюдаемом сервере ставится агент. В Debian и Ubuntu он есть в репозитории:

apt install prometheus-node-exporter
ufw allow from 203.0.113.5 to any port 9100 proto tcp

Вторая строка открывает порт метрик только для IP сервера мониторинга (подставьте свой). Метрики раскрывают многое о системе, держать их открытыми для всех не стоит.

На сервере мониторинга Prometheus читает список целей из prometheus.yml:

scrape_configs:
  - job_name: node
    scrape_interval: 30s
    static_configs:
      - targets: ['198.51.100.10:9100', '198.51.100.11:9100']

rule_files:
  - alerts.yml

И правила оповещений в alerts.yml — три, с которых стоит начать:

groups:
  - name: basic
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 2m
      - alert: DiskAlmostFull
        expr: node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
              / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"} < 0.15
        for: 10m
      - alert: MemoryHigh
        expr: 1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes > 0.9
        for: 10m

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

В Grafana добавьте Prometheus как источник данных и импортируйте готовый дашборд для node_exporter (самый популярный — «Node Exporter Full», ID 1860): за пять минут получите графики по всем серверам без ручной настройки.

Весь стек удобно поднимать через Docker Compose. Сколько он ест: Prometheus и Grafana вместе — обычно 300–700 МБ памяти для нескольких серверов, плюс диск под историю метрик (по умолчанию Prometheus хранит 15 дней).

Для компаний и больших парков: Zabbix

Zabbix — зрелая система «всё в одном»: агенты, шаблоны для сотен типов оборудования и сервисов, оповещения, карты сети, права доступа для команды. Его выбирают, когда серверов десятки, есть сетевое оборудование и нужна единая система с разграничением доступа. Текущая версия с долгосрочной поддержкой — 7.0 LTS (поддержка до 2027–2029 года), 8.0 LTS запланирована на конец 2026 года.

Цена за универсальность — сложность и ресурсы: серверу Zabbix нужна своя база данных, и разворачивать его ради двух VPS избыточно.

Что выбрать

ИнструментЧто делаетРесурсыКому подходит
Внешний сервис проверокДоступностьНичего не ставитьОдин-два сайта, быстрый старт
Uptime KumaДоступность, SSL, порты, уведомленияМинимальные, хватит младшего VPSНесколько сайтов, нужен контроль и Telegram
Netdata, BeszelМетрики и графики, простые алертыНебольшие2–10 серверов, без сложной настройки
Prometheus + GrafanaМетрики, гибкие алерты, дашборды300–700 МБ RAMРазработчики, DevOps, растущие проекты
ZabbixВсё в одном, шаблоны, командная работаНужна своя БД, от 2 ГБ RAMКомпании, десятки серверов и оборудование

Типичный путь: начать с Uptime Kuma, а когда серверов станет больше трёх-четырёх и захочется понимать причины, добавить Prometheus и Grafana на тот же сервер мониторинга.

Как не утонуть в оповещениях

Мониторинг, который присылает двадцать тревог в день, через неделю перестают читать — и пропускают ту единственную настоящую. Несколько правил:

  • Оповещайте о том, что требует действия. «Процессор 95% пять секунд» — не повод будить человека. «Диск заполнится через сутки» — повод.
  • Задавайте задержку. Сайт недоступен 2–3 проверки подряд, а не одну: единичный сбой сети не должен быть тревогой.
  • Разделяйте срочность. Падение сайта — в Telegram со звуком. Растущая память — в отдельный канал, который вы просматриваете днём.
  • Проверяйте сам мониторинг. Раз в месяц остановите тестовую службу и убедитесь, что оповещение пришло. Сломанный мониторинг хуже, чем никакого: он создаёт ложное чувство безопасности.
  • Следите за бэкапами. Проверка «последней копии больше суток» ловит тихо остановившийся бэкап — одну из самых дорогих поломок. Как устроить хранение копий — в статье «Сервер для бэкапа».

Сервер под мониторинг

Для Uptime Kuma или Beszel хватит самого младшего тарифа. Для Prometheus и Grafana с историей метрик лучше взять с запасом памяти. Главное — разместить сервер мониторинга в другой стране, чем основной: если основной сайт в Финляндии, мониторинг в Нидерландах заметит и падение сервера, и проблемы с сетью финской площадки.

Lite в Нидерландах под Uptime Kuma — $6/мес   Start в Финляндии под Prometheus + Grafana — $10/мес

Цены указаны на момент публикации, оплата у провайдера. Lite — 1 vCPU и 1 ГБ памяти, Start — 2 vCPU и 2 ГБ, оба на NVMe. Тот же сервер можно использовать и как резервную площадку для бэкапов.

Минимальный набор для одного сайта

  1. Внешняя проверка главной страницы раз в минуту с уведомлением в Telegram.
  2. Проверка срока SSL-сертификата и домена.
  3. Оповещение о заполнении диска выше 85%.
  4. Проверка, что бэкап свежий.
  5. Раз в месяц — тестовая тревога, чтобы убедиться, что всё работает.

Когда оповещение всё-таки пришло, действуйте по порядку из статьи «Что делать, если сайт упал». А если тревоги связаны с ростом нагрузки — загляните в «Пики нагрузки» и «Как ускорить сайт на VPS».

Коротко

  • Мониторинг доступности должен работать с другого сервера, лучше в другой стране.
  • Для одного-двух сайтов достаточно внешних проверок или Uptime Kuma с уведомлениями в Telegram.
  • Чтобы понимать причины сбоев, добавьте метрики: Netdata или Beszel для простоты, Prometheus и Grafana как стандарт.
  • Zabbix оправдан для компаний и десятков серверов.
  • Оповещайте только о том, что требует действия, с задержкой, и регулярно проверяйте сам мониторинг.