
Мониторинг в реальном времени и анализ slowlog для баз данных Valkey и Redis с обнаружением аномалий, аудитом ACL и экспортом метрик в Prometheus.
Мониторинговый слой, которого заслуживает Valkey.
BetterDB сохраняет то, что Valkey выбрасывает, — медленные логи, паттерны команд, активность клиентов, сигналы аномалий, — чтобы вы могли разобраться, что произошло в 3 часа ночи, а не только видеть, что происходит сейчас. Создан для Valkey 8.x с нативной поддержкой COMMANDLOG, CLUSTER SLOT-STATS и метрик I/O по потокам. Для всего остального совместим с Redis 6+.
Сайт | Docker Hub | npm | Документация | Блог
BetterDB создан компанией BetterDB Inc. — публичной компанией социальной направленности, действующей в соответствии с OCV Open Charter.

docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
Откройте в браузере http://localhost:3001. Для мониторинга конкретного экземпляра:
docker run -d \
--name betterdb \
-p 3001:3001 \
-e DB_HOST=your-valkey-host \
-e DB_PORT=6379 \
-e DB_PASSWORD=your-password \
betterdb/monitor:latest
Публикуются два варианта образа, оба мультиархитектурные (linux/amd64, linux/arm64):
| Тег | Что это |
|---|---|
latest, X.Y.Z-no-ai | Образ по умолчанию — включены все функции мониторинга, без зависимостей для экспериментального ИИ-помощника на локальной LLM |
X.Y.Z | Добавляет экспериментального ИИ-помощника (используйте свою Ollama; по умолчанию отключён через AI_ENABLED) |
См. Продакшн-развёртывание в Docker для настройки постоянного хранилища, нестандартных портов, лицензирования и изолированных (air-gapped) окружений.
Запустите BetterDB Monitor без Docker:
npx @betterdb/monitor
При первом запуске интерактивный мастер настройки проведёт вас через подключение к базе данных, выбор хранилища (SQLite, PostgreSQL или in-memory) и настройки сервера. Конфигурация сохраняется в ~/.betterdb/config.json.
npm install -g @betterdb/monitor # global install
betterdb --setup # re-run setup wizard
betterdb --port 8080 # override server port
betterdb --db-host 1.2.3.4 # override database host
betterdb --help # all options
Требуются Node.js >= 20.0.0 и экземпляр Valkey или Redis для мониторинга. Для хранения в SQLite дополнительно выполните npm install -g better-sqlite3.
@betterdb/mcp.betterdb_*. См. docs/prometheus-metrics.md.Примечание: В продакшн-сборках (Docker, CLI) API-маршруты обслуживаются с префиксом
/api. В локальной разработке (pnpm dev) префикса нет — например,http://localhost:3001/health.
| База данных | Минимальная версия | Поддерживаемые функции |
|---|---|---|
| Valkey | 8.0+ | Все функции, включая COMMANDLOG (8.1+) и CLUSTER SLOT-STATS |
| Redis | 6+ | Все функции, кроме эксклюзивных для Valkey COMMANDLOG и CLUSTER SLOT-STATS |
Бэкенд использует унифицированный адаптер поверх совместимого по протоколу клиента iovalkey и автоматически определяет Valkey или Redis по ответу INFO (DB_TYPE=auto). Возможности вроде COMMANDLOG и SLOT-STATS определяются по версии, а интерфейс плавно деградирует, когда функция недоступна.
Управляемые сервисы тоже поддерживаются — руководства для AWS ElastiCache, MemoryDB, Redis Cloud и Upstash находятся в docs/providers, а @betterdb/agent подключается к экземплярам, доступным только через VPC, по исходящему WebSocket.
Docker-образ содержит приложение для мониторинга (бэкенд и фронтенд). Требуются:
docker run -d \
--name betterdb-monitor \
-p 3001:3001 \
-e DB_HOST=your-valkey-host \
-e DB_PORT=6379 \
-e DB_PASSWORD=your-password \
-e STORAGE_TYPE=postgres \
-e STORAGE_URL=postgresql://user:pass@postgres-host:5432/dbname \
betterdb/monitor
Задайте переменную окружения PORT и укажите соответствующее сопоставление -p:
docker run -d \
--name betterdb-monitor \
-p 8080:8080 \
-e PORT=8080 \
-e DB_HOST=your-valkey-host \
betterdb/monitor
Если ваш Valkey и PostgreSQL работают на одном хосте:
docker run -d \
--name betterdb-monitor \
--network host \
-e DB_HOST=localhost \
-e DB_PORT=6380 \
-e DB_PASSWORD=devpassword \
-e STORAGE_TYPE=postgres \
-e STORAGE_URL=postgresql://dev:devpass@localhost:5432/postgres \
betterdb/monitor
Полный справочник, включая AI, экспорт OTLP, настройку вебхуков и пороги health-гейтов: docs/configuration.md.
BetterDB Monitor открывает функции Pro/Enterprise одним из двух способов, в зависимости от того, есть ли у хоста доступ в интернет:
BETTERDB_LICENSE_KEY. Монитор проверяет его на betterdb.com и кэширует локально проверяемый подписанный токен, поэтому ваш тариф продолжает работать при кратковременных сбоях и перезапусках.Каждая лицензия — это подписанный RS256 JWT. Монитор проверяет его локально по публичным ключам, встроенным в образ, — ему никогда не нужно обращаться к лицензионному серверу, чтобы доверять токену. Поэтому изолированный хост может работать на платных тарифах без какого-либо подключения:
.jwt, Pro/Enterprise). Он не содержит секретов и защищён от подделки — любое изменение нарушит подпись.BETTERDB_OFFLINE_LICENSE_FILE (путь), BETTERDB_OFFLINE_LICENSE (строка) или вставьте в интерфейсе в разделе Settings → License → «Air-gapped environment? Activate an offline license.»Когда настроен офлайн-токен и не задан BETTERDB_LICENSE_KEY, монитор не выполняет ни одного исходящего запроса — проверки лицензии, телеметрия и пинги обновлений полностью отключены. Он работает на предоставленном тарифе до истечения срока действия токена (бессрочные лицензии обновляются ежегодно), а затем возвращается к Community.
# fully offline - no network required
docker volume create betterdb-data
docker run --rm -v betterdb-data:/d alpine chown 1001:1001 /d # volume writable by UID 1001 (one-time)
docker run -d --name betterdb-monitor -p 3001:3001 \
-e DB_HOST=your-valkey-host -e DB_PORT=6379 -e DB_PASSWORD=your-password \
-v /path/to/betterdb-license.jwt:/run/secrets/betterdb-license.jwt:ro \
-e BETTERDB_OFFLINE_LICENSE_FILE=/run/secrets/betterdb-license.jwt \
-v betterdb-data:/app/data \
betterdb/monitor
Проверьте с помощью GET /api/license/status → source: offline-token, mode: offline, airGapped: true.
Постоянное хранение: смонтируйте записываемый том в
/app/data, чтобы офлайн-лицензия и онлайн-токен переживания сбоев сохранялись после перезапусков. Контейнер работает под UID 1001, поэтому свежесозданный том должен быть передан ему черезchown(показано выше) — иначе сохранение завершится ошибкойEACCES … license.jwt.
Полный процесс, приоритет проверки и сценарий ротации ключей см. в Автономные и изолированные лицензии и Справочник по конфигурации.
node:20-alpinelatest / -no-ai) / ~640MB (версионный образ с зависимостями локальной LLM экспериментального ИИ-помощника)linux/amd64, linux/arm64docker logs -f betterdb-monitor # follow logs
docker stop betterdb-monitor # stop
docker rm betterdb-monitor # remove
BetterDB Monitor сохраняет журнал аудита, аналитику, захваты и данные об аномалиях в одно из трёх хранилищ:
Метрики публикуются на GET /api/prometheus/metrics в текстовом формате Prometheus: аудит ACL, клиентские подключения, паттерны slowlog/commandlog, память, пропускная способность, keyspace, репликация, статистика слотов кластера и метрики рантайма Node.js — все с префиксом betterdb_.
scrape_configs:
- job_name: 'betterdb-monitor'
metrics_path: '/api/prometheus/metrics'
static_configs:
- targets: ['your-monitor-host:3001']
Полный справочник метрик: docs/prometheus-metrics.md и docs/prometheus-integration.md.
betterdb-monitor/
├── apps/
│ ├── api/ # NestJS backend (Fastify)
│ └── web/ # React frontend (Vite)
├── packages/ # Published packages (see below)
├── docs/ # Documentation site (Jekyll)
├── docker-compose.yml # Local Valkey (port 6380) and Redis (port 6382) for testing
└── package.json # Workspace root
В этом монорепозитории распространяется несколько самостоятельных пакетов. Полный список см. в packages/.
iovalkey для подключений к Valkey/Redis, строгий режим TypeScript. Порт 3001.Предварительные требования: Node.js >= 20.0.0, pnpm >= 9.0.0, Docker.
pnpm install
cp .env.example .env
pnpm docker:dev # local Valkey (6380) and Redis (6382)
pnpm dev # web on :5173, api on :3001
Чтобы подключиться к Redis вместо Valkey, задайте DB_PORT=6382 в .env.
pnpm dev:api # API only
pnpm dev:web # frontend only
pnpm docker:dev:down # stop local databases
pnpm build # production build
pnpm test # API tests
Сборка Docker-образов:
pnpm docker:build # local build
pnpm docker:publish # multi-arch build & push (requires buildx)
apps/api/src/apps/web/src/api/packages/shared/src/types/anydocs/ лицензируется по CC BY-SA 4.0.proprietary/ покрывается коммерческой лицензией (см. proprietary/LICENSE). Эти функции бесплатны в период раннего доступа.| Интерфейс | Подробности |
|---|
| Веб-интерфейс | http://localhost:3001 |
| MCP-сервер | npx @betterdb/mcp (stdio) — создайте токен в разделе Settings → MCP Tokens |
| Prometheus | http://localhost:3001/api/prometheus/metrics |
| REST API (OpenAPI) | http://localhost:3001/docs |
| Проверка состояния | http://localhost:3001/api/health |
| Переменная | Обязательная | По умолчанию | Описание |
|---|
DB_HOST | Да | localhost | Хост Valkey/Redis для мониторинга |
DB_PORT | Нет | 6379 | Порт Valkey/Redis |
DB_PASSWORD | Нет | - | Пароль Valkey/Redis |
DB_USERNAME | Нет | default | ACL-имя пользователя Valkey/Redis |
DB_TYPE | Нет | auto | Тип базы данных: auto, valkey или redis |
STORAGE_TYPE | Нет | memory | Хранилище: memory или postgres |
STORAGE_URL | Условно | - | URL подключения PostgreSQL (обязателен, если STORAGE_TYPE=postgres) |
PORT | Нет | 3001 | HTTP-порт приложения |
NODE_ENV | Нет | production | Окружение Node |
ANOMALY_DETECTION_ENABLED | Нет | true | Включить обнаружение аномалий |
ANOMALY_PROMETHEUS_INTERVAL_MS | Нет | 30000 | Интервал обновления сводки Prometheus (мс) |
BETTERDB_LICENSE_KEY | Нет | - | Онлайн-лицензионный ключ (Pro/Enterprise), проверяется по сети |
BETTERDB_OFFLINE_LICENSE_FILE | Нет | - | Путь к подписанному офлайн-лицензионному .jwt для изолированных (air-gapped) хостов (см. ниже) |
BETTERDB_OFFLINE_LICENSE | Нет | - | Офлайн-лицензионный токен в виде встроенной строки JWT |
BETTERDB_DATA_DIR | Нет | /app/data | Каталог для сохраняемого состояния лицензии (смонтируйте записываемый том) |
BETTERDB_TELEMETRY | Нет | true | Установите false для отключения анонимной телеметрии |
| Хранилище | Сценарий использования | Примечания |
|---|
memory | Тестирование, эфемерные окружения | По умолчанию в Docker; все данные теряются при перезапуске |
postgres | Продакшн | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
sqlite | Локальная разработка / CLI | Не входит в продакшн-образы Docker; STORAGE_SQLITE_FILEPATH необязателен |
| Пакет | Язык | Реестр |
|---|
@betterdb/monitor | TypeScript | npm |
@betterdb/mcp | TypeScript | npm |
@betterdb/agent | TypeScript | npm |
@betterdb/semantic-cache | TypeScript | npm |
betterdb-semantic-cache | Python | PyPI |
@betterdb/agent-cache | TypeScript | npm |
betterdb-agent-cache | Python | PyPI |
cache-benchmark | Python | Инструмент воспроизведения для бенчмаркинга семантических кэшей |