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

Что такое 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 секунды. История до 90 дней.

🔍

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

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

🔗

Сессии & Блокировки

Connection Breakdown (Standard), Lock Tree blocker→waiters, Wait Events, история состояний 48ч, Idle-in-tx badge.

🗄️

Анализ Bloat

Раздутие таблиц и индексов из-за MVCC. Severity badge ok/warning/critical, history chart 90 дней, VACUUM-рекомендации.

📈

Capacity Planning

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

🖥️

Multi-Server

Управление несколькими PostgreSQL-серверами из одного интерфейса. Standard — 1 сервер, Professional — без ограничений.

🔔

Алерты

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

📄

PDF Отчёты

Health Report на любой период — сводка по метрикам, топ запросов, алерты. Экспорт в один клик.

⌨️

Command Palette

Глобальный поиск Cmd+K / Ctrl+K. Быстрая навигация по всем разделам с клавиатуры.

Архитектура

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ручная настройка Docker Compose

Если вы хотите настроить конфигурацию вручную — сначала запустите install.sh. Скрипт создаст docker-compose.yml и .env в папке /opt/dbwatch, которые можно отредактировать после установки.

Пример структуры docker-compose.yml:

yaml
# /opt/dbwatch/docker-compose.yml
services:
  dbwatch:
    image: ghcr.io/leg1onary/dbwatch-pro:latest
    ports:
      - "8080:8080"
    env_file: .env
    volumes:
      - dbwatch-data:/app/data
    restart: unless-stopped

volumes:
  dbwatch-data:
Важно

Docker-образ распространяется через приватный реестр. Скрипт install.sh автоматически авторизуется в реестре — ручная авторизация не требуется.

Совет

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

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

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

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 → Уведомления или укажите переменные окружения для отправки алертов. Подробнее — в разделе Уведомления.

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

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

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

Если у вас есть лицензионный ключ, введите его в Settings → License прямо в UI — без перезапуска контейнера. Premium активирует: Multi-Server (до 50 серверов), EXPLAIN-планы, Index Advisor, Sessions drill-down, Lock Tree, Bloat history, PDF-отчёты, Slack-алерты, история 90 дней. Health Score доступен на всех тарифах включая Standard.

Обновление

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

Через install.sh (рекомендуется)

Самый простой способ — перезапустите скрипт установки. Он скачает новый образ, сохранит настройки и перезапустит контейнер:

bash
curl -fsSL https://dbwatch.ru/install.sh | sudo bash
Сохранность данных

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

Дашборд (Overview)

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

Live Metrics Banner NEW v0.20.0

Верхняя панель Overview показывает метрики в реальном времени через WebSocket-соединение:

  • LIVE-индикатор — пульсирующий зелёный маркер + время последнего фрейма
  • CPU / RAM / Connections — текущее значение + мини-sparkline за последние 2 минуты
  • TPS — транзакций в секунду в реальном времени
  • Авто-реконнект — при обрыве соединения переподключается автоматически

WebSocket endpoint: wss://your-host:8080/ws/metrics. Обновление каждые 2 секунды.

Страница 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 дней).

Query Trends NEW v0.20.0

При клике на любой запрос в списке — над EXPLAIN-планом появляется мини-график тренда:

  • Avg time (ms) по дням — визуализация деградации или улучшения запроса
  • Диапазон: 1 / 3 / 7 / 14 дней
  • Помогает быстро понять: запрос деградировал после деплоя или нарастающий тренд?
GET
/api/queries/trend?query_id=&days=7
Тренд avg_time по дням для конкретного запроса

Метрики

Реал-тайм мониторинг 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 дней.

Мониторинг сессий

Новое в v0.18.0 — полный контроль над соединениями PostgreSQL

Обзор

Страница /sessions показывает все активные соединения к PostgreSQL в реальном времени. Доступна в Standard и Premium тарифах с разным уровнем детализации.

Standard

  • Таблица сессий: PID, user, database, application_name, state, duration
  • Фильтр по состоянию (active / idle / idle in transaction / aborted)
  • Без текста SQL-запросов и без графиков

Premium

  • Donut chart — визуальная разбивка по состояниям + progress bar занятости connection pool (total / max_connections)
  • Quick Stats — цветные счётчики по каждому состоянию
  • Drill-down — клик по строке раскрывает: client_addr, backend_type, wait_event_type, wait_event, query_start, xact_start, полный текст SQL
  • Wait Events — агрегация текущих wait events по типу: IO, Lock, LWLock, Client и др.
  • История — stacked area chart состояний + bar chart wait event types, диапазон 1 / 3 / 6 / 12 / 24 / 48 часов

