
Valkey および Redis データベース向けのリアルタイム監視とスローログ分析。異常検知、ACL 監査、Prometheus メトリクスのエクスポートを備えています。
Valkeyにふさわしいモニタリングレイヤー。
BetterDBは、Valkeyが捨ててしまうもの(スローログ、コマンドパターン、クライアントアクティビティ、異常シグナル)を永続化します。これにより、「今起きていること」だけでなく、「午前3時に何が起きたのか」をデバッグできます。Valkey 8.x向けに構築され、COMMANDLOG、CLUSTER SLOT-STATS、スレッドごとのI/Oメトリクスをネイティブにサポートします。その他はRedis 6+と互換性があります。
ウェブサイト | Docker Hub | npm | ドキュメント | ブログ
BetterDBは、OCV Open Charterに基づいて運営されるパブリック・ベネフィット企業であるBetterDB Inc.によって構築されています。

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
2つのイメージバリアントが公開されています。どちらもマルチアーキテクチャ(linux/amd64、linux/arm64)です:
| Tag | 説明 |
|---|---|
latest, X.Y.Z-no-ai | デフォルトイメージ - すべてのモニタリング機能を含み、実験的なローカルLLM AIヘルパーの依存関係は含まれません |
X.Y.Z | 実験的なAIヘルパーを追加(Ollamaは各自で用意。デフォルトではAI_ENABLEDで無効) |
永続ストレージ、カスタムポート、ライセンス、エアギャップ環境のセットアップについては、Docker本番デプロイを参照してください。
Dockerを使わずにBetterDB Monitorを実行する:
npx @betterdb/monitor
初回実行時には、対話式セットアップウィザードがデータベース接続、ストレージバックエンド(SQLite、PostgreSQL、またはインメモリ)、サーバー設定を案内します。設定は ~/.betterdb/config.json に保存されます。
npm install -g @betterdb/monitor # グローバルインストール
betterdb --setup # セットアップウィザードを再実行
betterdb --port 8080 # サーバーポートを上書き
betterdb --db-host 1.2.3.4 # データベースホストを上書き
betterdb --help # 全オプションを表示
Node.js >= 20.0.0 と、監視対象のValkeyまたはRedisインスタンスが必要です。SQLiteストレージを使用する場合は、npm install -g better-sqlite3 も実行してください。
@betterdb/mcp 経由で Claude Code、Cursor、または任意のMCPクライアント向けの60のツール。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+ | Valkey限定のCOMMANDLOGとCLUSTER SLOT-STATSを除くすべての機能 |
バックエンドはワイヤー互換の iovalkey クライアント上の統合アダプターを使用し、INFO レスポンス(DB_TYPE=auto)からValkeyかRedisかを自動検出します。COMMANDLOGやSLOT-STATSなどの機能はバージョンごとに検出され、機能が利用できない場合、UIはグレースフルに縮退します。
マネージドサービスもサポートされています - AWS ElastiCache、MemoryDB、Redis Cloud、Upstashのガイドは docs/providers にあり、@betterdb/agent はアウトバウンドWebSocket経由でVPC内のインスタンスに到達します。
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は、ホストがインターネットにアクセスできるかどうかに応じて、次の2つの方法のいずれかでPro/Enterprise機能を有効化します:
BETTERDB_LICENSE_KEY を設定します。モニターは betterdb.com に対して検証し、ローカルで検証済みの署名付きトークンをキャッシュするため、短い障害や再起動中もティアは機能し続けます。すべての権限は署名付きRS256 JWTです。モニターはイメージに埋め込まれた公開鍵に対してローカルで検証します。トークンを信頼するためにライセンスサーバーに到達する必要は一切ありません。したがって、エアギャップホストはゼロ接続で有料ティアを実行できます:
.jwt、Pro/Enterprise)をダウンロードします。シークレットは含まれておらず、改ざんは不可能です - 編集すると署名が壊れます。BETTERDB_OFFLINE_LICENSE_FILE(パス)、BETTERDB_OFFLINE_LICENSE(インライン文字列)で指定するか、UIの**設定 → ライセンス →「エアギャップ環境ですか?オフラインライセンスを有効化」**に貼り付けます。オフライントークンが設定され、BETTERDB_LICENSE_KEY が設定されていない場合、モニターはゼロのアウトバウンドリクエストを行います - ライセンスチェック、テレメトリ、更新pingはすべて無効になります。トークンが期限切れになるまで付与されたティアを実行し(永続ライセンスは毎年再ダウンロード)、その後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で実行されるため、新しく作成したボリュームは(上記のように)そのUIDにchownする必要があります - そうしないと、EACCES … license.jwtで永続化に失敗します。
完全なフロー、検証の優先順位、キーローテーションのラン ブックについては、オフライン & エアギャップライセンス と 設定リファレンス を参照してください。
node:20-alpinelatest / -no-ai)/ ~640MB(実験的なAIヘルパーのローカルLLM依存関係を含むバージョン付きイメージ)linux/amd64, linux/arm64docker logs -f betterdb-monitor # ログを追跡
docker stop betterdb-monitor # 停止
docker rm betterdb-monitor # 削除
BetterDB Monitorは、監査証跡、分析、キャプチャ、異常データを次の3つのバックエンドのいずれかに永続化します:
メトリクスは GET /api/prometheus/metrics でPrometheusテキスト形式で公開されます: ACL監査、クライアント接続、slowlog/commandlogパターン、メモリ、スループット、キースペース、レプリケーション、クラスタスロット統計、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、TypeScript strictモード。ポート 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
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/ に共有型を追加するany なしdocs/ 配下のコンテンツは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 | 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 を設定 |
| バックエンド | ユースケース | 備考 |
|---|
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 | セマンティックキャッシュのベンチマーク用リプレイハーネス |