Обзор продукта

Что такое DBWatch PRO и для кого он создан

DBWatch PRO — self-hosted система мониторинга PostgreSQL для команд любого размера. Health Score, анализ запросов, метрики в реальном времени, планирование ресурсов — всё в одном инструменте.

Продукт разработан для DBA, DevOps-инженеров и SRE, которым нужен полный контроль над PostgreSQL-базами данных без зависимости от облачных SaaS-решений. Один Docker-контейнер — и вы получаете профессиональный мониторинг за минуты.

🎯

Health Score

Интегральная оценка 0–100 для каждого сервера по 7 факторам: CPU, RAM, Disk, Connections, Cache hit ratio, Deadlocks, Slow queries.

📊

Реал-тайм метрики

CPU, RAM, диск, подключения, cache hit ratio с WebSocket live-обновлениями каждые 2 секунды.

🔍

Анализ запросов

Топ медленных запросов из pg_stat_statements, EXPLAIN-планы, Index Advisor с рекомендациями.

📈

Capacity Planning

Прогноз загрузки CPU, RAM, диска и соединений с оценкой «дней до заполнения».

🖥️

Multi-Server

Управление несколькими PostgreSQL-серверами из одного интерфейса с мониторингом каждого.

🔔

Алерты

Настраиваемые пороги с уведомлениями через Email, Telegram, Slack и Webhook.

Архитектура

DBWatch PRO — all-in-one Docker-образ со встроенным Nginx, FastAPI backend и агентом сбора метрик. Все данные хранятся локально.

Архитектура
Браузер → :8080 → Nginx
                    ├── /assets/  → статика (React SPA)
                    ├── /api/     → FastAPI backend
                    ├── /ws/      → WebSocket (live метрики)
                    └── /         → SPA routing

Внутри контейнера:
  Supervisor
    ├── nginx (reverse proxy + static)
    ├── backend (FastAPI, порт 8000)
    └── agent (сборщик метрик, каждые 60 сек)

Данные:
  ├── SQLite (metrics.db) — метрики, алерты, инстансы
  └── PostgreSQL — pg_stat_statements, query_stats_history

Стек технологий

КомпонентТехнологии
BackendPython 3.11, FastAPI 0.115, SQLAlchemy 2.0, psycopg 3.2, psutil, PyJWT
FrontendReact 19, Vite 7, Tailwind CSS 3, Recharts 3, SWR 2, Lucide React
ИнфраструктураDocker, Nginx, Supervisor, PostgreSQL 16
CI/CDGitHub Actions → ghcr.io

Системные требования

Минимальные требования для развёртывания DBWatch PRO

ТребованиеМинимумРекомендуется
Docker Engine20.10+24.0+
Docker Composev2v2.20+
RAM512 MB1 GB+
CPU1 vCPU2 vCPU
Дисковое пространство500 MB2 GB+ (для истории метрик)
PostgreSQL14+16
Примечание

Для анализа запросов необходимо расширение pg_stat_statements на мониторируемом PostgreSQL-сервере. Без него остальной мониторинг работает в полном объёме.

Поддерживаемые ОС

DBWatch PRO работает на любой системе с Docker: Linux (Ubuntu, Debian, CentOS, RHEL), macOS, Windows (через WSL2/Docker Desktop). Рекомендуется Linux в production.

Сетевые требования

  • Порт 8080 — веб-интерфейс DBWatch PRO (единственный внешний порт)
  • Доступ к PostgreSQL-серверу по сети (порт 5432 по умолчанию)
  • Для Telegram-уведомлений — доступ к api.telegram.org

Быстрая установка

Установка DBWatch PRO за 2 минуты

Автоустановка (рекомендуется)

Самый быстрый способ — использовать скрипт автоустановки. Он проверит зависимости, запросит параметры подключения к PostgreSQL, лицензионный ключ и порт — и запустит всё автоматически.

bash
curl -sSL https://dbwatch.ru/install.sh | bash

Ручная установка через Docker Compose

Создайте файл docker-compose.yml:

yaml
# docker-compose.yml
services:
  dbwatch:
    image: ghcr.io/leg1onary/dbwatch-pro:latest
    ports:
      - "8080:8080"
    environment:
      PG_DSN: "postgresql://user:password@host:5432/dbname"
      LICENSE_KEY: ""  # Пустой = Standard (бесплатный)
    volumes:
      - dbwatch-data:/app/data
    restart: unless-stopped