API эндпоинты

GET
/api/sessions
Список текущих сессий со state, PID, user, db, duration
GET
/api/sessions/wait-events
Агрегированные wait events по типу (Premium)
GET
/api/sessions/history?hours=24
История состояний сессий за указанный период (Premium)
Совет: Много сессий в состоянии idle in transaction — сигнал незакрытых транзакций. Drill-down поможет найти виновный запрос.

Lock Tree Premium · NEW v0.19.0

Секция под историей сессий. Визуализирует цепочки блокировок в реальном времени — кто кого блокирует и почему.

  • Дерево blocker → waiters — красные карточки для блокирующих процессов, жёлтые для ожидающих
  • Узел содержит: PID, user/db, lock_mode badge, duration
  • Drill-down по клику: lock_type, relation, wait_event, application_name, полный текст SQL
  • Пустое состояние: No blocking queries с зелёным индикатором + кол-во системных блокировок
  • Авторефреш каждые 10 секунд — не нужно обновлять страницу вручную
GET
/api/sessions/locks
Дерево блокировок: blocker + список waiters с деталями (Premium)
GET
/api/sessions/breakdown
Connection Breakdown: by_user, by_database, by_application top-10 + pool utilization (Standard)

Connection Breakdown Standard · NEW v0.19.1

Секция доступна всем тарифам включая Standard. Показывает детализацию соединений без Premium gate.

  • Pool utilization bar — прогресс бар занятости пула; цвет: зелёный → жёлтый при >60% → красный при >80%
  • State Donut — donut chart с легендой по состояниям (active / idle / idle in tx / aborted)
  • By User / By Database / By Application — горизонтальные bar charts top-10, ширина пропорциональна максимуму в группе
  • Авторефреш каждые 15 секунд

Idle-in-Transaction Badge NEW v0.19.1

Индикатор в заголовке страницы Sessions — сразу видно есть ли зависшие транзакции:

  • Жёлтый при 1–2 сессиях: показывает кол-во и максимальную duration, например 1 idle in tx (max 42s)
  • Красный при 3+ сессиях: сигнал критической ситуации
  • Пропадает автоматически когда таких сессий нет
Сценарий использования: запрос завис — открываешь Lock Tree, видишь кто его блокирует, находишь SQL блокера и решаешь: завершить процесс или дождаться.

Анализ Bloat

Новое в v0.19.0 — мониторинг раздутия таблиц и индексов PostgreSQL

Обзор

Страница /bloat показывает накопленный bloat в таблицах и индексах. Bloat возникает из-за MVCC — удалённые и обновлённые строки остаются на диске до VACUUM. Большой bloat замедляет запросы и раздувает диск.

Страница доступна только в Professional и Enterprise тарифах. Standard видит UpgradePrompt.

Summary Cards

  • Total bloat таблиц (MB)
  • Total bloat индексов (MB)
  • Количество таблиц с bloat
  • Количество индексов с bloat

Таблицы и индексы

Две таблицы с сортировкой по любому столбцу (кликабельные заголовки):

  • Progress bar для bloat%
  • Severity badge: ok (<20%), warning (20–50%), critical (>50%)
  • Столбцы: schema, table/index, size, bloat size, bloat%, last vacuum

История

Stacked area chart — тренд bloat в MB за 7 / 14 / 30 / 90 дней. Помогает увидеть когда bloat начал расти и коррелировать с деплоями или нагрузкой.

API эндпоинты

GET
/api/bloat/tables
Bloat по таблицам: schema, table, size, bloat_size, bloat_pct, severity
GET
/api/bloat/indexes
Bloat по индексам: schema, index, size, bloat_size, bloat_pct, severity
GET
/api/bloat/history?days=30
История bloat за указанный период (7/14/30/90 дней)
Совет: Если bloat% таблицы >30% — запусти VACUUM ANALYZE table_name. Если >50% — рассмотри VACUUM FULL в окно обслуживания (блокирует таблицу).

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

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-сервер
  • Email/Webhook — уведомления через Email и Webhook (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 образ)

Этот docker-compose.yml создаётся автоматически скриптом install.sh. Приведён для справки:

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:

Порты

