Реализация 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. Полный контроль, без monthly fee. Интеграция через API. Подходит, если нужен кастомный домейн и бренд.
Instatus — современная альтернатива. Более быстрый UI, competitive pricing.
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 при срабатывании алерта
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 день