volumes:
  dbwatch-data:

Запустите контейнер:

bash
docker compose up -d
# Откройте http://localhost:8080
Совет

Замените PG_DSN на реальную строку подключения к вашему PostgreSQL-серверу. Пустой LICENSE_KEY активирует бесплатный тариф Standard (до 2 серверов).

Установка из исходников

Для разработки или кастомизации:

bash
git clone https://github.com/Leg1onary/dbwatch-pro.git
cd dbwatch-pro
cp backend/.env.example backend/.env
# Отредактируйте PG_DSN в backend/.env
docker compose up -d --build

Первая настройка

Что делать после установки

1. Откройте веб-интерфейс

Перейдите по адресу http://your-host:8080. Если вы установили на локальную машину — http://localhost:8080.

2. Проверьте подключение к PostgreSQL

На странице Overview вы увидите основные метрики базы данных. Если данные отображаются — подключение успешно. Если нет — проверьте PG_DSN в настройках.

3. Настройте API-ключ

Для production-окружения обязательно задайте переменную DBWATCH_API_KEY для защиты API от неавторизованного доступа.

yaml
environment:
  PG_DSN: "postgresql://user:password@host:5432/dbname"
  DBWATCH_API_KEY: "your-secure-api-key-here"

4. Настройте уведомления

Перейдите в Settings → Telegram или укажите переменные окружения для отправки алертов. Подробнее — в разделе Уведомления.

5. Проверьте pg_stat_statements

На странице Settings в блоке PG Extensions проверьте, что расширение pg_stat_statements установлено. Без него раздел «Запросы» будет недоступен.

6. Включите Premium (опционально)

Если у вас есть лицензионный ключ, добавьте его в переменную LICENSE_KEY и перезапустите контейнер. Это активирует Multi-Server, Health Score, EXPLAIN-планы и Index Advisor.

Обновление

Как обновить DBWatch PRO до последней версии

Docker-образ (production)

bash
docker compose pull
docker compose up -d

Из исходников

bash
git pull
docker compose up -d --build
Сохранность данных

Данные метрик хранятся в Docker volume (dbwatch-data) и не теряются при обновлении. Миграции SQLite применяются автоматически при запуске backend.

Дашборд (Overview)

Обзор состояния базы данных на одном экране

Страница Overview — главный дашборд DBWatch PRO. Здесь отображается общее состояние вашего PostgreSQL-сервера: ключевые метрики, Health Score, количество активных соединений и последние алерты.

Health Score

87 / 100

Интегральная оценка сервера

Health Score учитывает 7 факторов: CPU, RAM, Disk, Connections, Cache hit ratio, Deadlocks и Slow queries. Статусы: OK (≥80), Warning (60–79), Critical (<60).

Метрики на дашборде

  • CPU % — текущая загрузка процессора хоста
  • RAM % — использование оперативной памяти
  • Disk % — занятость диска
  • Active Connections — количество активных подключений / max_connections
  • Cache Hit Ratio — процент попаданий в кеш PostgreSQL
  • QPS — количество запросов в секунду (commits/sec)
  • Deadlocks — текущее число дедлоков

Данные обновляются в реальном времени через WebSocket (push каждые 2 секунды). При Premium активирована панель All Instances Health — карточки всех серверов с индивидуальным Health Score.

Интерфейс

  • Тёмная и светлая тема — дизайн-система «Obsidian Pulse»
  • Полная локализация — русский и английский (686 ключей)
  • Адаптивная вёрстка — desktop, tablet, mobile
  • Skeleton-загрузки — плавное отображение при загрузке данных

Анализ запросов

pg_stat_statements, медленные запросы, EXPLAIN и Index Advisor

Страница Queries предоставляет полный инструментарий для анализа SQL-запросов вашей базы данных. Данные берутся из расширения pg_stat_statements.

Топ медленных запросов

Таблица показывает медленные запросы с фильтрацией, сортировкой и поиском. Для каждого запроса доступны:

  • query — текст SQL-запроса
  • calls — количество вызовов
  • total_time / avg_time — суммарное и среднее время выполнения
  • rows — количество возвращённых строк
  • hit_ratio — процент попаданий в буфер
  • Severity badges — визуальные индикаторы критичности