ПортСервисНазначение
8080DBWatch PROЕдинственный внешний порт — UI + API
Важно

Внутренние сервисы (бэкенд, агент) не экспонируются на хост. Весь трафик проходит через порт 8080.

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

Полный справочник переменных для настройки 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 сек)

Email/Webhook и уведомления

ПеременнаяПо умолчаниюОписание
WEBHOOK_URLURL для Webhook-уведомлений
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Срок хранения истории запросов (дни)

Пороги алертов (настраиваются в Settings UI)

Переменная / полеПо умолчаниюОписание
Disk Warning70%Предупреждение о заполнении диска
Disk Critical90%Критическое заполнение диска
Deadlocks Critical5/минПорог критических дедлоков
Idle In Transaction Timeout300sПорог для idle in transaction сессий (из v0.19.1)

Прочие

ПеременнаяПо умолчаниюОписание
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.

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

Email и Webhook

Уведомления

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

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

  1. Создайте бота через @BotFather
  2. Получите токен бота и ID чата
  3. В DBWatch PRO: Settings → Уведомления
  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

Бесплатно
  • 1 сервер
  • Health Score, метрики, алерты
  • Email/Webhook-уведомления
  • Медленные запросы (список)
  • История 7 дней
  • Сессии (Connection Breakdown, список)
  • EXPLAIN, Index Advisor
  • Capacity, VACUUM, Репликация
  • Slack алерты, Sessions drill-down, Bloat history

Enterprise

2 490 ₽/сервер/мес
  • Всё из Professional
  • История 365 дней
  • 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

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

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

Опциональная аутентификация по заголовку 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 базы данных
GET
/api/queries/trend
Query Trends: avg_time по дням для query_id (параметры: query_id, days=7)

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 Текущие настройки мониторинга (webhook_url маскируется)
POST /api/settings/monitoring Сохранить настройки (webhook_url обновляется только если передан)
POST /api/settings/monitoring/test-telegram Тест Webhook (реальный HTTP-запрос к webhook endpoint)
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-БД
webhook_enabledbooltrueWebhook-уведомления
webhook_urlstrURL для Webhook
email_recipientstrEmail получателя алертов
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.

DBWatch PRO распространяется как Docker-образ. Docker — единственный поддерживаемый способ установки. Скрипт install.sh автоматически установит Docker, если он отсутствует на сервере.

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

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

Проверьте: webhook_enabled = true или email_recipient указан в Settings. Нажмите «Send test notification» для проверки подключения.

Все данные хранятся в 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 dbwatch. Убедитесь, что контейнер успешно запустился (прошёл healthcheck) и PG_DSN корректен. Агент сбора метрик стартует автоматически внутри контейнера после запуска бэкенда.

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

Да, это сигнал проблемы. Сессия idle in transaction держит транзакцию открытой и удерживает блокировки, что может блокировать VACUUM и другие запросы. Откройте страницу Sessions — в заголовке будет цветной badge с количеством и max duration. В Premium доступен drill-down с полным SQL виновного запроса и Lock Tree для поиска цепочки блокировок.

Bloat возникает из-за MVCC — удалённые и обновлённые строки накапливаются до VACUUM. Рекомендации по severity: ok (<20%) — норма, ничего делать не нужно. warning (20–50%) — запустите VACUUM ANALYZE table_name. critical (>50%) — рассмотрите VACUUM FULL table_name в окно обслуживания (блокирует таблицу). Следите за трендом на вкладке History.

Перейдите в Settings → License и введите ключ в поле активации. Лицензия применяется мгновенно без перезапуска. Ключ сохраняется в .env и .env.service — при следующем старте контейнера Premium активируется автоматически.

Используйте Command Palette — Cmd+K на macOS или Ctrl+K на Windows/Linux. Глобальный поиск по всем разделам с навигацией с клавиатуры.

Changelog

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

v0.20.1 — текущая версия
  • feat(Alerts/Actions) — actions стали объектами {label, link} вместо строк; клик по action-кнопке в Notification Drawer теперь навигирует напрямую на нужную страницу
  • Маппинг алерт → страница: CPU high → /sessions, /queries, /capacity · RAM high → /sessions, /capacity · Connections → /sessions · Deadlocks → /sessions (Lock Tree), /queries · Slow queries → /queries · Disk → /metrics, /bloat, /capacity · Hit ratio low → /queries · Idle in tx → /sessions, /settings
  • chore — мегакоммит 15f130a (88 файлов): Sessions, Bloat, LiveMetricsBanner, LockTree, ConnectionBreakdown, QueryTrends, Settings пороги, бэкенд-роутеры, CHANGELOG синхронизирован с main
