Мониторинг работоспособности сайта (Uptime Monitoring)
Uptime Monitoring — базовый слой наблюдаемости: проверка доступности URL через HTTP-запросы с заданным интервалом. Обнаруживает факт недоступности, но не причину. Должен дополняться мониторингом инфраструктуры и логированием ошибок.
Инструменты
SaaS (без инфраструктуры):
- UptimeRobot — бесплатно до 50 мониторов, интервал 5 мин. Платно — 1 мин.
- Better Uptime — агрегирует множество локаций, статус-страница, on-call scheduling
- Pingdom — Enterprise-уровень, RUM, API-мониторинг
- StatusCake — хорошее соотношение цена/качество
Self-hosted:
- Uptime Kuma — Docker, веб-интерфейс, поддержка многих типов проверок
- Gatus — конфигурация через YAML, Kubernetes-friendly
- Blackbox Exporter + Prometheus + Grafana — для тех, у кого уже есть Prometheus
Uptime Kuma через Docker
# docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./uptime-kuma-data:/app/data
Gatus: декларативный мониторинг
# gatus/config.yaml
endpoints:
- name: Main Site
url: https://mysite.com
interval: 1m
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 2000"
- "[CERTIFICATE_EXPIRATION] > 168h" # > 7 дней до истечения
- name: API Health
url: https://api.mysite.com/health
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 500"
- name: Checkout Flow
url: https://mysite.com/cart
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY] pat *Add to cart*"
alerting:
telegram:
token: $TELEGRAM_BOT_TOKEN
id: $TELEGRAM_CHAT_ID
default-alert:
enabled: true
failure-threshold: 2
success-threshold: 1
Многорегиональный мониторинг
Проверяйте с нескольких локаций: иначе можете пропустить региональный сбой. Better Uptime и Pingdom включают это в базовый план.
Для self-hosted — несколько экземпляров Gatus в разных регионах + центральный агрегатор.
Алертинг в Telegram
# Простой webhook-обработчик для алертов
import requests
import os
def send_alert(message: str, is_recovery: bool = False):
emoji = "✅" if is_recovery else "🚨"
requests.post(
f"https://api.telegram.org/bot{os.environ['BOT_TOKEN']}/sendMessage",
json={
"chat_id": os.environ['CHAT_ID'],
"text": f"{emoji} {message}",
"parse_mode": "HTML",
}
)
Что мониторить
| URL | Тип проверки | Интервал |
|---|---|---|
| Главная страница | HTTP 200 + content check | 1 мин |
| API /health | HTTP 200 + JSON | 30 сек |
| Форма заказа / checkout | HTTP 200 | 5 мин |
| Страница входа | HTTP 200 | 5 мин |
| Sitemap | HTTP 200 | 15 мин |
| SSL-сертификат | Expiry > 14 дней | 1 час |
Настройка Uptime Kuma или Gatus для сайта (10–20 endpoint-ов) — 2–4 часа.