Таблица виртуализирована для производительности при 200+ запросах. Через QueryModal можно просмотреть полный SQL с возможностью копирования.

EXPLAIN-планы

Premium

Функция доступна в тарифах Professional и Enterprise.

Кнопка EXPLAIN на странице Queries позволяет получить план выполнения запроса. Поддерживаются параметризованные запросы через PREPARE/EXPLAIN EXECUTE. Результат отображается в ExplainModal с monospace-форматированием.

Index Advisor

Premium

Функция доступна в тарифах Professional и Enterprise.

Index Advisor анализирует запросы и индексы, выдавая два типа рекомендаций:

  • Missing Index Candidates — запросы, которым не хватает индексов. Анализ pg_stat_statements + pg_index, парсинг FROM/WHERE для определения нужных колонок
  • Unused Index Detection — неиспользуемые индексы (idx_scan = 0, size > 8 MB)

Для каждой рекомендации указана severity (high/medium/low) и генерируется готовый SQL:

sql
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_orders_user_id
  ON public.orders (user_id);

Доступны 3 пресета агрессивности: Conservative, Balanced и Aggressive.

История запросов

DBWatch PRO сохраняет снапшоты из pg_stat_statements (топ-100 по total_exec_time), что позволяет отслеживать изменения производительности запросов во времени. Срок хранения настраивается через QUERY_HISTORY_TTL_DAYS (по умолчанию 90 дней).

Метрики

Реал-тайм мониторинг CPU, RAM, диска и подключений

Страница Metrics показывает детальные графики метрик сервера с возможностью выбора временного диапазона.

Системные метрики

  • CPU % — загрузка процессора (psutil)
  • RAM % — использование оперативной памяти
  • Disk Used % — занятость диска

PostgreSQL-метрики

  • Active Connections — активные подключения к БД
  • Max Connections — лимит подключений
  • Commits/sec (QPS) — количество коммитов в секунду
  • Rollbacks — количество откатов
  • Cache Hit Ratio — эффективность использования кеша
  • Deadlocks — дедлоки
  • Active Queries — активные запросы

Временные диапазоны

ТарифДоступные диапазоны
Standard15 минут, 1 час, 4 часа
Professional / Enterprise15 минут, 1 час, 4 часа, 24 часа, 7 дней, 30 дней

WebSocket live-обновления

Метрики в реальном времени передаются через WebSocket /ws/live с интервалом push каждые 2 секунды. Данные включают текущие PG-метрики и системные показатели.

Хранение истории

Метрики сохраняются в SQLite (metrics.db) с TTL 30 дней. Агент собирает данные каждые 60 секунд (настраивается через COLLECT_INTERVAL, диапазон 5–3600 сек).

Планирование ресурсов

Прогнозирование загрузки и оценка «дней до заполнения»

Страница Capacity предоставляет прогнозы по ключевым ресурсам на основе линейного тренда.

Отслеживаемые ресурсы

  • CPU — тренд %/день, headroom, прогноз дней до критического порога
  • RAM — аналогично CPU
  • Disk Space — использование по tablespace'ам, линейный прогноз заполнения
  • Connections — прогноз достижения лимита подключений

Disk Space Monitoring

Мониторинг дискового пространства включает:

  • Текущий процент использования диска
  • Размеры по tablespace'ам (pg_default, pg_global и пользовательские)
  • Топ таблиц по размеру
  • Размеры баз данных
  • Прогноз days_until_full — линейный тренд за 7 дней методом наименьших квадратов (минимум 3 точки)

Графики отображают пороговые линии (warning и critical), что позволяет визуально оценить приближение к лимитам.

Внимание

Если тренд нулевой или отрицательный (slope ≤ 0), прогноз days_until_full недоступен (null). Для расчёта необходимы минимум 3 точки данных за 7 дней.

Обслуживание

VACUUM, реплики, блокировки и dead tuples

VACUUM мониторинг

DBWatch PRO отслеживает статистику autovacuum:

  • Dead tuples — количество мёртвых строк по таблицам
  • Autovacuum статистика — время и частота запусков
  • Рекомендации — при накоплении dead tuples или пропуске autovacuum