v0.20.0
  • feat(Overview/LiveBanner) — настоящий WebSocket на Overview: пульсирующий LIVE-индикатор, CPU/RAM/Connections с мини-sparkline за 2 минуты, TPS счётчик, авто-реконнект при обрыве
  • feat(Settings) — три новых порога: Disk Warning/Critical (был в схеме, отсутствовал в UI), Deadlocks Critical, Idle In Transaction Timeout (настраиваемый порог из v0.19.1)
  • feat(Queries/Trends) — при клике на запрос в Queries появляется мини-график avg time (ms) по дням над EXPLAIN, диапазон 1/3/7/14 дней; новый эндпоинт /api/queries/trend
v0.19.2
  • fix(licensing/spread) — в get_license_status() spread-порядок вызывал перезапись явного max_servers значением из tier_limits; исправлено: {**tier_limits, "max_servers": N}
  • fix(licensing/demo) — в DEMO_MODE get_tier_max_servers() читал JWT из LICENSE_PAYLOAD вместо возврата professional default (50); добавлена проверка if DEMO_MODE: return 50
  • fix(licensing/env) — каждый deactivate/activate дописывал новую строку LICENSE_KEY= в .env не удаляя предыдущую; load_dotenv брал первую (устаревший JWT); теперь _update_env_license_key() оставляет только одну строку
  • fix(licensing/service) — deactivate обновлял только .env, но не .env.service который читает systemd; старый JWT оставался активным; теперь оба файла обновляются при activate/deactivate
v0.19.1
  • feat(Sessions/ConnectionBreakdown) — новая секция доступна в Standard: progress bar занятости пула с цветовыми порогами (60%→жёлтый, 80%→красный), State Donut chart с легендой, bar charts top-10 By User / By Database / By Application; авторефреш 15 секунд
  • feat(Sessions/IdleTxBadge) — badge в заголовке страницы Sessions: жёлтый при 1–2 idle in transaction (показывает max duration), красный при 3+; пропадает когда таких сессий нет
v0.19.0
  • feat(Sessions/LockTree) — дерево блокировок blocker → waiters: красные карточки блокирующих, жёлтые ожидающих; PID, user/db, lock_mode, duration; drill-down с lock_type, relation, wait_event, SQL; авторефреш каждые 10 секунд; пустое состояние с green-индикатором
  • feat(Bloat) — новая страница /bloat: summary cards (total bloat таблиц/индексов), две таблицы с сортировкой и severity badge ok/warning/critical, history stacked area chart за 7/14/30/90 дней; Standard tier — UpgradePrompt gate
  • fix(DEMO_MODE) — DEMO_SECRET не был прописан в .env, из-за чего все Premium-фичи отдавали 403 в демо; исправлено
v0.18.0
  • feat(Sessions) — новая страница /sessions: Donut chart занятости connection pool, Quick Stats по состояниям (active / idle / idle in tx / aborted), таблица сессий с фильтром
  • feat(Sessions Premium) — drill-down с полным текстом SQL-запроса, client_addr, wait_event; агрегированные Wait Events по типам (IO / Lock / LWLock / Client); история состояний stacked area chart 1–48 часов
  • fix(routes_sessions) — задеплоен недостающий routes_sessions.py, подключён в main.py
  • chore — Standard gate: без Premium виден только список сессий без query text, вместо charts — UpgradePrompt
v0.17.3
  • fix(NotificationDrawer) — корректное позиционирование дровера рядом с sidebar в свёрнутом (64px) и развёрнутом (256px) состоянии
  • feat(NotificationDrawer) — skeleton-загрузка вместо спиннера; отображение actions[] компактными тегами с иконкой Play
  • chore — удалён мусорный HealthScorePanel.jsx.bak
v0.17.2
  • fix(reports) — корректное отображение секции «Дисковое пространство» в PDF Health Report
  • feat(retention) — автоматическая чистка устаревших данных (cron, TTL 90 дней)
  • chore — удалены .bak файлы, добавлена ротация retention-лога
v0.17.1
  • Demo alerts — single source of truth, алерты генерируются на лету из метрик (Zabbix-style)
  • Agent — нет записи alert_events в DEMO_MODE, устранены дубли
  • Nginx — alias /api/health работает наравне с /health
  • Логирование — stdout для cron-задач, logrotate для demo-логов
