本頁說明如何在 Migration Center 中產生及分析網路依附元件報表。
總覽
網路依附元件報表會提供每月匯總資料,說明與伺服器和資料庫的連線。 透過網路依附元件報表,您可以查看基礎架構中所有資產的連線,以及 Migration Center 觀察到連線的次數 (每月匯總)。
如要收集網路依附元件資料,請讓用戶資產評估器執行一段時間,並啟用與 Migration Center 同步處理資料的功能。收集時間越長,Migration Center 就有越多資料可供分析,進而深入瞭解網路依附元件。遷移中心接著會找出掃描資產的所有網路連線。連線中的目標資產可以是您透過用戶資產評估器找到的 Migration Center 資產目錄資產、您手動匯入的資產,甚至是環境外部的未知資產。
網路依附元件報表適用於下列情境:
- 收集伺服器和資料庫連線的相關資料,找出屬於同一應用程式的資產
- 在資產群組中找出感興趣的網路連線,例如使用 MySQL 標準通訊埠的所有伺服器
- 找出商品目錄中缺少的素材資源
您可以從遷移中心將網路依附元件報表下載為 CSV 檔案。接著,您可以使用 BigQuery 和遷移中心提供的查詢範例進行分析,也可以使用任何其他第三方工具。
限制
- 如要在基礎架構中收集連線資料,必須使用探索用戶端。
- 只有使用 OS 掃描方法時,才會收集網路連線資料。 vSphere 掃描不支援網路資料收集。
事前準備
建立網路依附元件報表前,您必須先讓效能收集作業與探索用戶端搭配運作。
使用 BigQuery 分析網路依附元件報表前,請先完成下列步驟:
- 瞭解如何將本機資料匯入 BigQuery。
- 瞭解如何執行查詢。
產生網路依附元件報表
如要產生網路依附元件報表,請按照下列步驟操作:
前往 Google Cloud 控制台的「建立報表」頁面。
按一下「網路依附元件匯出作業」。
從群組清單中選取要產生報表的群組,然後按一下「匯出」。
在隨即顯示的對話方塊中,按一下「匯出」。
系統最多可能需要一小時才能產生匯出報表。報表產生後,系統會開啟「網路依附元件」頁面。
如要下載特定報表,請按一下「下載」
。
在 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 |
找出網路中未掃描的資產
您可以使用下列查詢,找出聯播網中任何未掃描的資產。 未掃描的資產是指連線至遠端 IP 位址,但與 Migration Center 廣告空間中的任何資產無關。這有助於找出可能缺少的資產,以便掃描評估。
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"
。