
monitor v0.39.0
Valkey और Redis डेटाबेस के लिए रीयल-टाइम मॉनिटरिंग और slowlog विश्लेषण, जिसमें विसंगति पहचान, ACL ऑडिटिंग और Prometheus मेट्रिक्स निर्यात शामिल है।
BetterDB Monitor
वह मॉनिटरिंग परत जिसका Valkey हकदार है।
BetterDB उसे संग्रहीत करता है जिसे Valkey फेंक देता है - slowlog, कमांड पैटर्न, क्लाइंट गतिविधि, विसंगति संकेत - ताकि आप डीबग कर सकें कि रात 3 बजे क्या हुआ, न कि केवल यह कि अभी क्या हो रहा है। Valkey 8.x के लिए निर्मित, COMMANDLOG, CLUSTER SLOT-STATS और प्रति-थ्रेड I/O मेट्रिक्स के मूल समर्थन के साथ। बाकी सबके लिए Redis 6+ संगत।
वेबसाइट | Docker Hub | npm | दस्तावेज़ीकरण | ब्लॉग
BetterDB को BetterDB Inc. द्वारा बनाया गया है, जो OCV Open Charter के तहत काम करने वाली एक सार्वजनिक लाभ कंपनी है।

त्वरित प्रारंभ (Docker)
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 AI Helper के डिपेंडेंसी के बिना |
X.Y.Z | प्रयोगात्मक AI Helper जोड़ता है (अपना खुद का Ollama लाएँ; AI_ENABLED के माध्यम से डिफ़ॉल्ट रूप से अक्षम) |
पर्सिस्टेंट स्टोरेज, कस्टम पोर्ट, लाइसेंसिंग और एयर-गैप्ड सेटअप के लिए Docker प्रोडक्शन डिप्लॉयमेंट देखें।
त्वरित प्रारंभ (CLI)
Docker के बिना BetterDB Monitor चलाएँ:
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 भी चलाएँ।
आपको क्या मिलता है
सब कुछ देखें, सब कुछ रखें
- ऐतिहासिक विश्लेषण (Historical analytics) - किसी भी समय सीमा में slowlog, कमांड पैटर्न, क्लाइंट गतिविधि और विलंबता को क्वेरी करें। वह डेटा जो लॉग रोटेशन के बाद गायब हो जाता था।
- COMMANDLOG समर्थन - केवल Valkey 8.1+ पर उपलब्ध। बड़े अनुरोध और बड़े उत्तर, न केवल धीमे वाले।
- MONITOR कैप्चर सत्र - माँग पर वास्तविक ट्रैफ़िक रिकॉर्ड करें: लाइव टेल, फ़िल्टर, रीप्ले, JSON/CSV में निर्यात, और कनेक्शन इतिहास के साथ क्रॉस-रेफ़रेंस।
- हॉट की ट्रैकिंग - एक्सेस आवृत्ति के अनुसार शीर्ष कुंजियाँ, समय के साथ रैंक परिवर्तन के साथ। Key Analytics (Pro, प्रारंभिक एक्सेस में निःशुल्क) लाइव सैंपलिंग से प्रकार, TTL और आकार वितरण जोड़ता है।
- क्लस्टर दृश्यता - टोपोलॉजी ग्राफ़, SLOT-STATS हीटमैप, प्रति-स्लॉट CPU और कुंजी वितरण।
- CPU एवं I/O थ्रेड मेट्रिक्स - प्रति-थ्रेड दृश्यता जो कोई Redis टूल प्रदान नहीं कर सकता।
- क्लाइंट विश्लेषण - देखें कि कौन सी सेवा किस चीज़ के लिए ज़िम्मेदार है, क्लाइंट नाम और पैटर्न के आधार पर।
- ACL ऑडिट ट्रेल - ट्रैक करें कि किसने क्या एक्सेस किया, अनुपालन और घटना-पश्चात डीबगिंग के लिए संग्रहीत।
समझें और कार्रवाई करें
- विसंगति का पता लगाना (Anomaly detection) (Pro, प्रारंभिक एक्सेस में निःशुल्क) - सहसंबंधित घटनाओं और सरल-अंग्रेज़ी निदान के साथ स्वचालित बेसलाइन सीखना। 20+ डिटेक्टर, कोई मैन्युअल थ्रेशोल्ड नहीं।
- क्षमता पूर्वानुमान - मेमोरी, ops/sec, CPU और फ्रैग्मेंटेशन के लिए अनुमानित time-to-ceiling।
- वेबहुक - रीट्राइज़ और पूर्ण डिलीवरी लॉग के साथ HMAC-हस्ताक्षरित अलर्ट डिलीवरी।
- लाइव माइग्रेशन - तीन-चरणीय विश्लेषण, निष्पादन और सत्यापन वर्कफ़्लो के साथ Redis और Valkey के बीच स्थानांतरण।
AI युग के लिए निर्मित
- वेक्टर खोज अवलोकनीयता - FT.SEARCH ops/sec और विलंबता, valkey-search और RediSearch के लिए प्रति-इंडेक्स स्वास्थ्य के साथ। docs/vector-ai देखें।
- इन्फ़रेंस विलंबता - प्रति इंडेक्स p50/p95/p99, SLA उल्लंघन अलर्ट के साथ (Pro, प्रारंभिक एक्सेस में निःशुल्क)।
- सिमेंटिक कैश इंटेलिजेंस (Pro, प्रारंभिक एक्सेस में निःशुल्क) - हिट-रेट स्वास्थ्य, समानता-सीमा अनुशंसाएँ, और स्वीकृत/अस्वीकृत प्रस्ताव वर्कफ़्लो। एजेंट मेमोरी अवलोकनीयता शामिल।
- AI ट्रेसेस - आपके AI एप्लिकेशन से OTLP स्पैन वॉटरफॉल, प्रत्येक अनुरोध के नीचे लाइव Valkey स्थिति के साथ सहसंबद्ध।
हर चीज़ से जुड़ता है
- MCP सर्वर -
@betterdb/mcpके माध्यम से Claude Code, Cursor या किसी भी MCP क्लाइंट के लिए 60 टूल। - Prometheus एंडपॉइंट - 100+
betterdb_*मेट्रिक्स। docs/prometheus-metrics.md देखें। - OpenTelemetry - मेट्रिक्स और इवेंट को किसी भी OTLP बैकएंड पर मिरर करें।
- REST API - UI में सब कुछ एक API कॉल है, जिसे OpenAPI के माध्यम से प्रलेखित किया गया है।
अपने डेटा तक अपने तरीके से पहुँचें
| इंटरफ़ेस | विवरण |
|---|---|
| वेब UI | http://localhost:3001 |
| MCP सर्वर | npx @betterdb/mcp (stdio) - सेटिंग्स → MCP टोकन के अंतर्गत एक टोकन बनाएँ |
| Prometheus | http://localhost:3001/api/prometheus/metrics |
| REST API (OpenAPI) | http://localhost:3001/docs |
| हेल्थ चेक | http://localhost:3001/api/health |
नोट: प्रोडक्शन बिल्ड (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 क्लाइंट पर एक एकीकृत एडेप्टर का उपयोग करता है और INFO प्रतिक्रिया से Valkey बनाम Redis को स्वतः पहचानता है (DB_TYPE=auto)। COMMANDLOG और SLOT-STATS जैसी क्षमताएँ प्रति-संस्करण पहचानी जाती हैं, और जब कोई सुविधा उपलब्ध नहीं होती है तो UI आसानी से डिग्रेड हो जाता है।
प्रबंधित सेवाएँ भी समर्थित हैं - AWS ElastiCache, MemoryDB, Redis Cloud और Upstash के लिए गाइड docs/providers में हैं, और @betterdb/agent आउटबाउंड WebSocket के माध्यम से केवल-VPC इंस्टेंस तक पहुँचता है।
Docker प्रोडक्शन डिप्लॉयमेंट
Docker इमेज में मॉनिटरिंग एप्लिकेशन (बैकएंड + फ्रंटएंड) शामिल है। इसके लिए आवश्यक है:
- निगरानी हेतु एक Valkey/Redis इंस्टेंस
- डेटा पर्सिस्टेंस के लिए एक PostgreSQL इंस्टेंस (या मेमोरी स्टोरेज का उपयोग करें)
PostgreSQL स्टोरेज के साथ चलाएँ
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
होस्ट नेटवर्क के साथ चलाएँ (localhost सेवाओं तक पहुँच)
यदि आपका 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
पर्यावरण चर
| चर | आवश्यक | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
DB_HOST | हाँ | localhost | निगरानी हेतु Valkey/Redis होस्ट |
DB_PORT | नहीं | 6379 | Valkey/Redis पोर्ट |
DB_PASSWORD | नहीं | - | Valkey/Redis पासवर्ड |
DB_USERNAME | नहीं | default | Valkey/Redis ACL उपयोगकर्ता नाम |
DB_TYPE | नहीं | auto | डेटाबेस प्रकार: auto, valkey, या redis |
STORAGE_TYPE | नहीं | memory | स्टोरेज बैकएंड: memory या postgres |
STORAGE_URL | सशर्त | - | PostgreSQL कनेक्शन URL (STORAGE_TYPE=postgres होने पर आवश्यक) |
PORT | नहीं | 3001 | एप्लिकेशन HTTP पोर्ट |
NODE_ENV | नहीं | production | Node पर्यावरण |
ANOMALY_DETECTION_ENABLED | नहीं | true | विसंगति का पता लगाना सक्षम करें |
ANOMALY_PROMETHEUS_INTERVAL_MS | नहीं | 30000 | Prometheus सारांश अद्यतन अंतराल (ms) |
BETTERDB_LICENSE_KEY | नहीं | - | ऑनलाइन लाइसेंस कुंजी (Pro/Enterprise), नेटवर्क पर सत्यापित |
BETTERDB_OFFLINE_LICENSE_FILE | नहीं | - | एयर-गैप्ड होस्ट के लिए हस्ताक्षरित ऑफ़लाइन लाइसेंस .jwt का पथ (नीचे देखें) |
BETTERDB_OFFLINE_LICENSE | नहीं | - | इनलाइन JWT स्ट्रिंग के रूप में ऑफ़लाइन लाइसेंस टोकन |
BETTERDB_DATA_DIR | नहीं | /app/data | संग्रहीत लाइसेंस स्थिति के लिए निर्देशिका (एक लिखने-योग्य वॉल्यूम माउंट करें) |
BETTERDB_TELEMETRY | नहीं | true | अज्ञात टेलीमेट्री अक्षम करने के लिए false सेट करें |
AI, OTLP एक्सपोर्ट, वेबहुक ट्यूनिंग और हेल्थ-गेट थ्रेशोल्ड सहित पूर्ण संदर्भ: docs/configuration.md।
लाइसेंसिंग और एयर-गैप्ड समर्थन
BetterDB Monitor Pro/Enterprise सुविधाओं को दो तरीकों में से एक में अनलॉक करता है, यह इस पर निर्भर करता है कि होस्ट के पास इंटरनेट एक्सेस है या नहीं:
- ऑनलाइन लाइसेंस कुंजी -
BETTERDB_LICENSE_KEYसेट करें। मॉनिटर इसेbetterdb.comके विरुद्ध सत्यापित करता है और स्थानीय रूप से सत्यापित हस्ताक्षरित टोकन कैश करता है, ताकि आपका टियर छोटी आउटेज और रीस्टार्ट के दौरान काम करता रहे। - ऑफ़लाइन / एयर-गैप्ड लाइसेंस टोकन - उन होस्ट के लिए जिनके पास बिल्कुल भी इंटरनेट एक्सेस नहीं है (नीचे देखें)।
एयर-गैप्ड लाइसेंसिंग कैसे काम करती है
हर अधिकार एक हस्ताक्षरित RS256 JWT है। मॉनिटर इसे इमेज में एम्बेडेड सार्वजनिक कुंजियों के विरुद्ध स्थानीय रूप से सत्यापित करता है - किसी टोकन पर भरोसा करने के लिए उसे कभी लाइसेंस सर्वर तक नहीं पहुँचना पड़ता। इस प्रकार एक एयर-गैप्ड होस्ट शून्य कनेक्टिविटी के साथ भुगतान किए गए टियर चला सकता है:
- किसी इंटरनेट-कनेक्टेड मशीन पर, betterdb.com/account/licenses पर साइन इन करें और अपना ऑफ़लाइन लाइसेंस टोकन डाउनलोड करें (
.jwt, Pro/Enterprise)। इसमें कोई गोपनीय जानकारी नहीं होती और इसे छेड़ा नहीं जा सकता - कोई भी संपादन हस्ताक्षर को तोड़ देता है। - इसे एयर-गैप्ड होस्ट पर अपनी पसंद के किसी भी तरीके से स्थानांतरित करें (USB, कॉन्फ़िगरेशन प्रबंधन, Docker/Kubernetes सीक्रेट माउंट)।
- इसे
BETTERDB_OFFLINE_LICENSE_FILE(पथ),BETTERDB_OFFLINE_LICENSE(इनलाइन स्ट्रिंग) के माध्यम से प्रदान करें, या UI में सेटिंग्स → लाइसेंस → "एयर-गैप्ड वातावरण? ऑफ़लाइन लाइसेंस सक्रिय करें।" के अंतर्गत पेस्ट करें।
जब एक ऑफ़लाइन टोकन कॉन्फ़िगर किया जाता है और कोई 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के साथ विफल हो जाता है।
पूर्ण प्रवाह, सत्यापन प्राथमिकता और कुंजी-रोटेशन रनबुक के लिए ऑफ़लाइन एवं एयर-गैप्ड लाइसेंस और कॉन्फ़िगरेशन संदर्भ देखें।
Docker इमेज विवरण
- बेस इमेज:
node:20-alpine - संपीड़ित आकार: ~360MB (
latest/-no-ai) / ~640MB (प्रयोगात्मक AI Helper की स्थानीय-LLM डिपेंडेंसी वाली संस्करण इमेज) - प्लेटफ़ॉर्म:
linux/amd64,linux/arm64 - इसमें शामिल: बैकएंड API + फ्रंटएंड स्थिर फ़ाइलें (Fastify द्वारा परोसा गया)
- बहिष्कृत: SQLite समर्थन (PostgreSQL या Memory स्टोरेज का उपयोग करें)
कंटेनर संचालन
docker logs -f betterdb-monitor # follow logs
docker stop betterdb-monitor # stop
docker rm betterdb-monitor # remove
स्टोरेज बैकएंड
BetterDB Monitor ऑडिट ट्रेल, विश्लेषण, कैप्चर और विसंगति डेटा को तीन बैकएंड में से एक में संग्रहीत करता है:
| बैकएंड | उपयोग केस | नोट्स |
|---|---|---|
memory | परीक्षण, अस्थायी वातावरण | Docker में डिफ़ॉल्ट; रीस्टार्ट पर सभी डेटा खो जाता है |
postgres | प्रोडक्शन | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
sqlite | स्थानीय विकास / CLI | Docker प्रोडक्शन इमेज में शामिल नहीं; STORAGE_SQLITE_FILEPATH वैकल्पिक |
Prometheus मेट्रिक्स
मेट्रिक्स Prometheus टेक्स्ट प्रारूप में GET /api/prometheus/metrics पर उजागर होते हैं: 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/ देखें।
| पैकेज | भाषा | रजिस्ट्री |
|---|---|---|
@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 | सिमेंटिक कैश बेंचमार्क करने के लिए रीप्ले हार्नेस |
टेक स्टैक
- बैकएंड: NestJS जिसमें Fastify एडेप्टर है, Valkey/Redis कनेक्शन के लिए
iovalkey, TypeScript सख्त मोड। पोर्ट 3001। - फ्रंटएंड: React + TypeScript, Vite, TailwindCSS, Recharts। डेव सर्वर पोर्ट 5173 पर।
- मोनोरेपो: pnpm workspaces + Turborepo।
स्थानीय सेटअप
पूर्वापेक्षाएँ: 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
Valkey के बजाय Redis से कनेक्ट करने के लिए, .env में DB_PORT=6382 सेट करें।
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/में संबंधित API कॉल जोड़ेंpackages/shared/src/types/में साझा प्रकार जोड़ें
कोड शैली
- TypeScript सख्त मोड, स्पष्ट रिटर्न प्रकार, कोई
anyनहीं - ESLint + Prettier कॉन्फ़िगर किया गया
लाइसेंस
docs/के अंतर्गत सामग्री CC BY-SA 4.0 के तहत लाइसेंस प्राप्त है।proprietary/के अंतर्गत सामग्री एक वाणिज्यिक लाइसेंस द्वारा कवर की गई है (proprietary/LICENSEदेखें)। ये सुविधाएँ प्रारंभिक एक्सेस के दौरान निःशुल्क हैं।- बाकी सब कुछ MIT है।