v0.17.0
  • Notifications Centre — иконка Bell в сайдбаре, счётчик непрочитанных, drawer с активными алертами
  • Command Palette — глобальный поиск Cmd+K / Ctrl+K, навигация с клавиатуры
  • Reports — анимированный прогресс-бар PDF-генерации, UpgradePrompt для Standard
  • UpgradePrompt — исправлена сломанная навигация (BrowserRouter)
  • i18n — +16 новых ключей (notifications.*, palette.*, reports.progress*)
v0.16.3
  • PDF Reports — страница генерации Health Report
  • Лицензирование — UI активации и деактивации лицензий
  • Servers Dashboard — мультисерверный grid/table view
  • Retention UI — управление сроками хранения данных
  • UpgradePrompt, ExportButton — новые компоненты
  • i18n — синхронизация ru/en, 816 ключей
v0.16.1
  • Docker-дистрибуция — приватный GHCR-образ с защитой исходного кода (.py → .pyc)
  • Однокомандная установкаcurl | sudo bash, токен реестра вшит в скрипт
  • Лицензирование — RSA-ключ вшит в образ, офлайн-активация
  • Яндекс.Метрика — цели view_demo, trial_key, purchase
  • Оплата — ЮKassa-интеграция для trial/professional/enterprise
v0.15.0
  • Security Hardening — systemd sandboxing, WebSocket auth, SSRF защита, пользователь dbwatch
  • Инфраструктура — rate limiting, security headers, HTTP/2, gzip, HSTS preload, fail2ban, swap 2GB
  • Автобэкапы — PostgreSQL daily, SQLite hourly, configs weekly
  • SSH hardening + UFW cleanup (14 правил → 3)
  • Admin — responsive 768px, YooKassa CollapsibleSection, audit-log alias
  • Landing — Яндекс.Метрика + Google Analytics, Tailwind CDN → production build (16KB)
  • Demo — Health Score placeholder fix
  • MySQL удалён, journald limits, disk monitoring
v0.14.0
  • 17 исправлений и улучшений — Landing, Demo, Admin, Docs
  • Landing: бургер-меню, скриншоты, модалка оплаты со скидками
  • Demo: сайдбар сворачивание растягивает контент, равномерные оси X в графиках
  • Demo: исправлены DSN обрезка, CPU/RAM наложение текста, PDF отступы графиков
  • Admin: продление лицензий, удаление, отзыв с причиной, сворачиваемые блоки настроек
  • Admin: блок настроек ЮКасса
  • Автообновление версии на всех страницах (landing, docs, legal)
  • Документация: логотип, обновлённый changelog
v0.13.4
  • Trial лицензии — выдача 14-дневных Professional Trial из admin-панели с автоотправкой на email
  • Admin: DashboardPage с графиками, последние лицензии, статистика по тарифам
  • Обновлён инсталлятор install.sh на лендинге
v0.13.3
  • ESLint: исправлены 9 ошибок и 43 предупреждения во фронтенде
  • Settings.jsx: исправлен ref alertThresholds (useRef вместо createAlertThresholdsRef)
  • Юридические страницы: заполнены реальные данные правообладателя
v0.13.2
  • Overview: кнопки 24h/7d/30d теперь работают для Professional/Enterprise
  • Capacity: исправлены диапазоны 7d/14d/30d, пунктирные линии warning/critical на CPU Headroom
  • Capacity: читаемые даты на оси X графика Disk Trend
  • Лендинг: фикс мобильного меню, горизонтальный скролл code-блоков, checkout модальное окно
  • Документация: улучшена читаемость на широких экранах (2560px+)
v0.13.1
  • Мобильная адаптация: Overview (кнопки периода), Queries (хедер), Capacity (KPI-карточки)
  • Queries: новые фильтры DDL и «Прочие» (CREATE, ALTER, DROP, TRUNCATE и т.д.)
v0.13.0
  • PDF Reports — генерация профессиональных PDF-отчётов о здоровье сервера (Professional/Enterprise)
  • Титульная страница, Executive Summary, графики CPU/RAM/Connections, Top Slow Queries
  • VACUUM статистика, репликация, диск — всё в одном PDF
  • Новая страница /reports с выбором периода (6ч/12ч/24ч/7д/30д)
  • Поддержка кириллицы (DejaVu Sans)