Replication мониторинг

  • Статус реплик — streaming, catchup, потенциальные проблемы
  • Replication Lag — отставание реплик по WAL-позициям
  • WAL-позиции — текущие позиции мастера и реплик

Управление блокировками

  • Активные блокировки — текущие lock'и в системе
  • Ожидающие процессы — запросы, заблокированные другими

Multi-Server мониторинг

Управление несколькими PostgreSQL-серверами из одного интерфейса

Premium

Multi-Server доступен в тарифах Professional и Enterprise. В Standard — мониторинг только 1 сервера.

Возможности

  • CRUD инстансов — создание, редактирование, удаление и включение/выключение серверов
  • Тест подключения — проверка DSN перед добавлением сервера
  • Instance Selector — переключатель серверов, доступный на всех страницах
  • Per-instance данные — метрики, алерты, запросы, disk space фильтруются по instance_id
  • Health Score per instance — оценка здоровья для каждого сервера

Агент и сбор данных

Агент каждые 60 секунд обновляет список инстансов через GET /api/premium/instances и собирает метрики для каждого enabled-инстанса: PG-метрики, системные показатели, tablespace usage и снапшоты запросов. Все данные сохраняются с привязкой к instance_id.

Лимит серверов

Количество серверов ограничено лицензией (max_servers в JWT-токене). При попытке превысить лимит — HTTP 400.

Алерты

Настраиваемые уведомления о проблемах

Система алертов мониторит ключевые показатели и отправляет уведомления при превышении порогов.

Типы алертов

ТипSeverityУсловие по умолчанию
CPU CriticalCriticalCPU ≥ 90% на протяжении 3 итераций
CPU WarningWarningCPU ≥ 75%
RAM CriticalCriticalRAM ≥ 90%
RAM WarningWarningRAM ≥ 80%
Disk CriticalCriticalDisk ≥ 95%
Disk WarningWarningDisk ≥ 85%
Connections HighCritical / Warning≥ max_connections / ≥ 500
Hit Ratio CriticalCriticalHit Ratio < 95%
Hit Ratio WarningWarningHit Ratio < 98%
DeadlocksCriticalDeadlocks ≥ 1
Slow QueryWarningavg_time ≥ 2000 ms AND calls ≥ 10

Каналы уведомлений

  • Email (SMTP) — отправка алертов на email через настроенный SMTP-сервер
  • Telegram — уведомления в чат через бота (Standard и выше)
  • Slack — отправка в каналы Slack (Professional и выше)
  • Webhook — HTTP POST на произвольный URL (Professional и выше)

Дебаунс и дедупликация

  • CPU debounce — CPU critical алерт срабатывает только после N последовательных превышений (cpu_critical_streak, по умолчанию 3)
  • Дедупликация — алерт сохраняется в SQLite один раз, пока его ID присутствует в активных
  • Acknowledge — подтверждение алертов через UI или API
  • История — хранение истории алертов с настраиваемым TTL (по умолчанию 7 дней)

Экспорт данных

Выгрузка метрик и отчётов в CSV и Excel

DBWatch PRO позволяет экспортировать данные мониторинга для дальнейшего анализа или архивирования.

Форматы экспорта

  • CSV — универсальный формат для импорта в любые аналитические инструменты
  • Excel (.xlsx) — для работы в Microsoft Excel или Google Sheets

Что можно экспортировать

  • Историю метрик за выбранный период
  • Список медленных запросов с статистикой
  • Историю алертов
  • Рекомендации Index Advisor

PDF Отчёты

Генерация отчётов о состоянии базы данных

DBWatch PRO генерирует PDF-отчёты с полной информацией о состоянии базы данных — для передачи руководству, аудита или архивирования.

Содержание отчёта

  • Health Score и его составляющие
  • Графики ключевых метрик за выбранный период
  • Топ медленных запросов
  • Рекомендации Index Advisor
  • Активные алерты и их история
  • Информация о дисковом пространстве и прогнозы
Совет

PDF-отчёты удобны для регулярных ревью состояния инфраструктуры. Генерируйте их еженедельно или перед крупными релизами.

Docker Compose конфигурация

Полная конфигурация для production и разработки

Production (all-in-one образ)

