>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Rust

Scanopyでネットワーク図を手描きから解放される方法

Scanopy Logo

企業やホームサーバーのネットワークマップを最新の状態に保とうとしたことがある人なら、この的痛苦はよく分かるだろう。draw.ioやVisioで坐下し、スイッチ、サーバー、接続のための小さなボックスを丁寧に配置して半日費やした後、一週間もすれば、システム管理者がパッチケーブルを数本交換し、DevOpsエンジニアがDockerで新しいスタックを立ち上げると、手描きしたダイアグラムはもう使えない歴史的文書と化してしまう。

TerraformやAnsibleのステートも必ずしも救世主にはならない。インフラコードはパイプラインで記述された内容だけを顯示し、スイッチの手動変更や一時的に起動したVMは無視してしまう。

最近、Scanopyプロジェクトを見つけた。彼らは定期的なネットワークスキャンを行い、複数の抽象化レベルでインタラクティブなダイアグラムを自動生成するツールを構築した。

L2 view

L2(物理)
すべてのスイッチ、すべてのポート、すべてのリンク。

L3 view

L3(論理)
サブネットとホスト間の接続方法。

Workloads view

ワークロード
ベアメタルからハイパーバイザ,再到コンテナまで。

Applications view

アプリケーション
サービスとその依存関係、アプリケーションごとにグループ化。

内部動作の仕組み

重いエージェントを各仮想マシンにインストールする代わりに、プロジェクトは軽量なデーモンスキャナを使用している。デーモンはSNMP経由でネットワークデバイスにクエリを送信し、LLDPとARPテーブルを解析して、開いているポートをスキャンする。必要に応じて、スキャナはDockerソケットに直接接続してコンテナをインベントリ化する。

内部的には、ScanopyはRustで書かれている。これにより、メモリ消費を増やさずに高速なスキャナとサーバーのパフォーマンスを実現している。

スキャナの実行ごとに、インフラモデルが構築され、4つの異なるスライスが生成される:

  1. L2物理層。これにはスイッチ、物理リンク、特定の機器接続ポートが含まれる。
  2. L3論理層。ルーティング、サブネット、ホスト間のIPアドレス分散を表示する。
  3. ワークロード。ベアメタルの物理サーバーからハイパーバイザ、仮想マシン、個々のコンテナへのチェーンを表示する。
  4. アプリケーション。データベース、Webサーバー、バックグラウンドワーカー間の依存関係をグループ化し、グラフを構築する。

プロジェクトにはすでに200以上の事前構築済みサービスシグネチャがバンドルされている。スキャナはPostgreSQL、Redis、Nginx、Kubernetes、その他の多くのソフトウェアを追加の手動ラベル付けなしで即座に認識する。

スキャナの機能

このアプローチの主な利点は自律性だ。スケジュールを設定すれば、スキャナはバックグラウンドで定期的にトポロジを更新する。

実用的な機能は次のとおりだ:

  • 分散データ収集。複数のオフィスや分離されたVLANの場合、データを中央サーバーに送信する別々のデーモンを展開できる。
  • ダイアグラムのエクスポート。完成したダイアグラムはSVGとしてエクスポートでき、ドキュメントにMermaidコードとして埋め込むか、Confluenceに直接アップロードできる。
  • インタラクティブなWebインターフェース。マップをズームインし、個々のノードをクリックして、アクティブなポートと隣接する接続を表示できる。
  • 役割ベースのアクセスモデル。組織とユーザーの間に組み込みの分離があり、サービス企業やアウトソーシングチームに便利だ。

ラボでのクイックスタート

システムを試す最も簡単な方法は、必要なサブネットにアクセスできるホストでDocker Compose経由でコンテナを起動することだ。

curl -O https://raw.githubusercontent.com/scanopy/scanopy/refs/heads/main/docker-compose.yml
docker compose up -d

起動後、Webインターフェースはポート60072でリッスンする。http://localhost:60072に移動してローカル管理者アカウントを作成し、最初のスキャンサイクルを開始する。

Proxmox VEでホームラボを実行している場合、著者はLXCコンテナにデプロイするための готовыйスクリプトを用意している。ScanopyはUnraidアプリカタログでも利用 가능하다。

ローカルにインストールしたくない場合は、作成者には事前にデータが入力されたテストデータを含むパブリックデモサンドボックスがにある。demo.scanopy.net

プロジェクトが時間を節約できる人

運用エンジニアやDevOpsチームにとって、Scanopyは「このトラフィックはどこに行き、このコンテナはどこで実行されている」という永遠の問いを解決する。物理的および論理的ハードウェアバインディングを、手動でトレースを収集する必要なく確認できる。

ネットワークエンジニアにとって、このユーティリティは、グラフィカルエディタで面倒な時間を費やすことなく、最新のスイッチングマップを維持するのに役立つ。サービスを移行したり、ポートを切り替えたりすると、次のスキャンでトポロジが自動的に更新される。

ホームサーバーやホームラボの所有者にとって、このツールは、週末を手動のドキュメント作成に費やすことなく、サービスの散らばりを整理する方法を提供する。

まとめ

Scanopyは、ドキュメントが時代遅れになる古典的な問題を直接かつ簡単な方法で解決する。ダイアグラムは、6ヶ月前の開発者の理解ではなく、ネットワークの実際の状態に基づいて生成される。

コードは自己ホスト用のAGPL-3.0ライセンスで配布されている。インフラマップの更新を先延ばしにしていたり、リリースごとにダイアグラムを再描画することに疲れている場合は、テストネットワークにデーモンをデプロイし、最初の実行結果を確認してほしい。

関連プロジェクト