Блог
DevOps · практикаDevOps 7 мин чтения

Мониторинг VPS без Grafana: uptime + alerts за 15 минут

Не всегда нужен Prometheus. Разбираем минимальный набор: Healthchecks.io для cron, Better Stack/UptimeRobot для uptime, скрипт для «свои метрики». Всё бесплатно или почти.

Prometheus + Grafana + AlertManager — красиво, но избыточно, если у вас 1-2 VPS. Есть проще, работает за 15 минут: минимальный uptime-мониторинг и alerts, покрывающий 90% инцидентов.

Разберём стек, который стоит нам €0-10/мес и решает большинство задач до перехода на «настоящий» observability.

Что мы хотим мониторить

Минимальный набор:

  • Uptime сайта — снаружи, «доступен ли ответ HTTP 200».
  • Uptime SSH — важно для admin-доступа.
  • Cron/backup — «ежедневный скрипт отработал».
  • Диск — «не забился ли».
  • RAM/CPU — «не тонем ли».
  • SSL — «сертификат не истёк».

Uptime — Better Stack или UptimeRobot

Проверка сайта с нескольких точек мира каждые 30-60 секунд. Alert при недоступности.

Better Stack (formerly Better Uptime): 10 мониторов free, красивый UI, incident timeline. Free до 3-минутного интервала.

UptimeRobot: 50 мониторов free, 5-минутный интервал. Проще, некрасивее.

StatusCake: 10 мониторов free, приличный UI.

Совет

Для основного сайта — Better Stack (короткий интервал). Для второстепенных — UptimeRobot (много мониторов бесплатно). Комбинация покрывает всё.

Cron-мониторинг — Healthchecks.io

Классическая проблема: cron упал → тишина. Через месяц заметили, что backup-ов нет.

Healthchecks.io: каждый ваш скрипт пингует URL при успехе. Если пинг не пришёл вовремя — alert. Работает для cron, systemd timers, backup-джобов.

# В backup-скрипте в конце:
curl -fsS -m 10 --retry 5 -o /dev/null https://hc-ping.com/YOUR-UUID

# Или обёртка:
curl -fsS -m 10 --retry 5 https://hc-ping.com/YOUR-UUID/start
./backup.sh
RC=$?
if [ $RC -eq 0 ]; then
  curl -fsS -m 10 --retry 5 https://hc-ping.com/YOUR-UUID
else
  curl -fsS -m 10 --retry 5 https://hc-ping.com/YOUR-UUID/fail
fi
На заметку

Free-план: 20 checks. Достаточно для среднего проекта. Alert в email, Telegram, Slack, PagerDuty.

Ресурсы — простой скрипт + Healthchecks

Не нужен Prometheus для «диск не забит и RAM свободна». Скрипт-проверялка + Healthchecks + cron:

#!/bin/bash
# /usr/local/bin/health-check.sh
set -e

# Disk usage < 90%
DISK=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$DISK" -gt 90 ]; then
  echo "DISK FULL: $DISK%"
  exit 1
fi

# Available RAM > 200 MB
RAM=$(free -m | awk 'NR==2 {print $7}')
if [ "$RAM" -lt 200 ]; then
  echo "LOW RAM: $RAM MB"
  exit 1
fi

# Load average per CPU < 3
LOAD=$(awk '{print $1}' /proc/loadavg)
CPUS=$(nproc)
RATIO=$(echo "$LOAD / $CPUS" | bc -l)
if (( $(echo "$RATIO > 3" | bc -l) )); then
  echo "HIGH LOAD: $LOAD (per CPU: $RATIO)"
  exit 1
fi

exit 0

# В cron:
# */5 * * * * root /usr/local/bin/health-check.sh && curl -sm 5 https://hc-ping.com/UUID

SSL — expiring soon

Даже с Let's Encrypt auto-renew иногда обновление ломается (лимиты, изменения DNS). Alert за 7 дней до истечения:

#!/bin/bash
# /usr/local/bin/ssl-check.sh
DOMAIN=$1
DAYS=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null \
  | openssl x509 -noout -enddate \
  | sed 's/notAfter=//' | xargs -I{} date -d {} +%s)
NOW=$(date +%s)
LEFT=$(( (DAYS - NOW) / 86400 ))
echo "$DOMAIN: $LEFT days left"
[ $LEFT -gt 7 ] || exit 1

# Cron: 0 8 * * * /usr/local/bin/ssl-check.sh example.com && curl -sm 5 https://hc-ping.com/SSL-UUID

Куда шлют alert

Все три сервиса (Better Stack, UptimeRobot, Healthchecks) поддерживают:

  • Email — базово, работает всегда.
  • Telegram — самый удобный для сольного разработчика.
  • Slack/Discord — если команда.
  • PagerDuty/Opsgenie — если 24/7 on-call.
  • SMS — Better Stack Pro-план.

Когда переходить на Prometheus

Простая проверялка перестаёт хватать, если:

  • У вас >10 сервисов и хочется общий dashboard.
  • Нужны исторические графики (latency за неделю, RAM за месяц).
  • Нужен alerting на trend-ы, а не на пороги («latency растёт последние 3 часа»).
  • SLA-отчётность, post-mortem с реальными данными.
На заметку

Тогда — Prometheus + Grafana + Alertmanager или облачные аналоги (Grafana Cloud free, Datadog).

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

Все эти сервисы бесплатны?
Better Stack — 10 мониторов free. UptimeRobot — 50 free. Healthchecks — 20 free. Для большинства проектов free-планы покрывают.
Alert через 5 минут — не поздно?
Для большинства бизнесов — приемлемо. Для критичных сервисов возьмите платный план (1-мин интервал).
Что если alert-сервис сам ляжет?
Better Stack и Healthchecks — geo-distributed. Полный отказ бывает раз в несколько лет. Для критичного — параллельно два сервиса.
Как проверить, что alerts реально работают?
Раз в квартал остановите сервис (staging), убедитесь что alert пришёл. Классический факап: алёрты давно не работают, никто не знает.