yaml
services:
  dbwatch:
    image: ghcr.io/leg1onary/dbwatch-pro:latest
    ports:
      - "8080:8080"
    environment:
      PG_DSN: "postgresql://user:password@host:5432/dbname"
      LICENSE_KEY: ""
      DBWATCH_API_KEY: "your-secure-key"
      COLLECT_INTERVAL: "60"
    volumes:
      - dbwatch-data:/app/data
    restart: unless-stopped
    healthcheck:
      test: curl -f http://localhost:8080/health
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 15s

volumes:
  dbwatch-data:

Конфигурация для разработки

yaml
# docker-compose.yml (development)
services:
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    environment:
      PG_DSN: "postgresql://postgres:postgres@postgres:5432/postgres"
    volumes:
      - backend-data:/app/data
      - ./backend/.env:/app/backend/.env:ro
    healthcheck:
      test: curl -f http://localhost:8000/health
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 15s

  agent:
    build:
      context: ./backend
      dockerfile: Dockerfile.agent
    volumes:
      - backend-data:/app/data
      - ./backend/.env:/app/backend/.env:ro
    depends_on:
      backend:
        condition: service_healthy

  frontend:
    build: ./frontend
    ports:
      - "8080:8080"
    depends_on:
      backend:
        condition: service_healthy

  postgres:
    image: postgres:16
    ports:
      - "5433:5432"
    environment:
      POSTGRES_PASSWORD: postgres
    volumes:
      - pg-data:/var/lib/postgresql/data

  postgres_replica:
    image: postgres:16
    ports:
      - "5434:5432"
    environment:
      POSTGRES_PASSWORD: postgres
    volumes:
      - pg-replica-data:/var/lib/postgresql/data

volumes:
  backend-data:
  pg-data:
  pg-replica-data:

Порты

ПортСервисНазначение
8080frontend (nginx)Единственный внешний порт — UI + API proxy
5433postgresDev-доступ к тестовому PostgreSQL
5434postgres_replicaDev-доступ к реплике
Важно

Backend (порт 8000) не экспонируется на хост в production. Весь трафик проходит через Nginx.

Переменные окружения

Полный справочник переменных для настройки DBWatch PRO

Основные переменные

ПеременнаяПо умолчаниюОбязательнаяОписание
PG_DSNДаDSN основного PostgreSQL
DBWATCH_API_KEYпустоНет *X-API-Key для аутентификации. В production обязательно задать.
LICENSE_KEYпустоНетJWT RS256 лицензия Premium. Пустой = Standard.
DBWATCH_PORT8080НетПорт веб-интерфейса
COLLECT_INTERVAL60НетИнтервал сбора метрик (5–3600 сек)

Telegram и уведомления

ПеременнаяПо умолчаниюОписание
TELEGRAM_TOKENТокен Telegram-бота
TELEGRAM_CHAT_IDID чата для уведомлений

Хранение данных

ПеременнаяПо умолчаниюОписание
DATABASE_URLsqlite:///./metrics.dbSQLite DSN для метрик
DBWATCH_DATA_DIR/app/dataДиректория данных
USE_SEPARATE_STATS_DBfalseОтдельная PG-БД для query_stats
PG_DSN_STATS= PG_DSNDSN отдельной stats-БД
QUERY_HISTORY_TTL_DAYS90Срок хранения истории запросов (дни)

Прочие

ПеременнаяПо умолчаниюОписание
LICENSE_PUBLIC_KEY_PATH/app/backend/license_public.pemПуть к публичному RSA-ключу
BACKEND_URLhttp://backend:8000URL backend для агента

Настройка pg_stat_statements

Как включить расширение для анализа запросов

Расширение pg_stat_statements необходимо для работы раздела «Анализ запросов». Без него остальной мониторинг (метрики, алерты, capacity planning) работает в полном объёме.

Шаг 1: Добавьте в postgresql.conf

conf
shared_preload_libraries = 'pg_stat_statements'

Шаг 2: Перезапустите PostgreSQL

bash
sudo systemctl restart postgresql

Шаг 3: Создайте расширение

sql
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

Проверка

В DBWatch PRO перейдите в Settings → PG Extensions. Расширение pg_stat_statements должно показывать статус ✓.

Совет

