README.ja.md

March 30, 2026 · View on GitHub

DockProbe

DockProbe

軽量なDocker監視ダッシュボード — 異常検知 & Telegram通知
コンテナ1つ。コマンド1つ。完全な可視性。

English | 한국어 | 日本語 | Deutsch | Français | Español | Português | Italiano

License Python Docker Deps Docker Pulls Image Size


DockProbeとは?

DockProbeは、単一コンテナで動作するセルフホスト型Docker監視ダッシュボードです。すべてのコンテナとホストマシンのCPU、メモリ、ネットワーク、ディスクメトリクスをリアルタイムに収集し、クリーンなダークテーマのWeb UIに表示します。

GPU対応ホスト監視は、CPU使用率、ホストメモリ、ディスク圧迫、ロードアベレージに加えて、NVIDIA GPUの温度と使用率をリアルタイムチャートで追跡します。MLワークロードやGPU集約型コンテナを実行している場合、DockProbeは別途GPUモニタリングツールをインストールすることなく、完全な可視性を提供します。

問題が発生すると、DockProbeが自動的に検知します。6つの異常検知ルールがCPUスパイク、メモリオーバーフロー、温度警告、ディスク圧迫、予期しない再起動、ネットワークサージを監視します。各アラートにはすぐに実行可能なコマンド付きの推奨対応が含まれており、何が問題かだけでなく、正確に何をすべきかがわかります。アラートはTelegramに即座に送信され、ユーザーが気づく前に対応できます。

内蔵セキュリティスキャナーが5分ごとに16項目の自動チェックを実行し、コンテナの設定ミス、ネットワークの露出、ホストレベルのセキュリティ強化状態を確認します。

各コンテナにエージェントをインストールする必要はなく、外部データベースも不要で、複雑な設定もありません。Dockerソケットをマウントし、コマンド1つを実行するだけで、https://localhost:9090でDocker環境全体を一目で確認できます。外部からアクセスしたい場合は、Cloudflare Tunnelを標準サポートしており、ポートフォワーディングなしで安全なHTTPSアクセスが可能です。


クイックスタート

git clone https://github.com/deep-on/dockprobe.git && cd dockprobe && bash install.sh

以上です。対話型インストーラーが認証、Telegramアラート、HTTPSを自動設定し、https://localhost:9090を開きます。

必要要件: Docker (Compose v2)、Git、OpenSSL


Docker Hubから直接実行

git cloneもビルドも不要 — pullしてすぐ実行:

# 1. Composeファイルと環境変数テンプレートをダウンロード
curl -fsSL https://raw.githubusercontent.com/deep-on/dockprobe/main/docker-compose.hub.yaml -o docker-compose.yaml
curl -fsSL https://raw.githubusercontent.com/deep-on/dockprobe/main/.env.example -o .env

# 2. .envファイルに認証情報を入力
vi .env

# 3. (任意) 自己署名SSL証明書を生成
mkdir -p certs && openssl req -x509 -newkey rsa:4096 -nodes \
  -keyout certs/key.pem -out certs/cert.pem \
  -days 825 -subj "/CN=dockprobe"

# 4. 起動
docker compose up -d

Docker Hubで公開中: deeponinc/dockprobe — Multi-arch (amd64 + arm64)


ダッシュボードプレビュー

DockProbe ダッシュボード


主な機能

カテゴリ内容
リアルタイムダッシュボードダークテーマWeb UI、10秒自動更新、ソート可能なテーブル、Chart.jsチャート
コンテナ監視CPU %、メモリ %、ネットワークI/O、ブロックI/O、再起動回数
ホスト監視CPU/GPU温度・使用率、メモリ使用量、ディスク使用量、ロードアベレージ
異常検知6つのルール+推奨対応ガイド — CPUスパイク、メモリオーバーフロー、高温、ディスク満杯、再起動、ネットワークスパイク
Telegramアラート即時通知 + アラートタイプ毎30分クールダウン
セキュリティBasic Auth、レート制限 (5回失敗で60秒ロックアウト)、HTTPS
セキュリティスキャナー16項目の自動チェック (コンテナ/ホスト/ネットワーク)、5分間隔スキャン、重大度バッジ
セッション管理アクティブ接続追跡、最大接続数設定、リアルタイムIP表示
パスワード管理ダッシュボードUIからユーザー名/パスワード変更
設定UIダッシュボードから最大接続数をランタイム変更
接続方式自己署名SSL (デフォルト) またはCloudflare Tunnel (ポート転送不要)
軽量Pythonパッケージ4個、単一HTMLファイル、SQLite 7日間保持

ダッシュボード構成

