
Monitoraggio in tempo reale e analisi degli slowlog per database Valkey e Redis con rilevamento delle anomalie, audit delle ACL ed esportazione delle metriche Prometheus.
Il livello di monitoraggio che Valkey merita.
BetterDB conserva ciò che Valkey scarta - slowlog, pattern di comandi, attività dei client, segnali di anomalie - così puoi eseguire il debug di ciò che è accaduto alle 3 di notte, non solo di ciò che sta accadendo ora. Progettato per Valkey 8.x con supporto nativo per COMMANDLOG, CLUSTER SLOT-STATS e metriche I/O per thread. Compatibile con Redis 6+ per tutto il resto.
Sito web | Docker Hub | npm | Documentazione | Blog
BetterDB è sviluppato da BetterDB Inc., una società a beneficio pubblico che opera secondo l'OCV Open Charter.

docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
Apri il browser all'indirizzo http://localhost:3001. Per monitorare un'istanza specifica:
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
Sono disponibili due varianti di immagine, entrambe multi-arch (linux/amd64, linux/arm64):
| Tag | Descrizione |
|---|---|
latest, X.Y.Z-no-ai | Immagine predefinita - include tutte le funzionalità di monitoraggio, senza le dipendenze per l'AI Helper locale-LLM sperimentale |
X.Y.Z | Aggiunge l'AI Helper sperimentale (porta il tuo Ollama; disattivato per impostazione predefinita tramite AI_ENABLED) |
Vedi Docker Production Deployment per storage persistente, porte personalizzate, licenze e configurazioni air-gapped.
Esegui BetterDB Monitor senza Docker:
npx @betterdb/monitor
Al primo avvio, una procedura guidata interattiva ti accompagna attraverso la connessione al database, il backend di storage (SQLite, PostgreSQL o in-memory) e le impostazioni del server. La configurazione viene salvata in ~/.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
Richiede Node.js >= 20.0.0 e un'istanza Valkey o Redis da monitorare. Per lo storage SQLite, esegui anche npm install -g better-sqlite3.
@betterdb/mcp.betterdb_*. Vedi docs/prometheus-metrics.md.Nota: Nelle build di produzione (Docker, CLI) le route API sono servite con il prefisso
/api. Nello sviluppo locale (pnpm dev) non c'è alcun prefisso - es.http://localhost:3001/health.
| Database | Versione minima | Funzionalità supportate |
|---|---|---|
| Valkey | 8.0+ | Tutte le funzionalità inclusi COMMANDLOG (8.1+) e CLUSTER SLOT-STATS |
| Redis | 6+ | Tutte le funzionalità tranne COMMANDLOG e CLUSTER SLOT-STATS, esclusivi di Valkey |
Il backend utilizza un adapter unificato sul client iovalkey compatibile a livello di protocollo e rileva automaticamente Valkey vs Redis dalla risposta INFO (DB_TYPE=auto). Funzionalità come COMMANDLOG e SLOT-STATS vengono rilevate in base alla versione e l'interfaccia utente si degrada in modo elegante quando una funzionalità non è disponibile.
Anche i servizi gestiti sono supportati - le guide per AWS ElastiCache, MemoryDB, Redis Cloud e Upstash si trovano in docs/providers e @betterdb/agent raggiunge le istanze solo-VPC tramite un WebSocket in uscita.
L'immagine Docker contiene l'applicazione di monitoraggio (backend + frontend). Richiede:
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
Imposta la variabile d'ambiente PORT e fai corrispondere il mapping -p:
docker run -d \
--name betterdb-monitor \
-p 8080:8080 \
-e PORT=8080 \
-e DB_HOST=your-valkey-host \
betterdb/monitor
Se Valkey e PostgreSQL sono in esecuzione sullo stesso 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
Riferimento completo, inclusi AI, esportazione OTLP, regolazione dei webhook e soglie dei health gate: docs/configuration.md.
BetterDB Monitor sblocca le funzionalità Pro/Enterprise in uno dei due modi seguenti, a seconda che l'host abbia accesso a Internet:
BETTERDB_LICENSE_KEY. Il monitor la valida verso betterdb.com e memorizza nella cache un token firmato verificato localmente, così il tuo piano continua a funzionare attraverso brevi interruzioni e riavvii.Ogni diritto è un JWT RS256 firmato. Il monitor lo verifica localmente tramite le chiavi pubbliche incorporate nell'immagine - non deve mai contattare un server di licenza per fidarsi di un token. Quindi un host air-gapped può eseguire i piani a pagamento con zero connettività:
.jwt, Pro/Enterprise). Non contiene segreti e non può essere alterato - qualsiasi modifica rompe la firma.BETTERDB_OFFLINE_LICENSE_FILE (percorso), BETTERDB_OFFLINE_LICENSE (stringa inline) oppure incollalo nell'interfaccia in Impostazioni → Licenza → "Ambiente air-gapped? Attiva una licenza offline."Quando è configurato un token offline e nessuna BETTERDB_LICENSE_KEY è impostata, il monitor effettua zero richieste in uscita - controlli della licenza, telemetria e ping di aggiornamento sono tutti disabilitati. Esegue il piano concesso fino alla scadenza del token (le licenze perpetue vengono riscaricate ogni anno), poi torna alla 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
Verifica con GET /api/license/status → source: offline-token, mode: offline, airGapped: true.
Persistenza: monta un volume scrivibile in
/app/datacosì la licenza offline e il token di grazia per le interruzioni online sopravvivono ai riavvii. Il container viene eseguito come UID 1001, quindi un volume appena creato deve esserechownato a tale utente (mostrato sopra) - altrimenti la persistenza fallisce conEACCES … license.jwt.
Per il flusso completo, la precedenza di verifica e il runbook di rotazione delle chiavi, vedi Licenze offline e air-gapped e il Riferimento di configurazione.
node:20-alpinelatest / -no-ai) / ~640MB (immagine versionata con le dipendenze local-LLM dell'AI Helper sperimentale)linux/amd64, linux/arm64docker logs -f betterdb-monitor # follow logs
docker stop betterdb-monitor # stop
docker rm betterdb-monitor # remove
BetterDB Monitor salva la traccia di audit, le analisi, le catture e i dati sulle anomalie in uno dei tre backend:
Le metriche sono esposte su GET /api/prometheus/metrics nel formato testo di Prometheus: audit ACL, connessioni client, pattern slowlog/commandlog, memoria, throughput, keyspace, replica, statistiche degli slot del cluster e metriche di runtime Node.js - tutte con prefisso betterdb_.
scrape_configs:
- job_name: 'betterdb-monitor'
metrics_path: '/api/prometheus/metrics'
static_configs:
- targets: ['your-monitor-host:3001']
Riferimento completo delle metriche: docs/prometheus-metrics.md e 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
Questo monorepo include diversi pacchetti standalone. Vedi packages/ per l'elenco completo.
iovalkey per le connessioni Valkey/Redis, TypeScript in modalità strict. Porta 3001.Prerequisiti: 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
Per connettersi a Redis invece che a Valkey, imposta DB_PORT=6382 in .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
Build delle immagini 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/ sono concessi in licenza sotto CC BY-SA 4.0.proprietary/ sono coperti da una licenza commerciale (vedi proprietary/LICENSE). Queste funzionalità sono gratuite durante l'early access.| Interfaccia | Dettagli |
|---|
| Web UI | http://localhost:3001 |
| Server MCP | npx @betterdb/mcp (stdio) - crea un token in Impostazioni → Token MCP |
| Prometheus | http://localhost:3001/api/prometheus/metrics |
| REST API (OpenAPI) | http://localhost:3001/docs |
| Health check | http://localhost:3001/api/health |
| Variabile | Richiesto | Predefinito | Descrizione |
|---|
DB_HOST | Sì | localhost | Host Valkey/Redis da monitorare |
DB_PORT | No | 6379 | Porta Valkey/Redis |
DB_PASSWORD | No | - | Password Valkey/Redis |
DB_USERNAME | No | default | Nome utente ACL Valkey/Redis |
DB_TYPE | No | auto | Tipo di database: auto, valkey o redis |
STORAGE_TYPE | No | memory | Backend di storage: memory o postgres |
STORAGE_URL | Condizionale | - | URL di connessione PostgreSQL (richiesto se STORAGE_TYPE=postgres) |
PORT | No | 3001 | Porta HTTP dell'applicazione |
NODE_ENV | No | production | Ambiente Node |
ANOMALY_DETECTION_ENABLED | No | true | Abilita il rilevamento delle anomalie |
ANOMALY_PROMETHEUS_INTERVAL_MS | No | 30000 | Intervallo di aggiornamento del riepilogo Prometheus (ms) |
BETTERDB_LICENSE_KEY | No | - | Chiave di licenza online (Pro/Enterprise), validata tramite rete |
BETTERDB_OFFLINE_LICENSE_FILE | No | - | Percorso di una licenza offline firmata .jwt per host air-gapped (vedi sotto) |
BETTERDB_OFFLINE_LICENSE | No | - | Token di licenza offline come stringa JWT inline |
BETTERDB_DATA_DIR | No | /app/data | Directory per lo stato di licenza persistito (monta un volume scrivibile) |
BETTERDB_TELEMETRY | No | true | Imposta false per disabilitare la telemetria anonima |
| Backend | Caso d'uso | Note |
|---|
memory | Test, ambienti effimeri | Predefinito in Docker; tutti i dati persi al riavvio |
postgres | Produzione | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
sqlite | Sviluppo locale / CLI | Non incluso nelle immagini Docker di produzione; STORAGE_SQLITE_FILEPATH opzionale |
| Pacchetto | Linguaggio | 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 di replay per il benchmarking delle cache semantiche |