Для Docker-контейнеров PostgreSQL расширение обычно уже включено. Достаточно выполнить CREATE EXTENSION.

Настройка уведомлений

Telegram, Email, Slack и Webhook

Telegram

Наиболее простой способ получать алерты. Доступен во всех тарифах.

Настройка через UI

  1. Создайте бота через @BotFather
  2. Получите токен бота и ID чата
  3. В DBWatch PRO: Settings → Telegram
  4. Введите токен и Chat ID
  5. Нажмите «Send test notification» для проверки

Настройка через переменные окружения

env
TELEGRAM_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id

Email (SMTP)

Настройте SMTP-сервер для отправки email-уведомлений в разделе Settings → Email. Укажите хост, порт, учётные данные и адреса получателей.

Slack

Professional и выше

Slack-уведомления доступны начиная с тарифа Professional.

Для интеграции со Slack создайте Incoming Webhook в настройках вашего workspace и укажите URL в настройках DBWatch PRO.

Webhook

Professional и выше

Webhook доступен начиная с тарифа Professional.

Webhook отправляет HTTP POST на указанный URL при каждом новом алерте. Тело запроса содержит JSON с информацией об алерте: тип, severity, сообщение и timestamp.

Настройка порогов

Пороги всех алертов настраиваются через Settings → Alert Thresholds или через API POST /api/settings/thresholds.

ПараметрПо умолчаниюОписание
cpu_critical90CPU критический (%)
cpu_warning75CPU предупреждение (%)
cpu_critical_streak3Число итераций для дебаунса
ram_critical90RAM критический (%)
ram_warning80RAM предупреждение (%)
disk_critical95Диск критический (%)
disk_warning85Диск предупреждение (%)
slow_query_ms2000Порог медленного запроса (ms)
connections_threshold500Порог соединений
deadlocks_critical1Порог дедлоков
hit_ratio_warning98.0Hit Ratio предупреждение (%)
hit_ratio_critical95.0Hit Ratio критический (%)

Тарифы и лицензирование

Standard, Professional и Enterprise

Standard

Бесплатно
  • До 2 серверов
  • Метрики, алерты, Capacity
  • Telegram, Email
  • Медленные запросы
  • EXPLAIN, Index Advisor
  • Slack, Webhook
  • Health Score
  • Поддержка: email (5 дней)

Enterprise

2 490 ₽/сервер/мес
  • Всё из Professional
  • SSO/LDAP
  • White-label
  • Полный API-доступ
  • Персональный менеджер
  • SLA
Пробный период

14 дней без привязки карты. Скидки: от 10 серверов −10%, от 50 серверов −20%.

Активация лицензии

Лицензия активируется через переменную окружения LICENSE_KEY:

env
LICENSE_KEY=eyJhbGciOiJSUzI1NiIs...

Механизм лицензирования

Лицензия — JWT-токен с подписью RS256. Публичный RSA-ключ вшит в Docker-образ. Проверяются: подпись, issuer (dbwatch-pro), audience (dbwatch-pro-self-hosted), срок действия, tier и max_servers.

UX-граница Standard / Premium

Standard не выглядит как урезанный продукт. Premium-функции обозначены аккуратно:

  • Кнопки EXPLAIN — серые с подсказкой «Available in Premium»
  • Extended history — кнопки видны, но неактивны с tooltip
  • Instance Selector — отображается как «Local / Standard» pill
  • Health Score — показывает «—» с предложением апгрейда

API Reference

38 REST-эндпоинтов + WebSocket. Версия 0.3.0

Аутентификация

Опциональная аутентификация по заголовку X-API-Key:

  • Задаётся через переменную окружения DBWATCH_API_KEY
  • Если не задана — аутентификация отключена
  • При несовпадении → HTTP 403
  • GET /health всегда доступен без ключа

Формат ошибок

json
{
  "detail": "Описание ошибки",
  "code": "VALIDATION_ERROR"
}

Базовый URL

Все эндпоинты доступны по адресу http://your-host:8080. API проксируется через Nginx на /api/.

Системные эндпоинты

Healthcheck, версия, статус лицензии

