Моніторинг роботоспроможності сайту (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 години.