v0.12.0
  • CI/CD Pipeline — полный цикл lint → test → build для каждого push/PR
  • Backend-тесты: 63 теста (pytest) — tier limits, enforcement, health score, config
  • Frontend-тесты: 24 теста (vitest) — timeAgo, statusColors, fetcher, exportCsv
  • Ruff линтинг (backend), ESLint (frontend)
  • Docker publish только после прохождения всех проверок
v0.11.0
  • Enforcement тарифных ограничений — серверное применение лимитов по тарифам
  • Retention по тарифам: Standard 7 дней, Professional 90 дней, Enterprise 365 дней
  • API enforcement: 403 FEATURE_NOT_AVAILABLE для заблокированных функций
  • Frontend Tier Awareness: useFeatureGate, UpgradePrompt, useLicenseStatus
v0.10.0
  • Email-алерты (SMTP) — новый канал уведомлений через SMTP-сервер клиента
  • Поддержка STARTTLS (587), SSL (465) и plain (25)
  • HTML-письма с DBWatch PRO брендингом
  • Тестовая отправка из UI настроек
v0.9.0
  • Экспорт CSV — экспорт данных на страницах Запросы, Алерты, Метрики, Обслуживание
  • BOM-маркер для корректного открытия в Excel/LibreOffice
  • Кнопка экспорта с Premium-гейтом
v0.8.0
  • Серверы: PG Version + Uptime в карточках и таблице
  • Top-3 медленных запросов на Overview (Premium)
  • Детальная панель запроса — slide-over drawer на странице Queries
  • Утилита timeAgo с поддержкой i18n
  • Исправлен маппинг статуса ok → Healthy
v0.7.0
  • Multi-server Dashboard — сводный дашборд всех серверов на /servers
  • Grid и Table view, сортировка worst-first
  • Health Score, CPU/RAM/Disk мини-прогрессбары для каждого сервера
  • Автообновление каждые 30 секунд
v0.6.0
  • Расширенный мониторинг диска: кольцевая диаграмма, топ таблиц, размеры БД
  • Тренд использования диска за 7 дней
  • Новые API: /api/metrics/disk-detail, /api/metrics/disk-history
v0.5.0
  • Страница лицензии: текущий план, сравнение тарифов, статистика использования
  • Index Advisor v2: детекция дубликатов, уровень critical, карточный UI, copy SQL
v0.4.1
  • Webhooks & Slack — мульти-канальная система уведомлений
  • HMAC-SHA256 подпись для Webhook, Block Kit для Slack
  • Единый диспетчер уведомлений (Email + Webhook параллельно)
v0.4.0
  • VACUUM Monitoring — мониторинг VACUUM и репликации PostgreSQL
  • XID Age progress bar, таблица vacuum-статистики, рекомендации
  • Карточки реплик: lag, sync state, LSN
  • Responsive фиксы для Queries, Capacity, Maintenance
v0.3.2
  • Новая тарифная модель: Standard / Professional / Enterprise
  • Обратная совместимость: solo→standard, team→professional, custom→enterprise
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 типов алертов, Email/Webhook-уведомления
  • Тёмная и светлая тема (Obsidian Pulse)

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

✅ Реализовано (v0.13–v0.19)

  • Health Score, метрики, алерты, pg_stat_statements
  • EXPLAIN-планы, Index Advisor, Capacity Planning
  • Multi-Server, PDF-отчёты, CSV-экспорт
  • Command Palette (Cmd+K), Notifications Centre
  • Мониторинг сессий, Lock Tree, Wait Events
  • Анализ Bloat таблиц и индексов
  • Connection Breakdown, Idle-in-tx badge
  • Лицензирование UI (activate/deactivate без перезапуска)

Фаза 2 — Продвинутый анализ

  • Advanced Index Advisor (JOIN, partial indexes)
  • Query Regression Detection — автообнаружение деградации запросов
  • Anomaly Detection — ML-based выявление аномалий
  • Query groups — группировка похожих запросов

Фаза 3 — Extension-aware мониторинг

  • pgvector — index inventory, performance метрики
  • TimescaleDB — hypertables, chunks, compression stats
  • PostGIS, pg_cron мониторинг

Фаза 4 — Enterprise расширения

  • PagerDuty, Opsgenie интеграции
  • RBAC + SSO / LDAP
  • Audit log export
  • Grafana datasource plugin
  • Telegram-уведомления