Persistent observability & monitoring for Valkey & Redis - keeps what Valkey throws away. AI, MCP.
10K+
By BetterDB - The monitoring layer that Valkey deserves.
BetterDB persists what Valkey throws away - slowlogs, command patterns, client activity, anomaly signals - so you can debug what happened at 3am, not just what's happening now.
Built for Valkey 8.x with native support for COMMANDLOG, CLUSTER SLOT-STATS, and per-thread I/O metrics. Redis 6.0+ compatible for everything else. And because Valkey is fast becoming the backbone of AI infrastructure, BetterDB now watches that layer too: vector indexes, semantic caches, agent memory, and inference latency - correlated with the live database state underneath them.
Core monitoring is free forever (MIT). Pro and Enterprise add advanced detection, automation, and compliance - and are free during early access.
If you find BetterDB useful, star our repository.
docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
Point your browser to http://localhost:3001. That's it.
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
Standalone or cluster - Valkey vs Redis is auto-detected, and the UI adapts to what your server supports. Add more instances at runtime under Settings → Connections (multi-instance monitoring is Pro, free in early access).
Persist your monitoring data across restarts for full historical analytics, anomaly baselines, MONITOR captures, and audit trail access.
docker run -d \
--name betterdb \
-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@localhost:5432/betterdb \
betterdb/monitor:latest
| Tag | What it is |
|---|---|
latest, X.Y.Z | Full image, including the optional AI Helper - a local-LLM chat assistant with RAG over the Valkey docs (bring your own Ollama; disabled by default via AI_ENABLED=false) |
latest-no-ai, X.Y.Z-no-ai | Slim build without the local-LLM dependencies. Every monitoring feature is included - all AI-workload observability (vector search, caches, traces) works here too. Pick this for the smaller pull if you don't need the built-in assistant. |
All images are multi-arch: linux/amd64 and linux/arm64.
instance.down and latency.spike to acl.violation.betterdb_* metrics, straight into your existing stack.| Interface | Details |
|---|---|
| Web UI | http://localhost:3001 |
| MCP server | npx @betterdb/mcp (stdio) - create a token under Settings → MCP Tokens |
| Prometheus | http://localhost:3001/api/prometheus/metrics |
| REST API (OpenAPI) | http://localhost:3001/docs |
| OTLP export | set OTEL_EXPORTER_OTLP_ENDPOINT |
| Health check | http://localhost:3001/api/health |
| Variable | Purpose | Default |
|---|---|---|
DB_HOST | Valkey/Redis host | localhost |
DB_PORT | Valkey/Redis port | 6379 |
DB_USERNAME | ACL username | default |
DB_PASSWORD | Authentication password | None |
DB_TYPE | Database type: auto, valkey, or redis | auto |
| Variable | Purpose | Default |
|---|---|---|
STORAGE_TYPE | memory or postgres | memory |
STORAGE_URL | PostgreSQL connection string | None |
Note: Docker production images do not include SQLite - that backend is for local development via the CLI.
| Variable | Purpose | Default |
|---|---|---|
BETTERDB_LICENSE_KEY | Online license key (Pro/Enterprise - Community needs none) | None |
BETTERDB_OFFLINE_LICENSE_FILE | Path to a signed offline license token for air-gapped hosts | None |
BETTERDB_OFFLINE_LICENSE | Offline license token as an inline string | None |
BETTERDB_DATA_DIR | Persisted license state - mount a writable volume | /app/data |
BETTERDB_TELEMETRY | Set false to disable anonymous telemetry | true |
Air-gapped? Offline license tokens are signed JWTs verified locally against keys embedded in the image. With an offline token and no online key, the monitor makes zero outbound requests - no license pings, no telemetry, no update checks.
| Variable | Purpose | Default |
|---|---|---|
PORT | HTTP port | 3001 |
NODE_ENV | Node environment | production |
ENCRYPTION_KEY | Encrypts stored connection credentials (16+ chars, recommended) | None |
ANOMALY_DETECTION_ENABLED | Toggle anomaly detection | true |
AUDIT_POLL_INTERVAL_MS | ACL audit polling interval | 60000 |
ANOMALY_POLL_INTERVAL_MS | Anomaly detection polling interval | 1000 |
CLIENT_ANALYTICS_POLL_INTERVAL_MS | Client analytics polling interval | 60000 |
AI_ENABLED | Enable the local-LLM AI Helper (full image only, requires Ollama) | false |
OLLAMA_BASE_URL | Ollama server for the AI Helper | http://localhost:11434 |
Full reference, including OTLP export, webhook tuning, and health-gate thresholds: docs.betterdb.com/configuration.
| Database | Version | Coverage |
|---|---|---|
| Valkey | 8.0+ | Everything, including COMMANDLOG (8.1+) and CLUSTER SLOT-STATS |
| Redis | 6.0+ | Everything except the Valkey-exclusive commands above |
Managed services work too - guides for AWS ElastiCache, MemoryDB, Redis Cloud, and Upstash are in the docs, and @betterdb/agent reaches VPC-only instances over an outbound WebSocket.
Community features are open source under MIT and free forever. Pro and Enterprise features (anomaly detection, key analytics, migration execution, inference SLA alerts, SSO/RBAC, compliance export) are free during early access; they will require a commercial license later - see betterdb.com/pricing.
Content type
Image
Digest
sha256:e9fa35c61…
Size
287.1 MB
Last updated
about 14 hours ago
docker pull betterdb/monitor