Реалізація Status Page (публічна сторінка статусу) для сервісу
Status Page — це публічна сторінка, де користувачі бачать поточний стан сервісу та історію інцидентів. Без неї при сбою підтримку заваляють тікетами «у мене не працює», Twitter — гнівними постами, а команда витрачає час на комунікацію замість відновлення.
Що повинна містити Status Page
Поточний статус компонентів. Кожен ключовий компонент відображається окремо:
- Основний додаток / сайт
- API
- Авторизація
- Платіжна система
- CDN / файлове сховище
- Email-розсилки
Статусами: Operational, Degraded Performance, Partial Outage, Major Outage, Under Maintenance.
Історія доступності. Графік uptime за останні 90 днів — класичні «зелені квадратики» по днях.
Активні інциденти. Якщо щось зламане — інцидент з хронологією оновлень.
Плановані технічні роботи. Попереднє сповіщення про maintenance window.
Підписка на оновлення. Email, Slack, webhook — користувач вибирає канал.
Варіанти реалізації
Statuspage.io (Atlassian) — лідер ринку. Інтеграція з PagerDuty, Datadog, Jira. Автоматичне оновлення статусу за метриками. Публічні та приватні сторінки. Від $79/місяць.
Cachet — open source, self-hosted. PHP + MySQL/PostgreSQL. Повний контроль, без щомісячної плати. Інтеграція через API. Підходить, якщо потрібен кастомний домен та брендинг.
Instatus — сучасна альтернатива. Швидший UI, конкурентна ціна.
Self-built на статичному сайті — мініималістичний варіант: GitHub Pages + YAML-файл зі статусами + GitHub Actions оновлює сторінку. Підходить для невеликих проектів.
Автоматичне оновлення статусів
Status Page без автоматизації — це сторінка, яку забувають оновити під час інцидента (коли оновлення найважливіше).
Інтеграція Datadog → Statuspage.io:
import requests
def update_status_page(component_id: str, status: str):
# status: operational | degraded_performance | partial_outage | major_outage
requests.patch(
f"https://api.statuspage.io/v1/pages/{PAGE_ID}/components/{component_id}",
headers={"Authorization": f"OAuth {API_KEY}"},
json={"component": {"status": status}}
)
# Викликається з Datadog webhook при срабатуванні alert
def on_alert_triggered(alert_data):
component = map_alert_to_component(alert_data["alert_title"])
update_status_page(component["id"], "major_outage")
Prometheus Alertmanager → webhook → скрипт оновлення → Status Page API.
Правило: оновлення статусу повинно відбуватися автоматично протягом 2-3 хвилин після виявлення проблеми, а не через 20 хвилин коли хтось пригадає.
Робота з інцидентами на Status Page
Структура інцидента:
- Investigating — проблема зафіксована, йде розслідування
- Identified — причина знайдена, працюємо над усуненням
- Monitoring — виправлення застосовано, спостерігаємо за стабілізацією
- Resolved — інцидент закритий
Оновлення кожні 20-30 хвилин під час активного інцидента. Користувачі знають, що про них пам'ятають.
Технічні деталі self-hosted Cachet
# docker-compose.yml
services:
cachet:
image: cachethq/docker:latest
environment:
APP_ENV: production
APP_KEY: ${APP_KEY}
DB_DRIVER: pgsql
DB_HOST: db
DB_DATABASE: cachet
ports:
- "80:8000"
db:
image: postgres:15
environment:
POSTGRES_DB: cachet
POSTGRES_PASSWORD: ${DB_PASSWORD}
Nginx reverse proxy з SSL (Let's Encrypt). Кастомний домен типу status.yourdomain.com.
Терміни реалізації
- Statuspage.io / Instatus (managed) — 1-2 дні налаштування
- Cachet self-hosted — 2-3 дні
- Автоматичне оновлення з мониторингу — 1-2 дні
- Інтеграція з інцидент-менеджментом — 1 день