GET / Root: {"message": "DBWatch Pro Backend готов"}
GET /health Docker healthcheck (без аутентификации)
GET /api/version Версия из файла VERSION
GET /api/license/status Статус лицензии: premium, tier, max_servers, expires_at, reason
GET /api/health-detail CPU% и RAM%, предупреждение если > 85% (psutil)
GET /api/pg/extensions Наличие расширений: pg_stat_statements, pgcrypto, pg_buffercache, pg_repack

API Метрики

Реал-тайм и исторические метрики

GET /api/metrics/realtime Текущие PG + системные метрики. Параметр: instance_id (опц., Premium)
GET /api/metrics/history История метрик из SQLite. Параметры: minutes (1–1440), instance_id (опц.)
GET /api/metrics/disk-space Disk space: usage + прогноз заполнения по tablespace'ам
GET /api/metrics/ws-status Статус WebSocket: enabled, path, send_interval
WS /ws/live Push каждые 2 сек: PG + system метрики (только глобальный PG_DSN)

Пример ответа disk-space

json
{
  "instance_id": null,
  "summary": {
    "current_percent": 42.5,
    "days_until_full": 127.3
  },
  "tablespaces": [
    {"tablespace": "pg_default", "used_bytes": 1073741824, "used_percent": 12.5},
    {"tablespace": "pg_global", "used_bytes": 524288, "used_percent": 0.1}
  ]
}

API Запросы

Медленные запросы и история

GET /api/queries/top-slow Топ медленных запросов из pg_stat_statements. Параметры: limit (1–200), instance_id, include_internal
GET /api/queries/history История запросов (минутные бакеты). Параметры: minutes, instance_id

Поля ответа top-slow

ПолеТипОписание
queryidbigintID запроса из pg_stat_statements
querytextТекст SQL-запроса
callsbigintКоличество вызовов
total_timefloatСуммарное время выполнения (ms)
avg_timefloatСреднее время выполнения (ms)
rowsbigintКоличество строк
shared_blks_hitbigintПопадания в буфер
shared_blks_readbigintЧтения с диска
hit_ratiofloatПроцент попаданий в буфер
dbidoidOID базы данных

API Алерты

Активные алерты, история и подтверждение

GET /api/alerts Текущие активные алерты (вычисляются на лету). Параметр: instance_id (опц.)
POST /api/alerts/ack Acknowledge алерта. Body: {"id": "...", "instance_id": ...}
GET /api/alerts/history История алертов из SQLite. Параметры: days (1–90), limit (1–1000), instance_id
DELETE /api/alerts/history Очистить историю алертов. Параметр: instance_id (опц.)

API Настройки

Конфигурация мониторинга и пороги алертов

GET /api/settings/monitoring Текущие настройки мониторинга (telegram_token маскируется)
POST /api/settings/monitoring Сохранить настройки (telegram_token обновляется только если передан)
POST /api/settings/monitoring/test-telegram Тест Telegram (реальный HTTP-запрос к api.telegram.org)
POST /api/settings/monitoring/test-stats-db Тест подключения к stats DB (SELECT 1)
GET /api/settings/thresholds Получить пороги алертов
POST /api/settings/thresholds Сохранить пороги с валидацией

Параметры настроек

ПараметрТипПо умолчаниюОписание
collect_intervalint60Интервал сбора метрик (5–3600 сек)
history_ttl_daysint90TTL истории запросов
use_separate_stats_dbboolfalseОтдельная PG-БД для query stats
stats_dsnstrDSN отдельной stats-БД
telegram_enabledbooltrueTelegram-уведомления
telegram_chat_idint0ID чата Telegram
telegram_tokenstrТокен Telegram-бота
alert_history_daysint7TTL истории алертов
timezonestrEurope/MoscowЧасовой пояс
disk_pathstr/Путь для мониторинга диска

API Premium

Multi-server, Health Score, EXPLAIN, Index Advisor

Внимание

Все Premium-эндпоинты проверяют ensure_premium_enabled(). При отсутствии Premium — HTTP 400 с code: "VALIDATION_ERROR".

Управление инстансами

GET /api/premium/instances Список всех инстансов (DSN-пароли маскируются)
POST /api/premium/instances Создать инстанс. Проверяет лимит серверов по лицензии
PATCH /api/premium/instances/{id} Частичное обновление инстанса
DELETE /api/premium/instances/{id} Удаление инстанса. Блокируется если есть query_stats_history
POST /api/premium/test-instance-dsn Проверить подключение к DSN (SELECT 1)

