このページでは、Migration Center でネットワーク依存関係レポートを生成して分析する方法について説明します。
概要
ネットワーク依存関係レポートには、サーバーとデータベースへの接続に関する日次集計データが表示されます。ネットワーク依存関係レポートでは、インフラストラクチャ内のアセットへのすべての接続と、1 日あたりの接続数を確認できます。
ネットワーク依存関係のデータを収集するには、ディスカバリー クライアントを数日間実行し、Migration Center とのデータ同期を有効にします。ディスカバリー クライアントは、スキャンされたアセットからすべてのネットワーク接続を識別します。接続のターゲット アセットは、ディスカバリー クライアントで検出されたアセット、手動でインポートされたアセット、不明なアセットなど、Migration Center インベントリ内の任意のアセットにできます。
ネットワーク依存関係レポートは、次のようなシナリオで役立ちます。
- サーバーやデータベースへの接続に関するデータを収集して、同じアプリケーションに属するアセットを特定する
- MySQL 標準ポートを使用するすべてのサーバーなど、アセットのグループ内で関心のあるネットワーク接続を特定する
- インベントリで不足しているアセットを特定する
ネットワーク依存関係レポートは、Migration Center から CSV ファイルとしてダウンロードできます。その後、BigQuery や Migration Center が提供するサンプルクエリを使用して分析を行うか、他のサードパーティ ツールを使用します。
制限事項
- インフラストラクチャの接続データを収集するには、ディスカバリー クライアントを使用します。
- ネットワーク接続データは、OS スキャン方法でのみ収集されます。vSphere スキャンは、ネットワーク データの収集をサポートしていません。
始める前に
ネットワーク依存関係レポートを作成する前に、ディスカバリー クライアントで動作するパフォーマンス コレクションが必要です。
BigQuery でネットワーク依存関係レポートを分析する前に、次の操作を行います。
- ローカルデータを BigQuery にインポートする方法を学習する。
- クエリの実行方法を学習する。
ネットワーク依存関係レポートを生成する
ネットワーク依存関係レポートを生成する手順は次のとおりです。
Google Cloud コンソールで、[レポートの作成] ページに移動します。
[ネットワーク依存関係のエクスポート] をクリックします。
グループのリストから、レポートを生成するグループを選択して、[エクスポート] をクリックします。
表示されたダイアログで、データをエクスポートする日数(最小 10 日、最大 90 日)を選択し、[エクスポート] をクリックします。
ファイルが生成されたら、[ダウンロード] をクリックします。
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"
など)。
このクエリの出力例を次に示します。
日 | LocalVMName | LocalAssetID | LocalGroups | LocalIP | LocalPort | プロトコル | LocalProcessName | RemoteVMName | RemoteAssetID | RemoteGroups | RemoteIP | RemotePort | ConnectionCount |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2024-04-18 | 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 | |
2024-04-18 | 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 | |
2024-04-19 | 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"
など)。