分析網路依附元件

本頁說明如何在 Migration Center 中產生及分析網路依附元件報表。

總覽

網路依附元件報表會提供每月匯總資料,說明與伺服器和資料庫的連線。 透過網路依附元件報表,您可以查看基礎架構中所有資產的連線,以及 Migration Center 觀察到連線的次數 (每月匯總)。

如要收集網路依附元件資料,請讓用戶資產評估器執行一段時間,並啟用與 Migration Center 同步處理資料的功能。收集時間越長,Migration Center 就有越多資料可供分析,進而深入瞭解網路依附元件。遷移中心接著會找出掃描資產的所有網路連線。連線中的目標資產可以是您透過用戶資產評估器找到的 Migration Center 資產目錄資產、您手動匯入的資產,甚至是環境外部的未知資產。

網路依附元件報表適用於下列情境:

  • 收集伺服器和資料庫連線的相關資料,找出屬於同一應用程式的資產
  • 在資產群組中找出感興趣的網路連線,例如使用 MySQL 標準通訊埠的所有伺服器
  • 找出商品目錄中缺少的素材資源

您可以從遷移中心將網路依附元件報表下載為 CSV 檔案。接著,您可以使用 BigQuery 和遷移中心提供的查詢範例進行分析,也可以使用任何其他第三方工具。

限制

  • 如要在基礎架構中收集連線資料,必須使用探索用戶端。
  • 只有使用 OS 掃描方法時,才會收集網路連線資料。 vSphere 掃描不支援網路資料收集。

事前準備

  • 建立網路依附元件報表前,您必須先讓效能收集作業與探索用戶端搭配運作。

  • 使用 BigQuery 分析網路依附元件報表前,請先完成下列步驟:

產生網路依附元件報表

如要產生網路依附元件報表,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「建立報表」頁面。

    前往「建立報表」

  2. 按一下「網路依附元件匯出作業」

  3. 從群組清單中選取要產生報表的群組,然後按一下「匯出」

  4. 在隨即顯示的對話方塊中,按一下「匯出」

    系統最多可能需要一小時才能產生匯出報表。報表產生後,系統會開啟「網路依附元件」頁面。

  5. 如要下載特定報表,請按一下「下載」

在 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"