セクション詳細
セッションバーログインユーザー、IP、アクティブ接続数 / 最大制限
ホストカードCPU温度、GPU温度、CPU/GPU %、ホストメモリ、ディスク %、ロードアベレージ
コンテナテーブルCPU/メモリ/ネットワークでソート可能、異常時に赤色表示
チャート (5つ)コンテナCPU・メモリ推移、ホストCPU/GPU %、ホスト温度・ロード
Dockerディスクイメージ、ビルドキャッシュ、ボリューム、コンテナRWレイヤー
アラート履歴直近24時間(タイムスタンプ付き)

異常検知ルール

ルール条件アクション
コンテナCPU>80% 3回連続 (30秒)Telegram通知 + 赤色ハイライト
コンテナメモリ>90% (limit比)即時アラート
ホストCPU温度>85°C即時アラート
ホストディスク>90% 使用即時アラート
コンテナ再起動restart_count増加即時アラート
ネットワークスパイクRX 10倍急増 + 100MB以上即時アラート

すべての閾値は環境変数で設定可能です。

各異常には具体的なコマンド付きの実行可能な推奨対応が含まれます:

異常推奨対応の例
CPUスパイクdocker stats <name> · docker restart <name> · docker update --cpus=2 <name>
メモリオーバーフローdocker stats <name> · docker update --memory=2g <name>
再起動ループdocker logs --tail 50 <name> · docker inspect <name>
ネットワークスパイクdocker logs --tail 50 <name> · DDoSまたは予期しないトラフィックを確認
高温ファン/冷却システムを確認 · sensors -u で詳細確認
ディスク満杯docker system prune -f · docker builder prune -f · docker volume prune

セキュリティスキャナー

DockProbeは5分ごとに16項目のセキュリティチェックを自動実行し、重大度バッジ付きの専用ダッシュボードセクションに結果を表示します。

カテゴリチェック項目
コンテナ (9)特権モード、root実行、危険なcapability、Dockerソケットマウント、機密パスマウント、読み取り専用rootfs、AppArmor/Seccomp無効、環境変数内のシークレット、メモリ/CPU制限なし
ネットワーク (3)ホストネットワークモード、過剰なポート公開、SSHポート (22) 公開
ホスト (4)Dockerデーモンセキュリティオプション、カーネルASLR、IPフォワーディング、Linux Security Module状態

重大度レベル:

  • 🔴 重大 — 即座に対応が必要 (例: 特権モード、書き込み可能なDockerソケット)
  • 🟡 警告 — セキュリティ改善を推奨
  • 🔵 情報 — 参考情報
  • 🟣 利用不可 — 環境の制約によりチェック実行不可、有効化手順を表示

ホストレベルのチェックにはボリュームマウントが必要です (/proc:/host_proc:ro, /sys:/host_sys:ro)。マウントされていない場合、該当チェックはセットアップ手順付きで利用不可と表示されます。


アーキテクチャ

┌──────────────────────────────────────────────┐
│  DockProbe Container                         │
│                                              │
│  FastAPI + uvicorn (port 9090)               │
│  ├── collectors/                             │
│  │   ├── containers.py  (aiodocker)          │
│  │   ├── host.py        (/proc, /sys, GPU)   │
│  │   └── images.py      (system df)          │
│  ├── alerting/                               │
│  │   ├── detector.py    (6 ルール + 対応)    │
│  │   └── telegram.py    (httpx)              │
│  ├── security/                               │
│  │   └── scanner.py     (16 checks)          │
│  ├── storage/                                │
│  │   └── db.py          (SQLite WAL)         │
│  └── static/                                 │
│      └── index.html     (Chart.js)           │
│                                              │
│  マウントボリューム:                           │
│    docker.sock (ro), /sys (ro), /proc (ro),  │
│    nvidia-smi (ro), SQLite named volume      │
└──────────────────────────────────────────────┘

依存関係 (4パッケージのみ):

  • fastapi — Webフレームワーク
  • uvicorn — ASGIサーバー
  • aiodocker — 非同期Docker APIクライアント
  • httpx — 非同期HTTPクライアント (Telegram API)

設定

.envファイルですべて設定:

# 認証 (必須)
AUTH_USER=admin
AUTH_PASS=your-password

# Telegramアラート (任意)
TELEGRAM_BOT_TOKEN=your-bot-token
TELEGRAM_CHAT_ID=your-chat-id

# 閾値 (任意、デフォルト値表示)
CPU_THRESHOLD=80
MEM_THRESHOLD=90

# 接続制限 (任意、0 = 無制限)
MAX_CONNECTIONS=3

# Cloudflare Tunnel (任意)
CF_TUNNEL_TOKEN=your-tunnel-token

接続方式

方法1: ローカルネットワーク (自己署名SSL) — デフォルト

bash install.sh   # オプション1を選択

https://localhost:9090 または https://<サーバーIP>:9090 でアクセス

