
シンプルなノードとグラフ
インフラを可視化。設定不要。
graph-go をスタックに向けるだけで、すべてのデータベース、テーブル、サービス、ストレージバケットのライブでインタラクティブなマップを取得できます。リアルタイムのヘルスモニタリング付き。
graph-go は CLI ファーストのインフラマッパーです。Docker デーモンに接続し、実行中のコンテナを検査し、データベースやストレージサービスをプローブすることで、インフラを自動検出します。UI はバックエンドによって提供され、バックエンドの状態をリアルタイムに反映します。手動のインベントリは不要です。
| 機能 | 詳細 |
|---|---|
| 自動検出 | Docker コンテナと Kubernetes クラスターからインフラを検出します。手動のインベントリは不要です。 |
| Kubernetes | Namespace、Deployment、StatefulSet、DaemonSet、Pod、Service — インフォーマーベースのリアルタイム監視に対応 |
| Docker | 実行中のコンテナを分類、認証情報を抽出、Docker イベントを監視、graphgo.* ラベルを尊重してタイプ/DSN/ノードタイプ/名前の上書きやコンテナの無視を可能に |
| PostgreSQL | テーブル、外部キーリレーション、スキーマトポロジ |
| MongoDB | データベースとコレクション |
| MySQL | テーブル、外部キーリレーション |
| Redis | キースペースとキーの分布 |
| Elasticsearch | インデックス、クラスターヘルス、シャードステータス |
| S3 / MinIO | バケットとトップレベルのプレフィックス |
| HTTP サービス | ヘルスエンドポイント、サービス間の依存関係マッピング |
| リアルタイムヘルス | WebSocket による5秒ごとのライブステータス更新 |
| インタラクティブグラフ | スイムレーンレイアウト、名前空間グループコンテナ、パン/ズーム、タイプ/ヘルスによるフィルター、ノード検索 |
graph-go は限られた graphgo.* コンテナラベルのセットを尊重します(制御したい任意のコンテナに設定できます)。
| ラベル | 効果 |
|---|---|
graphgo.ignore=true | このコンテナを完全にスキップ |
graphgo.type=postgres | アダプタータイプを強制(postgres、mongodb、mysql、redis、elasticsearch、s3、http) |
graphgo.dsn=... | 接続文字列を注入(postgres/mysql の場合は DSN、mongodb の場合は URI、それ以外は dsn にフォールバック) |
graphgo.node-type=gateway | ビジュアルノードタイプを上書き(service、gateway、auth、api、queue、cache) |
graphgo.name=... | グラフに表示されるノード名と、ノードID/ログで使用される名前を上書き |
これらを使用して、誤分類されたコンテナを救出したり、カスタムDSNを指定したり、コンテナを削除せずにグラフから非表示にしたりできます。
CLI でシード済みデモスタックを起動します。これは graph-go を現実的な環境で最も早く体験でき、初めてのユーザーに推奨されるオンボーディングパスです。
git clone https://github.com/guilherme-grimm/graph-go.git
cd graph-go
go run ./cmd/app demo
http://localhost:8080 を開きます。このコマンドは Docker Compose 経由でフォアグラウンドで実行されます。Ctrl+C でセッションを停止します。
初回実行時は、コールドマシンでは Docker がベースイメージをプルし、ローカルのデモイメージをビルドする必要があるため、数分かかることがあります。2回目以降ははるかに高速です。
デモスタックは、ホストの以下のポートが空いていることを前提としています: 8080、5432、27017、9000、9001。
明示的に後片付けが必要な場合:
docker compose -f docker-compose.demo.yml down
1つのコンテナ、1つのポート。Docker ソケットを読み取り専用でマウントするだけで、graph-go がホスト上で実行中のすべてを自動検出します。
docker run -d -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/guilherme-grimm/graph-go:latest
graph-go は Docker ソケットからの読み取りのみを行います。
:roフラグでこれを強制しています。必ず指定してください。
http://localhost:8080 を開きます。自動検出は、設定ファイルなしで Docker コンテナと(kubeconfig またはクラスター内サービスアカウントが存在する場合)Kubernetes リソースを処理します。
Docker/Kubernetes の外部にあるサービス(リモートデータベース、マネージドクラウドサービス)については、設定ファイルをマウントしてください — 設定 を参照。
単一の自己完結型バイナリ。UI は埋め込まれていますが、エントリポイントは依然として CLI です。
# Linux amd64 (GitHub CLI が必要。他のプラットフォームは Releases を参照)
gh release download --repo guilherme-grimm/graph-go --pattern 'graph-go_*_linux_amd64.tar.gz' --clobber
tar xzf graph-go_*_linux_amd64.tar.gz
./graph-go serve # または単に `./graph-go` — 同じ動作
http://localhost:8080 を開きます。他のプラットフォームは Releases ページ を参照してください。
| コマンド | 説明 |
|---|---|
graph-go demo | リポジトリからシード済みの Docker Compose デモスタックを起動し、その出力をフォアグラウンドに表示します。 |
graph-go serve | 自動検出とライブ更新を伴う HTTP サーバーを起動します(デフォルト — 引数なしで実行した場合と同じ)。 |
graph-go scan | 検出を1回実行し、結果を JSON として stdout に出力します。jq にパイプしたり、CI チェックや一度きりのエクスポートに便利です。 |
graph-go version | バージョン、コミット、ビルド日を表示します。 |
graph-go --health-check | ローカルの /health にアクセスし、終了コード 0/1 を返します。コンテナの HEALTHCHECK で使用されます。インタラクティブ用途ではありません。 |
グローバルフラグ(すべてのサブコマンドに適用): --config、--log-level、--log-format。各コマンドの全オプションは graph-go <command> --help で確認できます。
典型的な流れ:
graph-go demo で現実的なローカルウォークスルーを体験。graph-go serve で自身のインフラに対して実行。graph-go scan で一度きりの自動化、エクスポート、CI チェック。| ポート | 用途 |
|---|---|
8080 | graph-go(UI + API + WebSocket — 本番用) |
5173 | Vite 開発サーバー(開発時のみ — CONTRIBUTING.md を参照) |
9001 | MinIO コンソール(デモスタックのみ) |
自動検出が基本パスです。Docker ソケットをマウントするか、Kubernetes クラスター内で実行するだけで、graph-go は 設定ファイル不要 でインフラを検出します。
YAML 設定(conf/config.yaml)は、検出経由で到達できないサービス(リモートデータベース、マネージドクラウドサービス、外部エンドポイント)のための避難ハッチとしてのみ使用してください。完全なスキーマは conf/config.sample.yaml を参照してください。すべてのアダプターと設定ブロック(server、docker、kubernetes、connections)の例があります。
上記の Docker 実行で設定ファイルを使用する場合:
docker run -d -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v $(pwd)/conf/config.yaml:/app/conf/config.yaml:ro \
ghcr.io/guilherme-grimm/graph-go:latest
許可された使用のみ: graph-go は、自分が所有しているか、アクセス許可があるインフラを可視化するためのものです。許可なくシステムに向けてはいけません。
┌─────────────────────────────────────┐
│ Discoverer Interface │
│ Discover() · Watch() · Close() │
└──────────┬──────────┬───────────────┘
│ │
┌──────────▼──┐ ┌────▼──────────────┐
│ Docker │ │ Kubernetes │
│ Discoverer │ │ Discoverer │
│ (containers,│ │ (informers, pods, │
│ classify, │ │ deployments, │
│ events) │ │ services, health) │
└──────┬──────┘ └────┬──────────────┘
│ │
┌──────▼───────────────▼──────┐
│ Parallel Discovery + Merge │
│ (concatenate ServiceInfo) │
└──────────────┬──────────────┘
│
Config (YAML) ──→ YAML Merge ───────────▶│
▼
┌─────────────────────────────┐
│ Adapter Registry │
│ ├─ PostgreSQL → Tables + FK│
│ ├─ MongoDB → Collections │
│ ├─ MySQL → Tables + FK │
│ ├─ Redis → Keyspaces │
│ ├─ Elasticsearch → Indices │
│ ├─ S3 → Buckets │
│ └─ HTTP → Health + deps│
│ │
│ + Topology (K8s nodes/edges) │
└──────────────┬───────────────┘
▼
Graph Model (Nodes + Edges)
▼
REST API + WebSocket (Real-time)
主要コンポーネント:
Adapter インターフェースを実装してデータベースやストレージサービスをプローブします。