
Monitoramento em tempo real e análise de slowlog para bancos de dados Valkey e Redis com detecção de anomalias, auditoria de ACL e exportação de métricas do Prometheus.
A camada de monitoramento que a Valkey merece.
O BetterDB persiste o que a Valkey descarta — slowlogs, padrões de comandos, atividade de clientes, sinais de anomalia — para que você possa depurar o que aconteceu às 3h da manhã, e não apenas o que está acontecendo agora. Construído para Valkey 8.x com suporte nativo a COMMANDLOG, CLUSTER SLOT-STATS e métricas de I/O por thread. Compatível com Redis 6+ para todo o resto.
Website | Docker Hub | npm | Documentação | Blog
O BetterDB é desenvolvido pela BetterDB Inc., uma empresa de benefício público que opera sob a OCV Open Charter.

docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
Aponte seu navegador para http://localhost:3001. Para monitorar uma instância específica:
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
Duas variantes de imagem são publicadas, ambas multi-arquitetura (linux/amd64, linux/arm64):
| Tag | O que é |
|---|---|
latest, X.Y.Z-no-ai | Imagem padrão — todos os recursos de monitoramento incluídos, sem as dependências do AI Helper local-LLM experimental |
X.Y.Z | Adiciona o AI Helper experimental (traga seu próprio Ollama; desabilitado por padrão via AI_ENABLED) |
Consulte Implantação de Produção com Docker para armazenamento persistente, portas personalizadas, licenciamento e configurações air-gapped.
Execute o BetterDB Monitor sem Docker:
npx @betterdb/monitor
Na primeira execução, um assistente de configuração interativo orienta você pela conexão com o banco de dados, backend de armazenamento (SQLite, PostgreSQL ou em memória) e configurações do servidor. A configuração é salva em ~/.betterdb/config.json.
npm install -g @betterdb/monitor # instalação global
betterdb --setup # reexecuta o assistente de configuração
betterdb --port 8080 # substitui a porta do servidor
betterdb --db-host 1.2.3.4 # substitui o host do banco de dados
betterdb --help # todas as opções
Requer Node.js >= 20.0.0 e uma instância Valkey ou Redis para monitorar. Para armazenamento SQLite, também npm install -g better-sqlite3.
@betterdb/mcp.betterdb_*. Consulte docs/prometheus-metrics.md.Nota: Em builds de produção (Docker, CLI), as rotas da API são servidas sob o prefixo
/api. No desenvolvimento local (pnpm dev) não há prefixo — ex.:http://localhost:3001/health.
| Banco de Dados | Versão Mínima | Recursos Suportados |
|---|---|---|
| Valkey | 8.0+ | Todos os recursos, incluindo COMMANDLOG (8.1+) e CLUSTER SLOT-STATS |
| Redis | 6+ | Todos os recursos, exceto COMMANDLOG e CLUSTER SLOT-STATS, exclusivos da Valkey |
O backend usa um adaptador unificado sobre o cliente iovalkey, compatível em nível de protocolo, e detecta automaticamente Valkey vs Redis a partir da resposta INFO (DB_TYPE=auto). Recursos como COMMANDLOG e SLOT-STATS são detectados por versão, e a interface degrada graciosamente quando um recurso não está disponível.
Serviços gerenciados também são suportados — guias para AWS ElastiCache, MemoryDB, Redis Cloud e Upstash estão em docs/providers, e o @betterdb/agent alcança instâncias somente-VPC por meio de um WebSocket de saída.
A imagem Docker contém o aplicativo de monitoramento (backend + frontend). Ela requer:
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
Defina a variável de ambiente PORT e faça o mapeamento correspondente no -p:
docker run -d \
--name betterdb-monitor \
-p 8080:8080 \
-e PORT=8080 \
-e DB_HOST=your-valkey-host \
betterdb/monitor
Se sua Valkey e PostgreSQL estiverem rodando no mesmo host:
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
Referência completa, incluindo IA, exportação OTLP, ajuste de webhooks e limites de health-gate: docs/configuration.md.
O BetterDB Monitor desbloqueia recursos Pro/Enterprise de uma de duas maneiras, dependendo de o host ter acesso à internet:
BETTERDB_LICENSE_KEY. O monitor a valida
contra betterdb.com e armazena em cache um token assinado verificado localmente,
para que seu plano continue funcionando durante quedas curtas e reinicializações.Cada direito é um JWT RS256 assinado. O monitor o verifica localmente contra chaves públicas embutidas na imagem — ele nunca precisa alcançar um servidor de licenças para confiar em um token. Assim, um host air-gapped pode executar planos pagos com zero conectividade:
.jwt, Pro/Enterprise). Ele não contém
segredos e não pode ser adulterado — qualquer edição quebra a assinatura.BETTERDB_OFFLINE_LICENSE_FILE (caminho), BETTERDB_OFFLINE_LICENSE
(string inline) ou cole-o na interface em Configurações → Licença → "Ambiente
air-gapped? Ative uma licença offline."Quando um token offline está configurado e nenhum BETTERDB_LICENSE_KEY é definido,
o monitor faz zero requisições de saída — verificações de licença, telemetria e
pings de atualização são todos desabilitados. Ele executa o plano concedido até o token
expirar (licenças perpétuas são baixadas novamente anualmente) e então reverte para Community.
# totalmente offline - nenhuma rede necessária
docker volume create betterdb-data
docker run --rm -v betterdb-data:/d alpine chown 1001:1001 /d # volume gravável pelo UID 1001 (uma vez)
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
Verifique com GET /api/license/status → source: offline-token, mode: offline,
airGapped: true.
Persistência: monte um volume gravável em
/app/datapara que a licença offline e o token de tolerância a quedas online sobrevivam a reinicializações. O contêiner roda como UID 1001, portanto um volume recém-criado deve serchownado para ele (mostrado acima) — caso contrário, a persistência falha comEACCES … license.jwt.
Para o fluxo completo, precedência de verificação e runbook de rotação de chaves, consulte Licenças Offline e Air-Gapped e a Referência de configuração.
node:20-alpinelatest / -no-ai) / ~640MB (imagem versionada com as dependências locais de LLM do AI Helper experimental)linux/amd64, linux/arm64docker logs -f betterdb-monitor # seguir logs
docker stop betterdb-monitor # parar
docker rm betterdb-monitor # remover
O BetterDB Monitor persiste trilha de auditoria, analíticos, capturas e dados de anomalias em um de três backends:
As métricas são expostas em GET /api/prometheus/metrics no formato de texto do Prometheus: auditoria ACL, conexões de clientes, padrões de slowlog/commandlog, memória, throughput, keyspace, replicação, estatísticas de slots de cluster e métricas de runtime Node.js — todas prefixadas com betterdb_.
scrape_configs:
- job_name: 'betterdb-monitor'
metrics_path: '/api/prometheus/metrics'
static_configs:
- targets: ['your-monitor-host:3001']
Referência completa de métricas: docs/prometheus-metrics.md e docs/prometheus-integration.md.
betterdb-monitor/
├── apps/
│ ├── api/ # Backend NestJS (Fastify)
│ └── web/ # Frontend React (Vite)
├── packages/ # Pacotes publicados (veja abaixo)
├── docs/ # Site de documentação (Jekyll)
├── docker-compose.yml # Valkey local (porta 6380) e Redis (porta 6382) para testes
└── package.json # Raiz do workspace
Este monorepo inclui vários pacotes independentes. Consulte packages/ para a lista completa.
iovalkey para conexões Valkey/Redis, TypeScript em modo estrito. Porta 3001.Pré-requisitos: Node.js >= 20.0.0, pnpm >= 9.0.0, Docker.
pnpm install
cp .env.example .env
pnpm docker:dev # Valkey local (6380) e Redis (6382)
pnpm dev # web em :5173, api em :3001
Para conectar ao Redis em vez da Valkey, defina DB_PORT=6382 no .env.
pnpm dev:api # somente API
pnpm dev:web # somente frontend
pnpm docker:dev:down # parar bancos de dados locais
pnpm build # build de produção
pnpm test # testes de API
Builds de imagem Docker:
pnpm docker:build # build local
pnpm docker:publish # build multi-arquitetura & push (requer buildx)
apps/api/src/apps/web/src/api/packages/shared/src/types/anydocs/ é licenciado sob CC BY-SA 4.0.proprietary/ é coberto por uma licença comercial (consulte proprietary/LICENSE). Esses recursos são gratuitos durante o acesso antecipado.| Interface | Detalhes |
|---|
| Web UI | http://localhost:3001 |
| Servidor MCP | npx @betterdb/mcp (stdio) — crie um token em Configurações → MCP Tokens |
| Prometheus | http://localhost:3001/api/prometheus/metrics |
| API REST (OpenAPI) | http://localhost:3001/docs |
| Verificação de saúde | http://localhost:3001/api/health |
| Variável | Obrigatória | Padrão | Descrição |
|---|
DB_HOST | Sim | localhost | Host Valkey/Redis a monitorar |
DB_PORT | Não | 6379 | Porta Valkey/Redis |
DB_PASSWORD | Não | - | Senha Valkey/Redis |
DB_USERNAME | Não | default | Nome de usuário ACL Valkey/Redis |
DB_TYPE | Não | auto | Tipo de banco de dados: auto, valkey ou redis |
STORAGE_TYPE | Não | memory | Backend de armazenamento: memory ou postgres |
STORAGE_URL | Condicional | - | URL de conexão PostgreSQL (obrigatória se STORAGE_TYPE=postgres) |
PORT | Não | 3001 | Porta HTTP do aplicativo |
NODE_ENV | Não | production | Ambiente Node |
ANOMALY_DETECTION_ENABLED | Não | true | Habilita a detecção de anomalias |
ANOMALY_PROMETHEUS_INTERVAL_MS | Não | 30000 | Intervalo de atualização do resumo Prometheus (ms) |
BETTERDB_LICENSE_KEY | Não | - | Chave de licença online (Pro/Enterprise), validada pela rede |
BETTERDB_OFFLINE_LICENSE_FILE | Não | - | Caminho para uma licença offline assinada .jwt para hosts air-gapped (veja abaixo) |
BETTERDB_OFFLINE_LICENSE | Não | - | Token de licença offline como uma string JWT inline |
BETTERDB_DATA_DIR | Não | /app/data | Diretório para o estado de licença persistido (monte um volume gravável) |
BETTERDB_TELEMETRY | Não | true | Defina false para desabilitar a telemetria anônima |
| Backend | Caso de uso | Observações |
|---|
memory | Testes, ambientes efêmeros | Padrão no Docker; todos os dados são perdidos na reinicialização |
postgres | Produção | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
sqlite | Desenvolvimento local / CLI | Não incluído nas imagens Docker de produção; STORAGE_SQLITE_FILEPATH opcional |
| Pacote | Linguagem | Registry |
|---|
@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 | Harness de replay para benchmarking de caches semânticos |