同じネットワーク内の他のデバイスからアクセスするには、サーバーのLAN IP(例: https://192.168.1.100:9090)を使用します。必要に応じて:

  • ファイアウォールでポートを許可: sudo ufw allow 9090/tcp
  • ブラウザで自己署名証明書の警告を承認

ブラウザの警告が表示される理由: DockProbeはインストール時に生成された自己署名SSL証明書を使用します。信頼された認証局(CA)が発行したものではないため、ブラウザが「この接続はプライベートではありません」という警告を表示します。これは正常な動作です —「詳細設定」→「サイトへ進む」をクリックしてください。この警告をなくすには、信頼されたTLS証明書を自動提供するCloudflare Tunnel(方法3)をご利用ください。

方法2: ポートフォワーディングによるリモートアクセス

Cloudflareなしで外部からアクセスするには:

  1. ルーターでポート9090をサーバーのLAN IPに転送
  2. https://<グローバルIP>:9090 でアクセス
  3. グローバルIPが変わる場合はDDNSサービス(No-IP、DuckDNS等)を利用

注意: ポートが直接公開されます。Basic Auth + HTTPSはデフォルトで有効ですが、セキュリティのためCloudflare Tunnel(方法3)を推奨します。

方法3: Cloudflare Tunnel (リモートアクセス推奨)

ポート転送不要、ファイアウォール変更不要、正式なTLS証明書 — どこからでも最も簡単で安全にアクセスする方法です。

bash install.sh   # オプション2を選択、トンネルトークンを入力

セットアップ手順:

  1. Cloudflare Zero Trustで無料アカウントを作成
  2. Networks > Tunnels > Create a tunnel に移動
  3. トンネル名を設定(例: dockprobe)してトンネルトークンをコピー
  4. bash install.sh を実行してCloudflare Tunnelオプションを選択
  5. トークンを入力
  6. CloudflareダッシュボードでPublic Hostnamehttp://localhost:9090 に設定
  7. https://your-domain.com で正式なTLS証明書付きでアクセス

APIエンドポイント

エンドポイントメソッド説明
/GETダッシュボードHTML
/api/currentGET最新スナップショット (コンテナ + ホスト + イメージ + 異常)
/api/history/{name}?hours=1GETコンテナ時系列データ
/api/history/host?hours=1GETホスト時系列データ
/api/alerts?hours=24GETアラート履歴
/api/sessionGET現在のユーザー、IP、アクティブ接続数
/api/settingsGET/POSTランタイム設定 (max_connections)
/api/change-passwordPOSTユーザー名/パスワード変更
/api/healthGETヘルスチェック (認証不要)

セキュリティ

DockProbeは複数の保護レイヤーを備えた安全なセルフホスティング向けに設計されています:

認証とアクセス制御

  • Basic Auth — 全エンドポイントで認証必須 (/api/health を除く)
  • PBKDF2-SHA256 パスワードハッシュ — ランダムソルト適用 (600kイテレーション)
  • レート制限 — ログイン5回失敗でIPごとに60秒ロックアウト
  • 最低8文字 のパスワード要件
  • 接続数制限 — 最大同時接続ユーザー設定可能

ネットワークとトランスポート

  • HTTPS — 自己署名 RSA-4096 (デフォルト) またはCloudflare Tunnel
  • CORS — クロスオリジンリクエストを明示的にブロック
  • CSRF保護 — POSTエンドポイントに X-Requested-With ヘッダー必須
  • HTTPフォールバック警告 — 平文モード時に起動時警告を表示 (トンネル専用)

コンテナセキュリティ強化

  • 非root実行 — コンテナは appuser として実行、rootではない
  • 読み取り専用マウント — Docker socket、/sys、/proc すべてread-only
  • パストラバーサル防止 — 静的ファイル配信時にパスを検証
  • 制御機能なし — 監視専用、コンテナ操作不可
  • OpenAPI/Swagger無効化 — 本番環境でAPIドキュメントエンドポイントを無効化

プロキシ対応レート制限

  • X-Forwarded-ForTRUSTED_PROXIES 環境変数に登録されたIPからのみ信頼
  • 直接接続では常に実際のクライアントIPを使用

手動セットアップ

インストールスクリプトの代わりに手動設定する場合:

git clone https://github.com/deep-on/dockprobe.git
cd dockprobe

# .env 設定
cp .env.example .env
vi .env

# SSL証明書生成 (任意)
mkdir -p certs
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout certs/key.pem -out certs/cert.pem \
  -days 365 -subj "/CN=dockprobe"

# 起動
docker compose up -d --build

ライセンス

Apache License 2.0 — LICENSE を参照

帰属条件: 修正・再配布版にはDeepOnロゴと「Powered by DeepOn Inc.」の表記をUIに保持する必要があります。


DeepOn DeepOn Inc. が開発