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

त्वरित प्रारंभ (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जोड़ें ताकि नाम हल हो सके। डैशबोर्ड का वन-क्लिक "स्थानीय इंस्टेंस से कनेक्ट करें" बटन इसे स्वचालित रूप से पहचानता है और आपके लिए सही होस्ट पहले से भर देता है।
दो इमेज वेरिएंट प्रकाशित हैं, दोनों मल्टी-आर्क (linux/amd64, linux/arm64):
| टैग | यह क्या है |
|---|---|
latest, X.Y.Z-no-ai | डिफ़ॉल्ट इमेज - सभी मॉनिटरिंग सुविधाएँ शामिल हैं, प्रयोगात्मक स्थानीय-LLM AI हेल्पर के लिए निर्भरताओं के बिना |
X.Y.Z | प्रयोगात्मक AI हेल्पर जोड़ता है (अपना खुद का Ollama लाएं; AI_ENABLED के माध्यम से डिफ़ॉल्ट रूप से अक्षम) |
स्थायी स्टोरेज, कस्टम पोर्ट, लाइसेंसिंग और एयर-गैप्ड सेटअप के लिए Docker Production Deployment देखें।
क्विक स्टार्ट (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-आधारित इतिहास, अपना खुद का Secrets लाना, और air-gapped लाइसेंसिंग — सब कुछ [Kubernetes गाइड](https://docs.betterdb.com/kubernetes) और [चार्ट README](https://github.com/betterdb-inc/monitor/blob/master/charts/betterdb-monitor/README.md) में शामिल है।
## त्वरित आरंभ (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 में निर्यात, और कनेक्शन इतिहास के साथ क्रॉस-रेफरेंस।
- **हॉट की ट्रैकिंग** - एक्सेस आवृत्ति के आधार पर शीर्ष कुंजियाँ, समय के साथ रैंक आंदोलन के साथ। की एनालिटिक्स (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, प्रारंभिक एक्सेस में मुफ़्त) - हिट-रेट स्वास्थ्य, समानता-थ्रेशोल्ड अनुशंसाएँ, और स्वीकृति/अस्वीकृति प्रस्ताव वर्कफ़्लो। एजेंट मेमोरी अवलोकनीयता शामिल।
- **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 के माध्यम से दस्तावेज़ित।
## अपने डेटा तक अपने तरीके से पहुँचें
| इंटरफ़ेस | विवरण |
|-----------|---------|
| वेब 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` प्रतिक्रिया (`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 एनवायरनमेंट वेरिएबल सेट करें और -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 |
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 | संग्रहीत लाइसेंस स्थिति के लिए निर्देशिका (लिखने योग्य वॉल्यूम माउंट करें) |
ENCRYPTION_KEY | नहीं | - | कुंजी (न्यूनतम 16 अक्षर) जो संग्रहीत कनेक्शन पासवर्ड और SSH टनल रहस्यों को आराम पर एनवेलप-एन्क्रिप्ट करने के लिए उपयोग की जाती है। इसके बिना, रहस्य सादे पाठ में संग्रहीत होते हैं |
BETTERDB_SSH_KEY_DIR | नहीं | - | वह निर्देशिका जिसमें सर्वर-साइड SSH निजी कुंजियाँ रहनी चाहिए। SSH टनल के लिए "सर्वर फ़ाइल पथ" कुंजी स्रोत सक्षम करता है; कनेक्शन का कुंजी पथ इसके अंदर हल होना चाहिए। अनसेट होने पर फ़ाइल-आधारित कुंजियाँ अक्षम हो जाती हैं (इनलाइन पेस्ट की गई कुंजियाँ अभी भी काम करती हैं) |
BETTERDB_TELEMETRY | नहीं | true | अनाम टेलीमेट्री अक्षम करने के लिए false सेट करें |
AI, वेबहुक ट्यूनिंग, और स्वास्थ्य-गेट थ्रेशोल्ड सहित पूर्ण संदर्भ: docs/configuration.md। OTLP ट्रेस इन्जेस्ट और मेट्रिक्स/इवेंट निर्यात के लिए, docs/opentelemetry.md देखें।
SSH टनल
कनेक्शन सीधे कनेक्ट करने के बजाय SSH बैस्टियन/जंप होस्ट के माध्यम से डेटाबेस तक पहुँच सकते हैं — निजी सबनेट, ElastiCache, या MemoryDB में Valkey/Redis के लिए उपयोगी। कनेक्शन जोड़ते समय SSH टनल के माध्यम से कनेक्ट करें सक्षम करें और 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 में सेटिंग्स → लाइसेंस → "एयर-गैप्ड वातावरण? ऑफ़लाइन लाइसेंस सक्रिय करें।" के अंतर्गत पेस्ट करें।
जब एक ऑफ़लाइन टोकन कॉन्फ़िगर किया जाता है और कोई 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`।
> **स्थिरता (Persistence):** `/app/data` पर एक लिखने योग्य वॉल्यूम माउंट करें ताकि ऑफ़लाइन लाइसेंस और
> ऑनलाइन आउटेज-ग्रेस टोकन रीस्टार्ट के बाद भी बने रहें। कंटेनर **UID 1001** के रूप में चलता है,
> इसलिए नए बनाए गए वॉल्यूम को उसके लिए `chown` किया जाना चाहिए (ऊपर दिखाया गया है) - अन्यथा
> `EACCES … license.jwt` के साथ स्थिरता विफल हो जाती है।
पूर्ण प्रवाह, सत्यापन प्राथमिकता, और कुंजी-रोटेशन रनबुक के लिए देखें
**[ऑफ़लाइन और एयर-गैप्ड लाइसेंस](https://github.com/betterdb-inc/monitor/blob/master/docs/offline-licenses.md)** और
**[कॉन्फ़िगरेशन संदर्भ](https://github.com/betterdb-inc/monitor/blob/master/docs/configuration.md#license-configuration)**।
### डॉकर इमेज विवरण
- **बेस इमेज**: `node:20-alpine`
- **संपीड़ित आकार**: ~360MB (`latest` / `-no-ai`) / ~640MB (प्रायोगिक AI हेल्पर की स्थानीय-LLM निर्भरताओं वाली संस्करणित इमेज)
- **प्लेटफ़ॉर्म**: `linux/amd64`, `linux/arm64`
- **शामिल**: बैकएंड API + फ्रंटएंड स्टैटिक फ़ाइलें (Fastify द्वारा परोसी गईं)
- **बाहर**: SQLite समर्थन (PostgreSQL या मेमोरी स्टोरेज का उपयोग करें)
### कंटेनर संचालन```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 पैटर्न, मेमोरी, थ्रूपुट, keyspace, रेप्लिकेशन, क्लस्टर स्लॉट स्टैट्स, और 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
To connect to Redis instead of Valkey, set `DB_PORT=6382` in `.env`.```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/` में नए एंडपॉइंट जोड़ें
2. `apps/web/src/api/` में संबंधित API कॉल जोड़ें
3. `packages/shared/src/types/` में साझा प्रकार जोड़ें
### कोड शैली
- TypeScript सख्त मोड, स्पष्ट रिटर्न प्रकार, कोई `any` नहीं
- ESLint + Prettier कॉन्फ़िगर किया गया
## लाइसेंस
- `docs/` के अंतर्गत सामग्री CC BY-SA 4.0 के तहत लाइसेंस प्राप्त है।
- `proprietary/` के अंतर्गत सामग्री एक वाणिज्यिक लाइसेंस द्वारा कवर की गई है (देखें `proprietary/LICENSE`)। ये सुविधाएँ प्रारंभिक पहुँच के दौरान निःशुल्क हैं।
- बाकी सब कुछ [MIT](https://github.com/betterdb-inc/monitor/blob/master/LICENSE) है।