Обзор продукта
Что такое 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
Стек технологий
| Компонент | Технологии |
|---|---|
| Backend | Python 3.11, FastAPI 0.115, SQLAlchemy 2.0, psycopg 3.2, psutil, PyJWT |
| Frontend | React 19, Vite 7, Tailwind CSS 3, Recharts 3, SWR 2, Lucide React |
| Инфраструктура | Docker, Nginx, Supervisor, PostgreSQL 16 |
| CI/CD | GitHub Actions → ghcr.io |
Системные требования
Минимальные требования для развёртывания DBWatch PRO
| Требование | Минимум | Рекомендуется |
|---|---|---|
| Docker Engine | 20.10+ | 24.0+ |
| Docker Compose | v2 | v2.20+ |
| RAM | 512 MB | 1 GB+ |
| CPU | 1 vCPU | 2 vCPU |
| Дисковое пространство | 500 MB | 2 GB+ (для истории метрик) |
| PostgreSQL | 14+ | 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, лицензионный ключ и порт — и запустит всё автоматически.
curl -sSL https://dbwatch.ru/install.sh | bash
Ручная установка через Docker Compose
Создайте файл docker-compose.yml:
# 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:
Запустите контейнер:
docker compose up -d
# Откройте http://localhost:8080
Замените PG_DSN на реальную строку подключения к вашему PostgreSQL-серверу. Пустой LICENSE_KEY активирует бесплатный тариф Standard (до 2 серверов).
Установка из исходников
Для разработки или кастомизации:
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 от неавторизованного доступа.
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)
docker compose pull
docker compose up -d
Из исходников
git pull
docker compose up -d --build
Данные метрик хранятся в Docker volume (dbwatch-data) и не теряются при обновлении. Миграции SQLite применяются автоматически при запуске backend.
Дашборд (Overview)
Обзор состояния базы данных на одном экране
Страница Overview — главный дашборд DBWatch PRO. Здесь отображается общее состояние вашего PostgreSQL-сервера: ключевые метрики, Health Score, количество активных соединений и последние алерты.
Health Score
Интегральная оценка сервера
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-планы
Функция доступна в тарифах Professional и Enterprise.
Кнопка EXPLAIN на странице Queries позволяет получить план выполнения запроса. Поддерживаются параметризованные запросы через PREPARE/EXPLAIN EXECUTE. Результат отображается в ExplainModal с monospace-форматированием.
Index Advisor
Функция доступна в тарифах 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:
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 — активные запросы
Временные диапазоны
| Тариф | Доступные диапазоны |
|---|---|
| Standard | 15 минут, 1 час, 4 часа |
| Professional / Enterprise | 15 минут, 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-серверами из одного интерфейса
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 Critical | Critical | CPU ≥ 90% на протяжении 3 итераций |
| CPU Warning | Warning | CPU ≥ 75% |
| RAM Critical | Critical | RAM ≥ 90% |
| RAM Warning | Warning | RAM ≥ 80% |
| Disk Critical | Critical | Disk ≥ 95% |
| Disk Warning | Warning | Disk ≥ 85% |
| Connections High | Critical / Warning | ≥ max_connections / ≥ 500 |
| Hit Ratio Critical | Critical | Hit Ratio < 95% |
| Hit Ratio Warning | Warning | Hit Ratio < 98% |
| Deadlocks | Critical | Deadlocks ≥ 1 |
| Slow Query | Warning | avg_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 образ)
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:
Конфигурация для разработки
# 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:
Порты
| Порт | Сервис | Назначение |
|---|---|---|
8080 | frontend (nginx) | Единственный внешний порт — UI + API proxy |
5433 | postgres | Dev-доступ к тестовому PostgreSQL |
5434 | postgres_replica | Dev-доступ к реплике |
Backend (порт 8000) не экспонируется на хост в production. Весь трафик проходит через Nginx.
Переменные окружения
Полный справочник переменных для настройки DBWatch PRO
Основные переменные
| Переменная | По умолчанию | Обязательная | Описание |
|---|---|---|---|
PG_DSN | — | Да | DSN основного PostgreSQL |
DBWATCH_API_KEY | пусто | Нет * | X-API-Key для аутентификации. В production обязательно задать. |
LICENSE_KEY | пусто | Нет | JWT RS256 лицензия Premium. Пустой = Standard. |
DBWATCH_PORT | 8080 | Нет | Порт веб-интерфейса |
COLLECT_INTERVAL | 60 | Нет | Интервал сбора метрик (5–3600 сек) |
Telegram и уведомления
| Переменная | По умолчанию | Описание |
|---|---|---|
TELEGRAM_TOKEN | — | Токен Telegram-бота |
TELEGRAM_CHAT_ID | — | ID чата для уведомлений |
Хранение данных
| Переменная | По умолчанию | Описание |
|---|---|---|
DATABASE_URL | sqlite:///./metrics.db | SQLite DSN для метрик |
DBWATCH_DATA_DIR | /app/data | Директория данных |
USE_SEPARATE_STATS_DB | false | Отдельная PG-БД для query_stats |
PG_DSN_STATS | = PG_DSN | DSN отдельной stats-БД |
QUERY_HISTORY_TTL_DAYS | 90 | Срок хранения истории запросов (дни) |
Прочие
| Переменная | По умолчанию | Описание |
|---|---|---|
LICENSE_PUBLIC_KEY_PATH | /app/backend/license_public.pem | Путь к публичному RSA-ключу |
BACKEND_URL | http://backend:8000 | URL backend для агента |
Настройка pg_stat_statements
Как включить расширение для анализа запросов
Расширение pg_stat_statements необходимо для работы раздела «Анализ запросов». Без него остальной мониторинг (метрики, алерты, capacity planning) работает в полном объёме.
Шаг 1: Добавьте в postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
Шаг 2: Перезапустите PostgreSQL
sudo systemctl restart postgresql
Шаг 3: Создайте расширение
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
- Создайте бота через @BotFather
- Получите токен бота и ID чата
- В DBWatch PRO: Settings → Telegram
- Введите токен и Chat ID
- Нажмите «Send test notification» для проверки
Настройка через переменные окружения
TELEGRAM_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
Email (SMTP)
Настройте SMTP-сервер для отправки email-уведомлений в разделе Settings → Email. Укажите хост, порт, учётные данные и адреса получателей.
Slack
Slack-уведомления доступны начиная с тарифа Professional.
Для интеграции со Slack создайте Incoming Webhook в настройках вашего workspace и укажите URL в настройках DBWatch PRO.
Webhook
Webhook доступен начиная с тарифа Professional.
Webhook отправляет HTTP POST на указанный URL при каждом новом алерте. Тело запроса содержит JSON с информацией об алерте: тип, severity, сообщение и timestamp.
Настройка порогов
Пороги всех алертов настраиваются через Settings → Alert Thresholds или через API POST /api/settings/thresholds.
| Параметр | По умолчанию | Описание |
|---|---|---|
cpu_critical | 90 | CPU критический (%) |
cpu_warning | 75 | CPU предупреждение (%) |
cpu_critical_streak | 3 | Число итераций для дебаунса |
ram_critical | 90 | RAM критический (%) |
ram_warning | 80 | RAM предупреждение (%) |
disk_critical | 95 | Диск критический (%) |
disk_warning | 85 | Диск предупреждение (%) |
slow_query_ms | 2000 | Порог медленного запроса (ms) |
connections_threshold | 500 | Порог соединений |
deadlocks_critical | 1 | Порог дедлоков |
hit_ratio_warning | 98.0 | Hit Ratio предупреждение (%) |
hit_ratio_critical | 95.0 | Hit Ratio критический (%) |
Тарифы и лицензирование
Standard, Professional и Enterprise
Standard
- ✓ До 2 серверов
- ✓ Метрики, алерты, Capacity
- ✓ Telegram, Email
- ✓ Медленные запросы
- — EXPLAIN, Index Advisor
- — Slack, Webhook
- — Health Score
- ✓ Поддержка: email (5 дней)
Professional
- ✓ Без ограничений серверов
- ✓ Всё из Standard
- ✓ EXPLAIN-планы
- ✓ Index Advisor
- ✓ Health Score
- ✓ Multi-Server, Capacity Planning
- ✓ Webhook, Slack
- ✓ Поддержка: приоритетная (1 день)
Enterprise
- ✓ Всё из Professional
- ✓ SSO/LDAP
- ✓ White-label
- ✓ Полный API-доступ
- ✓ Персональный менеджер
- ✓ SLA
14 дней без привязки карты. Скидки: от 10 серверов −10%, от 50 серверов −20%.
Активация лицензии
Лицензия активируется через переменную окружения LICENSE_KEY:
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всегда доступен без ключа
Формат ошибок
{
"detail": "Описание ошибки",
"code": "VALIDATION_ERROR"
}
Базовый URL
Все эндпоинты доступны по адресу http://your-host:8080. API проксируется через Nginx на /api/.
Системные эндпоинты
Healthcheck, версия, статус лицензии
/
Root: {"message": "DBWatch Pro Backend готов"}
/health
Docker healthcheck (без аутентификации)
/api/version
Версия из файла VERSION
/api/license/status
Статус лицензии: premium, tier, max_servers, expires_at, reason
/api/health-detail
CPU% и RAM%, предупреждение если > 85% (psutil)
/api/pg/extensions
Наличие расширений: pg_stat_statements, pgcrypto, pg_buffercache, pg_repack
API Метрики
Реал-тайм и исторические метрики
/api/metrics/realtime
Текущие PG + системные метрики. Параметр: instance_id (опц., Premium)
/api/metrics/history
История метрик из SQLite. Параметры: minutes (1–1440), instance_id (опц.)
/api/metrics/disk-space
Disk space: usage + прогноз заполнения по tablespace'ам
/api/metrics/ws-status
Статус WebSocket: enabled, path, send_interval
/ws/live
Push каждые 2 сек: PG + system метрики (только глобальный PG_DSN)
Пример ответа disk-space
{
"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 Запросы
Медленные запросы и история
/api/queries/top-slow
Топ медленных запросов из pg_stat_statements. Параметры: limit (1–200), instance_id, include_internal
/api/queries/history
История запросов (минутные бакеты). Параметры: minutes, instance_id
Поля ответа top-slow
| Поле | Тип | Описание |
|---|---|---|
queryid | bigint | ID запроса из pg_stat_statements |
query | text | Текст SQL-запроса |
calls | bigint | Количество вызовов |
total_time | float | Суммарное время выполнения (ms) |
avg_time | float | Среднее время выполнения (ms) |
rows | bigint | Количество строк |
shared_blks_hit | bigint | Попадания в буфер |
shared_blks_read | bigint | Чтения с диска |
hit_ratio | float | Процент попаданий в буфер |
dbid | oid | OID базы данных |
API Алерты
Активные алерты, история и подтверждение
/api/alerts
Текущие активные алерты (вычисляются на лету). Параметр: instance_id (опц.)
/api/alerts/ack
Acknowledge алерта. Body: {"id": "...", "instance_id": ...}
/api/alerts/history
История алертов из SQLite. Параметры: days (1–90), limit (1–1000), instance_id
/api/alerts/history
Очистить историю алертов. Параметр: instance_id (опц.)
API Настройки
Конфигурация мониторинга и пороги алертов
/api/settings/monitoring
Текущие настройки мониторинга (telegram_token маскируется)
/api/settings/monitoring
Сохранить настройки (telegram_token обновляется только если передан)
/api/settings/monitoring/test-telegram
Тест Telegram (реальный HTTP-запрос к api.telegram.org)
/api/settings/monitoring/test-stats-db
Тест подключения к stats DB (SELECT 1)
/api/settings/thresholds
Получить пороги алертов
/api/settings/thresholds
Сохранить пороги с валидацией
Параметры настроек
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
collect_interval | int | 60 | Интервал сбора метрик (5–3600 сек) |
history_ttl_days | int | 90 | TTL истории запросов |
use_separate_stats_db | bool | false | Отдельная PG-БД для query stats |
stats_dsn | str | — | DSN отдельной stats-БД |
telegram_enabled | bool | true | Telegram-уведомления |
telegram_chat_id | int | 0 | ID чата Telegram |
telegram_token | str | — | Токен Telegram-бота |
alert_history_days | int | 7 | TTL истории алертов |
timezone | str | Europe/Moscow | Часовой пояс |
disk_path | str | / | Путь для мониторинга диска |
Часто задаваемые вопросы
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
- 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
- Multi-Server Foundation: CRUD инстансов, InstanceSelector
- Health Score Dashboard: 7 факторов, statuses, recommendations
- EXPLAIN / Query Plans (Premium)
- License Key System (JWT RS256)
- Полная локализация: русский + английский (686 ключей)
- Первый публичный релиз
- Мониторинг одного 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