
monitor v0.41.0
Valkey और Redis डेटाबेस के लिए रीयल-टाइम मॉनिटरिंग और slowlog विश्लेषण, जिसमें विसंगति पहचान, ACL ऑडिटिंग और Prometheus मेट्रिक्स निर्यात शामिल है।
BetterDB Monitor
वह मॉनिटरिंग लेयर जिसका Valkey हक़दार है।
BetterDB उसे सहेजता है जिसे Valkey फेंक देता है - slowlogs, command patterns, client activity, anomaly signals - ताकि आप डीबग कर सकें कि रात 3 बजे क्या हुआ था, न कि केवल यह कि अभी क्या हो रहा है। Valkey 8.x के लिए बनाया गया, जिसमें COMMANDLOG, CLUSTER SLOT-STATS, और per-thread I/O metrics के लिए नेटिव सपोर्ट है। बाकी सब कुछ के लिए Redis 6+ संगत।
Website | Docker Hub | npm | Documentation | Blog
BetterDB को BetterDB Inc. द्वारा बनाया गया है, जो एक public benefit company है और OCV Open Charter के अंतर्गत संचालित होती है।

Quick Start (Docker)```bash
docker run -d --name betterdb -p 3001:3001 betterdb/monitor:latest
अपने ब्राउज़र को `http://localhost:3001` पर इंगित करें। किसी विशिष्ट इंस्टेंस की निगरानी करने के लिए:```bash
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
अपनी होस्ट मशीन पर डेटाबेस से कनेक्ट कर रहे हैं? कंटेनर के अंदर
localhostस्वयं कंटेनर है, आपका होस्ट नहीं — इसलिए डेटाबेस होस्ट के रूप मेंhost.docker.internalका उपयोग करें। Docker Desktop (macOS/Windows) पर यह सीधे काम करता है; Linux परdocker runकमांड में--add-host=host.docker.internal:host-gatewayजोड़ें ताकि यह नाम रिज़ॉल्व हो सके। डैशबोर्ड का वन-क्लिक "connect to local instance" बटन इसे स्वतः पहचान लेता है और आपके लिए सही होस्ट पहले से भर देता है।
दो इमेज वेरिएंट प्रकाशित किए गए हैं, दोनों मल्टी-आर्क (linux/amd64, linux/arm64):
| टैग | यह क्या है |
|---|---|
latest, X.Y.Z-no-ai | डिफ़ॉल्ट इमेज - हर मॉनिटरिंग सुविधा शामिल है, प्रयोगात्मक लोकल-LLM AI Helper के डिपेंडेंसीज़ के बिना |
X.Y.Z | प्रयोगात्मक AI Helper जोड़ता है (अपना Ollama लाएँ; AI_ENABLED के माध्यम से डिफ़ॉल्ट रूप से अक्षम) |
पर्सिस्टेंट स्टोरेज, कस्टम पोर्ट, लाइसेंसिंग, और एयर-गैप्ड सेटअप के लिए Docker Production Deployment देखें।
Quick Start (Kubernetes / Helm)```bash
helm repo add betterdb https://docs.betterdb.com/charts
helm repo update
helm install betterdb-monitor betterdb/betterdb-monitor
--namespace betterdb --create-namespace
--set db.host=my-valkey.default.svc.cluster.local
--set db.password=yourpassword
फिर `kubectl port-forward -n betterdb svc/betterdb-monitor 3001:3001` और `http://localhost:3001` खोलें, या चार्ट का ingress सक्षम करें। PostgreSQL-आधारित history, bring-your-own Secrets, और air-gapped licensing सभी [Kubernetes guide](https://docs.betterdb.com/kubernetes) और [chart README](https://github.com/betterdb-inc/monitor/blob/master/charts/betterdb-monitor/README.md) में शामिल हैं।
## Quick Start (CLI)
Docker के बिना BetterDB Monitor चलाएँ:```bash
npx @betterdb/monitor
पहले रन पर, एक इंटरैक्टिव सेटअप विज़ार्ड आपको डेटाबेस कनेक्शन, स्टोरेज बैकएंड (SQLite, PostgreSQL, या in-memory), और सर्वर सेटिंग्स के माध्यम से मार्गदर्शन करता है। कॉन्फ़िगरेशन ~/.betterdb/config.json में सहेजा जाता है।```bash
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` भी आवश्यक है।
## आपको क्या मिलता है
### सब कुछ देखें, सब कुछ रखें
- **ऐतिहासिक एनालिटिक्स** - किसी भी समय सीमा में slowlogs, कमांड पैटर्न, क्लाइंट गतिविधि और लेटेंसी क्वेरी करें। वह डेटा जो पहले लॉग रोटेशन के बाद गायब हो जाता था।
- **COMMANDLOG समर्थन** - Valkey 8.1+ विशेष। बड़े अनुरोध और बड़े उत्तर, केवल धीमे वाले ही नहीं।
- **MONITOR कैप्चर सेशन** - मांग पर वास्तविक ट्रैफ़िक रिकॉर्ड करें: लाइव टेल, फ़िल्टर, रीप्ले, JSON/CSV में एक्सपोर्ट, और कनेक्शन इतिहास के साथ क्रॉस-रेफ़रेंस करें।
- **हॉट की ट्रैकिंग** - समय के साथ रैंक मूवमेंट के साथ एक्सेस फ़्रीक्वेंसी के अनुसार शीर्ष कीज़। Key Analytics (Pro, अर्ली एक्सेस में मुफ़्त) लाइव सैंपलिंग से टाइप, TTL, और साइज़ डिस्ट्रिब्यूशन जोड़ता है।
- **क्लस्टर विज़िबिलिटी** - टोपोलॉजी ग्राफ़, SLOT-STATS हीटमैप, प्रति-स्लॉट CPU और की डिस्ट्रिब्यूशन।
- **CPU और I/O थ्रेड मेट्रिक्स** - प्रति-थ्रेड विज़िबिलिटी जो कोई भी Redis टूल प्रदान नहीं कर सकता।
- **क्लाइंट एनालिटिक्स** - देखें कि कौन सी सेवा किसके लिए ज़िम्मेदार है, क्लाइंट नाम और पैटर्न द्वारा एट्रिब्यूटेड।
- **ACL ऑडिट ट्रेल** - ट्रैक करें कि किसने क्या एक्सेस किया, अनुपालन और पोस्ट-इंसिडेंट डिबगिंग के लिए सुरक्षित।
### समझें और कार्य करें
- **एनोमली डिटेक्शन** (Pro, अर्ली एक्सेस में मुफ़्त) - सहसंबंधित इवेंट्स और सरल-भाषा निदान के साथ स्वचालित बेसलाइन लर्निंग। 20+ डिटेक्टर, कोई मैनुअल थ्रेशोल्ड नहीं।
- **क्षमता पूर्वानुमान** - मेमोरी, ops/sec, CPU, और फ्रैगमेंटेशन के लिए अनुमानित समय-से-सीमा।
- **वेबहुक** - रिट्री और पूर्ण डिलीवरी लॉग के साथ HMAC-हस्ताक्षरित अलर्ट डिलीवरी।
- **लाइव माइग्रेशन** - तीन-चरणीय विश्लेषण, निष्पादन, और सत्यापन वर्कफ़्लो के साथ Redis और Valkey के बीच स्थानांतरित करें।
### AI युग के लिए निर्मित
- **वेक्टर सर्च ऑब्ज़र्वेबिलिटी** - [valkey-search](https://github.com/valkey-io/valkey-search) और RediSearch के लिए प्रति-इंडेक्स हेल्थ के साथ FT.SEARCH ops/sec और लेटेंसी। देखें [docs/vector-ai](https://github.com/betterdb-inc/monitor/blob/master/docs/vector-ai/README.md)।
- **इन्फरेंस लेटेंसी** - प्रति इंडेक्स p50/p95/p99, SLA उल्लंघन अलर्ट के साथ (Pro, अर्ली एक्सेस में मुफ़्त)।
- **सेमांटिक कैश इंटेलिजेंस** (Pro, अर्ली एक्सेस में मुफ़्त) - हिट-रेट हेल्थ, सिमिलैरिटी-थ्रेशोल्ड सिफ़ारिशें, और एक approve/reject प्रस्ताव वर्कफ़्लो। एजेंट मेमोरी ऑब्ज़र्वेबिलिटी शामिल।
- **AI ट्रेस** - आपके AI एप्लिकेशन से OTLP स्पैन वॉटरफ़ॉल, प्रत्येक अनुरोध के नीचे लाइव Valkey स्थिति के साथ सहसंबंधित। देखें [docs/opentelemetry.md](https://github.com/betterdb-inc/monitor/blob/master/docs/opentelemetry.md)।
### हर चीज़ में प्लग होता है
- **MCP सर्वर** - [`@betterdb/mcp`](https://github.com/betterdb-inc/monitor/blob/master/packages/mcp) के माध्यम से Claude Code, Cursor, या किसी भी MCP क्लाइंट के लिए 60 टूल।
- **Prometheus एंडपॉइंट** - 100+ `betterdb_*` मेट्रिक्स। देखें [docs/prometheus-metrics.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-metrics.md)।
- **OpenTelemetry** - OTLP ट्रेस इनजेस्ट करें, और किसी भी OTLP बैकएंड में मेट्रिक्स और इवेंट्स मिरर करें। देखें [docs/opentelemetry.md](https://github.com/betterdb-inc/monitor/blob/master/docs/opentelemetry.md)।
- **REST API** - UI में सब कुछ एक API कॉल है, OpenAPI के माध्यम से प्रलेखित।
## अपने डेटा तक अपने तरीके से पहुँचें
| इंटरफ़ेस | विवरण |
|-----------|---------|
| Web UI | `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` |
> **नोट**: प्रोडक्शन बिल्ड्स (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` प्रतिक्रिया (`DB_TYPE=auto`) से Valkey बनाम Redis का स्वतः पता लगाता है। COMMANDLOG और SLOT-STATS जैसी क्षमताएँ प्रति संस्करण का पता लगाई जाती हैं, और जब कोई सुविधा उपलब्ध नहीं होती तो UI सुचारू रूप से डिग्रेड हो जाता है।
प्रबंधित सेवाएँ भी समर्थित हैं - AWS ElastiCache, MemoryDB, Redis Cloud, और Upstash के लिए गाइड [docs/providers](https://github.com/betterdb-inc/monitor/blob/master/docs/providers) में हैं, और [`@betterdb/agent`](https://github.com/betterdb-inc/monitor/blob/master/packages/agent) आउटबाउंड WebSocket के माध्यम से केवल-VPC इंस्टेंस तक पहुँचता है।
## Docker प्रोडक्शन डिप्लॉयमेंट
Docker इमेज में मॉनिटरिंग एप्लिकेशन (बैकएंड + फ्रंटएंड) शामिल है। इसके लिए आवश्यक है:
1. निगरानी के लिए एक Valkey/Redis इंस्टेंस
2. डेटा पर्सिस्टेंस के लिए एक PostgreSQL इंस्टेंस (या मेमोरी स्टोरेज का उपयोग करें)
### PostgreSQL स्टोरेज के साथ चलाएँ```bash
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 environment variable सेट करें और -p मैपिंग का मिलान करें:```bash
docker run -d
--name betterdb-monitor
-p 8080:8080
-e PORT=8080
-e DB_HOST=your-valkey-host
betterdb/monitor
### होस्ट नेटवर्क के साथ चलाएँ (localhost सेवाओं तक पहुँचें)
यदि आपके Valkey और PostgreSQL एक ही होस्ट पर चल रहे हैं:```bash
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 |
DB_TLS | नहीं | false | निगरानी किए जा रहे डेटाबेस से TLS के माध्यम से कनेक्ट करने के लिए true पर सेट करें (Aiven या ElastiCache Serverless जैसे प्रबंधित प्रदाताओं द्वारा आवश्यक) |
STORAGE_TYPE | नहीं | memory | स्टोरेज बैकएंड: memory या postgres |
STORAGE_URL | सशर्त | - | PostgreSQL कनेक्शन URL (STORAGE_TYPE=postgres होने पर आवश्यक) |
STORAGE_SSL_CA | नहीं | - | PostgreSQL सर्वर को सत्यापित करने के लिए उपयोग किए जाने वाले CA प्रमाणपत्र का पथ (या विश्वसनीय HTTPS URL)। अपने स्वयं के CA वाले प्रबंधित प्रदाताओं (जैसे Aiven) के लिए, पूर्ण श्रृंखला + होस्टनाम सत्यापन के लिए यहाँ प्रोजेक्ट CA प्रदान करें। STORAGE_SSL_NO_VERIFY पर प्राथमिकता लेता है |
STORAGE_SSL_NO_VERIFY | नहीं | false | सर्वर प्रमाणपत्र सत्यापित किए बिना TLS के माध्यम से PostgreSQL से कनेक्ट करें (एन्क्रिप्टेड लेकिन प्रमाणित नहीं)। उन प्रबंधित प्रदाताओं के लिए सुविधा जो अपना स्वयं का CA प्रस्तुत करते हैं और sslmode=require को बाध्य करते हैं जब आप STORAGE_SSL_CA प्रदान नहीं कर सकते। उत्पादन में STORAGE_SSL_CA को प्राथमिकता दें |
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 | स्थायी लाइसेंस स्थिति के लिए निर्देशिका (एक लिखने योग्य वॉल्यूम माउंट करें) |
ENCRYPTION_KEY | नहीं | - | संग्रहीत कनेक्शन पासवर्ड और SSH टनल रहस्यों को आराम की स्थिति में लिफाफा-एन्क्रिप्ट करने के लिए उपयोग की जाने वाली कुंजी (न्यूनतम 16 वर्ण)। इसके बिना, रहस्य सादे टेक्स्ट में संग्रहीत होते हैं |
BETTERDB_SSH_KEY_DIR | नहीं | - | वह निर्देशिका जिसमें सर्वर-साइड SSH निजी कुंजियाँ रहनी चाहिए। SSH टनल के लिए "सर्वर फ़ाइल पथ" कुंजी स्रोत को सक्षम करता है; कनेक्शन का कुंजी पथ इसके अंदर हल होना चाहिए। अनसेट करने पर फ़ाइल-आधारित कुंजियाँ अक्षम हो जाती हैं (इनलाइन पेस्ट की गई कुंजियाँ अभी भी काम करती हैं) |
BETTERDB_TELEMETRY | नहीं | true | अनाम टेलीमेट्री अक्षम करने के लिए false पर सेट करें |
पूर्ण संदर्भ, जिसमें AI, वेबहुक ट्यूनिंग, और हेल्थ-गेट थ्रेशोल्ड शामिल हैं: docs/configuration.md। OTLP ट्रेस इनजेस्ट और मेट्रिक्स/इवेंट निर्यात के लिए, docs/opentelemetry.md देखें।
SSH टनल
कनेक्शन सीधे कनेक्ट करने के बजाय SSH बास्टियन/जंप होस्ट के माध्यम से डेटाबेस तक पहुँच सकते हैं — निजी सबनेट में Valkey/Redis, ElastiCache, या MemoryDB के लिए उपयोगी। कनेक्शन जोड़ते समय Connect via SSH tunnel सक्षम करें और SSH होस्ट, पोर्ट, और उपयोगकर्ता नाम प्रदान करें। एकल हॉप समर्थित है।
प्रमाणीकरण या तो पासवर्ड या निजी कुंजी है। निजी कुंजियाँ दो स्रोतों में से एक से आती हैं:
- कुंजी पेस्ट करें (इनलाइन): PEM कुंजी सामग्री कनेक्शन के साथ सबमिट की जाती है। यह आराम की स्थिति में एन्क्रिप्टेड संग्रहीत होती है केवल जब
ENCRYPTION_KEYसेट हो (लिफाफा एन्क्रिप्शन); उस कुंजी के बिना यह सादे टेक्स्ट में संग्रहीत होती है, कनेक्शन पासवर्ड की तरह। हर जगह काम करती है, जिसमें प्रबंधित/क्लाउड परिनियोजन शामिल हैं। - सर्वर फ़ाइल पथ: कुंजी पहले से ही मॉनिटर सर्वर के फ़ाइलसिस्टम पर रहती है और पथ द्वारा संदर्भित होती है। इसके लिए
BETTERDB_SSH_KEY_DIRपर्यावरण चर को अनुमत कुंजियों वाली निर्देशिका पर सेट करना आवश्यक है, और संदर्भित पथ उसके अंदर हल होना चाहिए, ताकि API को कभी भी मनमानी फ़ाइलें पढ़ने के लिए मजबूर न किया जा सके। इस विकल्प को अक्षम करने के लिएBETTERDB_SSH_KEY_DIRको अनसेट छोड़ दें।
वैकल्पिक रूप से कनेक्शन पर SSH सर्वर की होस्ट कुंजी फ़िंगरप्रिंट (SHA256:...) पिन करें; सेट होने पर, टनल को अस्वीकार कर दिया जाता है जब तक सर्वर मेल खाती कुंजी प्रस्तुत न करे, जो बास्टियन पथ पर मैन-इन-द-मिडल हमलों को रोकता है। खाली छोड़ने पर, सर्वर पहचान सत्यापित नहीं होती (एक चेतावनी लॉग की जाती है)।
टनल 127.0.0.1 के माध्यम से डेटाबेस को अग्रेषित करता है; TLS सक्षम होने पर प्रमाणपत्र अभी भी वास्तविक डेटाबेस होस्टनाम के विरुद्ध सत्यापित किया जाता है। ENCRYPTION_KEY सेट करें ताकि SSH पासवर्ड, कुंजी पासफ़्रेज़, और इनलाइन कुंजियाँ आराम की स्थिति में एन्क्रिप्टेड हों।
ज्ञात सीमा — क्लस्टर/Sentinel टोपोलॉजी: केवल आपके द्वारा कॉन्फ़िगर किया गया कनेक्शन टनल किया जाता है। क्लस्टर और Sentinel निगरानी उन नोड्स द्वारा विज्ञापित पतों (CLUSTER NODES / Sentinel) का उपयोग करके अन्य नोड्स तक फैलती है, और वे प्रति-नोड कनेक्शन सीधे बनाए जाते हैं, टनल के माध्यम से नहीं। यदि अन्य नोड्स केवल बास्टियन के माध्यम से पहुँच योग्य हैं (जैसे निजी सबनेट में ElastiCache/MemoryDB), तो प्रति-नोड दृश्य अनुपलब्ध होंगे। सिंगल-नोड/प्राइमरी निगरानी के लिए SSH टनल का उपयोग करें, या मॉनिटर को वहाँ रखें जहाँ यह क्लस्टर नोड्स तक सीधे पहुँच सके।
लाइसेंसिंग और एयर-गैप्ड समर्थन
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 में Settings → License → "Air-gapped environment? Activate an offline license." के अंतर्गत पेस्ट करें।
जब एक ऑफ़लाइन टोकन कॉन्फ़िगर किया जाता है और कोई BETTERDB_LICENSE_KEY सेट नहीं होता, तो मॉनिटर शून्य आउटबाउंड अनुरोध करता है - लाइसेंस जाँच, टेलीमेट्री, और अपडेट पिंग सभी अक्षम हो जाते हैं। यह टोकन समाप्त होने तक प्रदान किया गया टियर चलाता है (सतत लाइसेंस वार्षिक रूप से पुनः डाउनलोड होते हैं), फिर Community पर वापस आ जाता है।```bash
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` के साथ विफल हो जाता है।
पूर्ण प्रवाह, सत्यापन प्राथमिकता, और कुंजी-रोटेशन रनबुक के लिए देखें
**[Offline & Air-Gapped Licenses](https://github.com/betterdb-inc/monitor/blob/master/docs/offline-licenses.md)** और
**[Configuration reference](https://github.com/betterdb-inc/monitor/blob/master/docs/configuration.md#license-configuration)**।
### Docker Image Details
- **Base Image**: `node:20-alpine`
- **Compressed size**: ~360MB (`latest` / `-no-ai`) / ~640MB (प्रायोगिक AI Helper की स्थानीय-LLM निर्भरताओं वाली संस्करणित इमेज)
- **Platforms**: `linux/amd64`, `linux/arm64`
- **Contains**: Backend API + Frontend static files (Fastify द्वारा सर्व किए गए)
- **Excluded**: SQLite समर्थन (PostgreSQL या Memory storage का उपयोग करें)
### Container Operations```bash
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 |
turso | प्रोडक्शन / सर्वरलेस SQLite | STORAGE_TYPE=turso + STORAGE_URL=libsql://... + STORAGE_AUTH_TOKEN; Docker में काम करता है |
sqlite | स्थानीय विकास / CLI | latest Docker इमेज से नेटिव मॉड्यूल हटा दिया गया है; STORAGE_SQLITE_FILEPATH वैकल्पिक |
Prometheus मेट्रिक्स
मेट्रिक्स GET /api/prometheus/metrics पर Prometheus टेक्स्ट फॉर्मेट में एक्सपोज़ किए जाते हैं: ACL ऑडिट, क्लाइंट कनेक्शन, slowlog/commandlog पैटर्न, मेमोरी, थ्रूपुट, कीस्पेस, रेप्लिकेशन, क्लस्टर स्लॉट स्टैट्स, और Node.js रनटाइम मेट्रिक्स - सभी betterdb_ प्रीफिक्स के साथ।```yaml
scrape_configs:
- job_name: 'betterdb-monitor'
metrics_path: '/api/prometheus/metrics'
static_configs:
- targets: ['your-monitor-host:3001']
पूर्ण मेट्रिक संदर्भ: [docs/prometheus-metrics.md](https://github.com/betterdb-inc/monitor/blob/master/docs/prometheus-metrics.md) और [docs/prometheus-integration.md](https://github.com/betterdb-inc/monitor/blob/master/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 | सिमेंटिक कैशेज़ को बेंचमार्क करने के लिए रीप्ले हार्नेस |
टेक स्टैक
- बैकएंड: Fastify एडाप्टर के साथ NestJS, Valkey/Redis कनेक्शन के लिए
iovalkey, TypeScript स्ट्रिक्ट मोड। पोर्ट 3001। - फ्रंटएंड: React + TypeScript, Vite, TailwindCSS, Recharts। पोर्ट 5173 पर डेव सर्वर।
- मोनोरेपो: pnpm वर्कस्पेस + Turborepo।
लोकल सेटअप
पूर्वापेक्षाएँ: Node.js >= 20.0.0, pnpm >= 9.0.0, Docker।```bash 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 के बजाय, `.env` में `DB_PORT=6382` सेट करें।```bash
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 इमेज बिल्ड:```bash pnpm docker:build # local build pnpm docker:publish # multi-arch build & push (requires buildx)
### नई सुविधाएँ जोड़ना
1. `apps/api/src/` में नए endpoints जोड़ें
2. `apps/web/src/api/` में संबंधित API calls जोड़ें
3. `packages/shared/src/types/` में साझा types जोड़ें
### कोड शैली
- TypeScript strict mode, स्पष्ट return types, `any` का प्रयोग नहीं
- ESLint + Prettier कॉन्फ़िगर किया गया
## लाइसेंस
- `docs/` के अंतर्गत सामग्री CC BY-SA 4.0 के अंतर्गत लाइसेंस प्राप्त है।
- `proprietary/` के अंतर्गत सामग्री एक व्यावसायिक लाइसेंस द्वारा कवर की गई है (देखें `proprietary/LICENSE`)। ये सुविधाएँ early access के दौरान निःशुल्क हैं।
- बाकी सब कुछ [MIT](https://github.com/betterdb-inc/monitor/blob/master/LICENSE) है।