
مراقبة في الوقت الفعلي وتحليل سجل الاستعلامات البطيئة (slowlog) لقواعد بيانات Valkey وRedis مع كشف الشذوذ وتدقيق قوائم التحكم بالوصول (ACL) وتصدير مقاييس Prometheus.
طبقة المراقبة التي يستحقها 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 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 | الصورة الافتراضية - تتضمن كل ميزات المراقبة، دون تبعيات المساعد الذكي التجريبي للنماذج اللغوية المحلية (AI Helper) |
X.Y.Z | تضيف المساعد الذكي التجريبي (AI Helper) (استخدم Ollama الخاص بك؛ معطّل افتراضيًا عبر AI_ENABLED) |
انظر النشر الإنتاجي عبر Docker للتخزين الدائم والمنافذ المخصصة والترخيص وإعدادات البيئات المعزولة.
شغّل BetterDB Monitor دون Docker:
npx @betterdb/monitor
في أول تشغيل، يرشدك معالج إعداد تفاعلي عبر اتصال قاعدة البيانات ووحدة التخزين الخلفية (SQLite أو PostgreSQL أو في الذاكرة) وإعدادات الخادم. يتم حفظ الإعداد في ~/.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.
@betterdb/mcp.betterdb_*. انظر docs/prometheus-metrics.md.ملاحظة: في الإصدارات الإنتاجية (Docker, CLI) تُقدَّم مسارات API تحت بادئة
/api. في التطوير المحلي (pnpm dev) لا توجد بادئة - مثلhttp://localhost:3001/health.
| قاعدة البيانات | الحد الأدنى للإصدار | الميزات المدعومة |
|---|---|---|
| Valkey | 8.0+ | كل الميزات بما فيها COMMANDLOG (8.1+) وCLUSTER SLOT-STATS |
| Redis | 6+ | كل الميزات باستثناء COMMANDLOG وCLUSTER SLOT-STATS الحصريين لـ Valkey |
يستخدم الخلفي محوّلًا موحّدًا فوق عميل iovalkey المتوافق على مستوى البروتوكول ويكتشف تلقائيًا Valkey مقابل Redis من استجابة INFO (DB_TYPE=auto). تُكتشف القدرات مثل COMMANDLOG وSLOT-STATS حسب الإصدار، وتتراجع الواجهة برشاقة عندما لا تكون الميزة متاحة.
الخدمات المدارة مدعومة أيضًا - أدلة AWS ElastiCache وMemoryDB وRedis Cloud وUpstash موجودة في docs/providers، و@betterdb/agent يصل إلى النسخ التي لا تتوفر إلا عبر VPC عبر WebSocket صادر.
تحتوي صورة Docker على تطبيق المراقبة (الواجهة الخلفية + الواجهة الأمامية). تتطلب:
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
إذا كان 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
المرجع الكامل، بما فيه AI وتصدير OTLP وضبط webhook وعتبات بوابة الصحة: docs/configuration.md.
يفتح BetterDB Monitor ميزات Pro/Enterprise بإحدى طريقتين، اعتمادًا على ما إذا كان المضيف متصلًا بالإنترنت:
BETTERDB_LICENSE_KEY. يتحقق المراقب منه مقابل betterdb.com ويخزّن مؤقتًا رمزًا موقّعًا يتم التحقق منه محليًا، لذا تبقى فئتك تعمل أثناء الانقطاعات القصيرة وإعادة التشغيل.كل ترخيص هو JWT موقّع بخوارزمية RS256. يتحقق منه المراقب محليًا مقابل مفاتيح عامة مدمجة في الصورة - لا يحتاج أبدًا إلى الوصول إلى خادم ترخيص للثقة برمز. لذا يمكن لمضيف معزول تشغيل الفئات المدفوعة دون أي اتصال:
.jwt، Pro/Enterprise). لا يحتوي على أسرار ولا يمكن العبث به - أي تعديل يكسر التوقيع.BETTERDB_OFFLINE_LICENSE_FILE (مسار) أو BETTERDB_OFFLINE_LICENSE (سلسلة مباشرة) أو الصقه في الواجهة ضمن الإعدادات → الترخيص → "بيئة معزولة عن الشبكة؟ فعّل ترخيصًا دون اتصال".عندما يتم ضبط رمز دون اتصال ولا يتم تعيين 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.
للتدفق الكامل وأولوية التحقق ودليل تدوير المفاتيح انظر التراخيص دون اتصال والمعزولة و مرجع الإعدادات.
node:20-alpinelatest / -no-ai) / ~640MB (الصورة المرقّمة مع تبعيات نموذج اللغة المحلي للمساعد الذكي التجريبي)linux/amd64, linux/arm64docker logs -f betterdb-monitor # follow logs
docker stop betterdb-monitor # stop
docker rm betterdb-monitor # remove
يحفظ BetterDB Monitor مسار التدقيق والتحليلات والالتقاطات وبيانات الحالات الشاذة في واحدة من ثلاث وحدات تخزين خلفية:
تُعرض المقاييس في GET /api/prometheus/metrics بصيغة نصوص Prometheus: تدقيق 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/ للقائمة الكاملة.
iovalkey لاتصالات Valkey/Redis، ووضع TypeScript الصارم. المنفذ 3001.المتطلبات الأساسية: 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
للاتصال بـ Redis بدل Valkey، عيّن DB_PORT=6382 في .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
بناء صور 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/ مرخّص بموجب CC BY-SA 4.0.proprietary/ مغطى بترخيص تجاري (انظر proprietary/LICENSE). هذه الميزات مجانية خلال الوصول المبكر.| الواجهة | التفاصيل |
|---|
| Web 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 |
| المتغير | مطلوب | الافتراضي | الوصف |
|---|
DB_HOST | نعم | localhost | مضيف Valkey/Redis المطلوب مراقبته |
DB_PORT | لا | 6379 | منفذ Valkey/Redis |
DB_PASSWORD | لا | - | كلمة مرور Valkey/Redis |
DB_USERNAME | لا | default | اسم مستخدم ACL لـ Valkey/Redis |
DB_TYPE | لا | auto | نوع قاعدة البيانات: auto أو valkey أو redis |
STORAGE_TYPE | لا | memory | وحدة التخزين الخلفية: memory أو postgres |
STORAGE_URL | شرطي | - | رابط اتصال PostgreSQL (مطلوب إذا كان STORAGE_TYPE=postgres) |
PORT | لا | 3001 | منفذ HTTP للتطبيق |
NODE_ENV | لا | production | بيئة Node |
ANOMALY_DETECTION_ENABLED | لا | true | تفعيل اكتشاف الحالات الشاذة |
ANOMALY_PROMETHEUS_INTERVAL_MS | لا | 30000 | فترة تحديث ملخص Prometheus (بالمللي ثانية) |
BETTERDB_LICENSE_KEY | لا | - | مفتاح ترخيص عبر الإنترنت (Pro/Enterprise)، يتم التحقق منه عبر الشبكة |
BETTERDB_OFFLINE_LICENSE_FILE | لا | - | مسار ملف ترخيص دون اتصال موقّع .jwt للمضيفات المعزولة (انظر أدناه) |
BETTERDB_OFFLINE_LICENSE | لا | - | رمز الترخيص دون اتصال كسلسلة JWT مباشرة |
BETTERDB_DATA_DIR | لا | /app/data | دليل حالة الترخيص المحفوظة (ثبّت وحدة تخزين قابلة للكتابة) |
BETTERDB_TELEMETRY | لا | true | اضبط false لتعطيل القياس عن بُعد المجهول |
| الوحدة | حالة الاستخدام | ملاحظات |
|---|
memory | الاختبار والبيئات المؤقتة | الافتراضية في Docker؛ تُفقد كل البيانات عند إعادة التشغيل |
postgres | الإنتاج | STORAGE_TYPE=postgres + STORAGE_URL=postgresql://user:pass@host:port/db |
sqlite | التطوير المحلي / CLI | غير مضمّنة في صور Docker الإنتاجية؛ STORAGE_SQLITE_FILEPATH اختياري |
| الحزمة | اللغة | السجل |
|---|
@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 | أداة إعادة تشغيل لقياس أداء الذواكر المؤقتة الدلالية |