このページでは、Migration Center でネットワーク依存関係レポートを生成して分析する方法について説明します。
概要
ネットワーク依存関係レポートには、サーバーとデータベースへの接続に関する月ごとの集計データが表示されます。ネットワーク依存関係レポートでは、インフラストラクチャ内のアセットへのすべての接続と、Migration Center が接続を検出した回数を月単位で集計して確認できます。
ネットワーク依存関係のデータを収集するには、ディスカバリー クライアントを一定期間実行し、Migration Center とのデータ同期を有効にします。収集期間が長いほど、Migration Center がネットワーク依存関係に関する分析情報を分析するデータ量が増えます。移行センターは、スキャンされたアセットからすべてのネットワーク接続を特定します。接続のターゲット アセットは、ディスカバリー クライアントで検出されたアセット、手動でインポートされたアセット、環境の外部にある不明なアセットなど、Migration Center インベントリ内のアセットにできます。
ネットワーク依存関係レポートは、次のようなシナリオで役立ちます。
- サーバーとデータベースへの接続に関するデータを収集して、同じアプリケーションに属するアセットを特定する
- MySQL 標準ポートを使用するすべてのサーバーなど、アセットのグループ内の対象となるネットワーク接続を特定する
- インベントリで不足しているアセットを特定する
ネットワーク依存関係レポートは、Migration Center から CSV ファイルとしてダウンロードできます。その後、BigQuery や Migration Center が提供するサンプルクエリを使用して分析を行うか、他のサードパーティ ツールを使用します。
制限事項
- インフラストラクチャの接続データを収集するには、ディスカバリー クライアントを使用する必要があります。
- ネットワーク接続データは、OS スキャン方法でのみ収集されます。vSphere スキャンはネットワーク データ収集をサポートしていません。
始める前に
ネットワーク依存関係レポートを作成する前に、検出クライアントでパフォーマンス コレクションが動作している必要があります。
BigQuery でネットワーク依存関係レポートを分析する前に、次の操作を行います。
- ローカルデータを BigQuery にインポートする方法を学習する。
- クエリの実行方法を学習する。
ネットワーク依存関係レポートを生成する
ネットワーク依存関係レポートを生成する手順は次のとおりです。
Google Cloud コンソールで、[レポートの作成] ページに移動します。
[ネットワーク依存関係のエクスポート] をクリックします。
グループのリストからレポートを生成するグループを選択して、[エクスポート] をクリックします。
表示されたダイアログで、[エクスポート] をクリックします。
エクスポートされたレポートの生成には、最大で 1 時間ほどかかることがあります。レポートが生成されると、[ネットワーク依存関係] ページが開きます。
特定のレポートをダウンロードするには、
[ダウンロード] をクリックします。
BigQuery でネットワーク依存関係レポートを分析する
以降のセクションでは、BigQuery で一般的なシナリオを分析するためのサンプルクエリを紹介します。クエリを実行する前に、CSV ファイルを BigQuery にアップロードする必要があります。
BigQuery を使用すると、BigQuery の料金に基づいて課金されます。
接続数の多いアセットを特定する
次のクエリは、グループ内で接続数が最も多いアセットを特定するのに役立ちます。
SELECT
LocalVMName, SUM(ConnectionCount) as TotalCount
FROM
PROJECT.DATASET.TABLE
GROUP BY ALL
ORDER BY TotalCount DESC
次のように置き換えます。
PROJECT
: CSV ファイルをアップロードした Google Cloud プロジェクト。DATASET
: BigQuery データセット。TABLE
: BigQuery テーブル。
このクエリの出力例を次に示します。
LocalVMName | TotalCount |
---|---|
VM-x5ua3o2w | 9970 |
VM-glg5np3w | 9763 |
VM-q3z4zfp8 | 9557 |
VM-2nnsrt37 | 9372 |
VM-1oah56hn | 9350 |
グラフの深さで接続を特定する
次のクエリは、特定の中間接続数で特定のアセットに接続するすべてのアセットを特定するのに役立ちます。次に例を示します。
- グラフの深さが 1 の場合、メインアセットに直接接続されているすべてのアセットが検出されます。
- グラフの深さが 2 の場合、他のアセットに直接接続され、そのアセットがメインアセットに直接接続されているすべてのアセットが検出されます。
DECLARE
local_vm_name STRING DEFAULT MAIN_ASSET;
DECLARE
depth INT64 DEFAULT DEPTH;
CREATE TEMP FUNCTION
recursiveConnections(localVmName STRING,
connectionsArray ARRAY<STRING>,
depth INT64)
RETURNS STRING
LANGUAGE js AS r"""
const connections = connectionsArray.map(connection => connection.split('|||'))
.filter(connectionTuple => connectionTuple[1] !== 'Unscanned Device');
const connectedAssets = new Set([localVmName]);
for (let i = 0; i < depth; i++) {
const currentSet = new Set(connectedAssets);
for (const connection of connections) {
/* Look for connections where the asset is the local asset */
if (currentSet.has(connection[0])) {
connectedAssets.add(connection[1]);
}
/* Look for connections where the asset is the remote asset */
if (currentSet.has(connection[1])) {
connectedAssets.add(connection[0]);
}
}
}
connectedAssets.delete(localVmName);
return Array.from(connectedAssets).sort().join(', ');
""";
SELECT
local_vm_name AS LocalVMName,
recursiveConnections(local_vm_name,
ARRAY_AGG(CONCAT(LocalVMName, '|||', RemoteVMName)),
depth) AS Connections
FROM
PROJECT.DATASET.TABLE
以下を置き換えます。
MAIN_ASSET
: 接続を特定するアセットの名前。DEPTH
: グラフの深さ。
このクエリの出力例を次に示します。
LocalVMName | 接続 |
---|---|
VM-lv8s148f | VM-2z8wp3ey、 VM-66rq2x2y、 VM-94uwyy8h、 VM-ccgmqqmb、 VM-ctqddf0u、 VM-og4n77lb、 ... |
IP 範囲とポート範囲で接続をフィルタする
次のクエリを使用すると、定義した範囲内の IP アドレスとポートを使用するアセットを特定できます。
CREATE TEMP FUNCTION
ipBetween(value STRING,
low STRING,
high STRING) AS ( NET.IPV4_TO_INT64(NET.IP_FROM_STRING(value)) BETWEEN NET.IPV4_TO_INT64(NET.IP_FROM_STRING(low))
AND NET.IPV4_TO_INT64(NET.IP_FROM_STRING(high)) );
SELECT
*
FROM
PROJECT.DATASET.TABLE
WHERE
((LocalPort BETWEEN PORT_START
AND PORT_END)
OR (RemotePort BETWEEN PORT_START
AND PORT_END))
AND (ipBetween(LocalIP,
IP_START,
IP_END)
OR ipBetween(RemoteIP,
IP_START,
IP_END))
以下を置き換えます。
PORT_START
: ポート範囲の最初のポート(0
など)。PORT_END
: ポート範囲の最後のポート(1024
など)。IP_START
: 範囲内の最初の IP アドレス("10.26.0.0"
など)。IP_END
: 範囲内の最後の IP アドレス("10.26.255.255"
など)。
このクエリの出力例を次に示します。
SampleRange | LocalVMName | LocalAssetID | LocalGroups | LocalIP | LocalPort | プロトコル | LocalProcessName | RemoteVMName | RemoteAssetID | RemoteGroups | RemoteIP | RemotePort | ConnectionCount |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2025-06-02T05:59:53Z-2025-06-02T05:59:53Z | VM-0lf60off | projects/982941055174/locations/us-central1/assets/0lf60off | グループ 1 | 10.0.45.138 | 272 | tcp | bash | VM-0spdofr9 | projects/982941055174/locations/us-central1/assets/0spdofr9 | 144.35.88.1 | 272 | 499 | |
2025-07-02T05:59:53Z-2025-07-02T05:59:53Z | VM-goa5uxhi | projects/982941055174/locations/us-central1/assets/goa5uxhi | グループ 3 | 10.187.175.82 | 781 | tcp | bash | VM-27i5d2uj | projects/982941055174/locations/us-central1/assets/27i5d2uj | 22.99.72.109 | 781 | 980 | |
2025-08-02T05:59:53Z-2025-08-02T05:59:53Z | VM-7vwy31hg | projects/982941055174/locations/us-central1/assets/7vwy31hg | グループ 1 | 10.58.166.132 | 21 | tcp | bash | VM-2gq0fl37 | projects/982941055174/locations/us-central1/assets/2gq0fl37 | 147.19.84.135 | 21 | 514 |
ネットワーク内のスキャンされていないアセットを特定する
次のクエリを使用すると、ネットワーク内のスキャンされていないアセットを特定できます。スキャンされていないアセットは、Migration Center のインベントリ内のアセットに関連付けられていないリモート IP アドレスへの接続です。これにより、評価のためにスキャンする必要がある、不足している可能性のあるアセットを特定できます。
CREATE TEMP FUNCTION
ipBetween(value STRING,
low STRING,
high STRING) AS ( NET.IPV4_TO_INT64(NET.IP_FROM_STRING(value)) BETWEEN NET.IPV4_TO_INT64(NET.IP_FROM_STRING(low))
AND NET.IPV4_TO_INT64(NET.IP_FROM_STRING(high)) );
SELECT
STRING_AGG(LocalIP, ', ') AS LocalIPs,
RemoteIP
FROM
PROJECT.DATASET.TABLE
WHERE
RemoteVMName = 'Unscanned Device'
AND ipBetween(LocalIP,
IP_START,
IP_END)
AND ipBetween(RemoteIP,
IP_START,
IP_END)
GROUP BY
RemoteIP
以下を置き換えます。
IP_START
: 範囲内の最初の IP アドレス("10.26.0.0"
など)。IP_END
: 範囲内の最後の IP アドレス("10.26.255.255"
など)。