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
fiFree-план: 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/UUIDSSL — 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).