Health Score

GET /api/premium/instances/{id}/health Health Score для одного инстанса
GET /api/premium/health/summary Health Score для всех enabled-инстансов

EXPLAIN

POST /api/premium/explain EXPLAIN для запроса из pg_stat_statements по queryid

Index Advisor

GET /api/premium/index-advisor Missing + unused indexes. Параметры: instance_id, limit (1–200), min_avg_time_ms

Часто задаваемые вопросы

FAQ по DBWatch PRO

DBWatch PRO поддерживает PostgreSQL 14 и выше. Рекомендуется PostgreSQL 16 для наилучшей совместимости. Для анализа запросов необходимо расширение pg_stat_statements.

Рекомендуемый способ — Docker. Для запуска из исходников потребуется Python 3.11+, Node.js 20+ и Nginx. Backend: uvicorn backend.app.main:app --port 8000. Frontend: npm run build и раздача через Nginx.

Убедитесь, что pg_stat_statements установлен и включён (shared_preload_libraries = 'pg_stat_statements' в postgresql.conf). После изменения этой настройки необходим перезапуск PostgreSQL.

Проверьте логи: docker compose logs backend. Наиболее частая причина — некорректный PG_DSN или недоступность PostgreSQL из Docker-сети. Убедитесь, что хост указан правильно (не localhost, а имя сервиса или внешний IP).

Проверьте: telegram_enabled = true в Settings; бот добавлен в чат; Chat ID корректный. Нажмите «Send test notification» для проверки. В некоторых сетях может потребоваться VPN для доступа к api.telegram.org.

Все данные хранятся в Docker volume dbwatch-data (файл metrics.db и settings.json). Скопируйте содержимое volume на новый сервер и запустите контейнер с тем же docker-compose.yml.

Рекомендуется: задайте DBWATCH_API_KEY для защиты API, используйте HTTPS через reverse proxy (Nginx, Caddy) и ограничьте доступ по IP через firewall. Backend (порт 8000) не экспонируется — весь трафик идёт через Nginx.

Проверьте логи: docker compose logs agent. Agent ждёт healthcheck backend — если backend не запустился, agent тоже не стартует. Убедитесь, что backend прошёл health check.

Установите USE_SEPARATE_STATS_DB=true и укажите PG_DSN_STATS с DSN отдельной PostgreSQL базы. DBWatch PRO автоматически создаст таблицу query_stats_history. Это полезно для снижения нагрузки на основную БД.

Changelog

История изменений DBWatch PRO

v0.3.0 — текущая версия
  • 32 REST-эндпоинта + 9 Premium-эндпоинтов
  • Index Advisor: missing + unused indexes, severity, SQL-генерация
  • Capacity Planning: CPU, RAM, Disk, Connections forecasting
  • Disk Space Monitoring: tablespaces, прогноз days_until_full
  • Extended History: 24h/7d/30d графики (Premium)
  • Улучшенный UI: skeleton-загрузки, анимации, responsive
v0.2.0
  • Multi-Server Foundation: CRUD инстансов, InstanceSelector
  • Health Score Dashboard: 7 факторов, statuses, recommendations
  • EXPLAIN / Query Plans (Premium)
  • License Key System (JWT RS256)
  • Полная локализация: русский + английский (686 ключей)
v0.1.0
  • Первый публичный релиз
  • Мониторинг одного PostgreSQL-сервера
  • Реал-тайм метрики через WebSocket
  • pg_stat_statements интеграция
  • 12 типов алертов, Telegram-уведомления
  • Тёмная и светлая тема (Obsidian Pulse)

Дорожная карта

Фаза 2 — Расширенный анализ

  • Advanced Index Advisor (JOIN, partial indexes)
  • Query Regression Detection
  • Vacuum & XID Monitoring

Фаза 3 — Extension-aware Monitoring

  • pgvector (index inventory, performance)
  • TimescaleDB (hypertables, chunks)
  • PostGIS, pg_cron

Фаза 4 — Integrations & Enterprise

  • Slack, PagerDuty, Opsgenie, Webhooks
  • RBAC + SSO
  • Audit log export
  • Grafana datasource plugin