分析网络依赖项

本页介绍了如何在迁移中心生成和分析网络依赖项报告。

概览

“网络依赖项”报告会提供有关与服务器和数据库的连接的每日汇总数据。通过网络依赖项报告,您可以查看与基础架构中资产的所有连接,以及每天的连接数。

如需收集网络依赖项数据,您需要让资产识别客户端运行几天,并启用与 Migration Center 同步数据的功能。然后,资产发现客户端会识别扫描到的资产中的所有网络连接。关联中的目标资产可以是 Migration Center 广告资源中您使用资产识别客户端发现或手动导入的任何资产,甚至是未知资产。

网络依赖项报告在以下情况下非常有用:

  • 收集与服务器和数据库的连接相关的数据,以识别属于同一应用的资源
  • 识别一组资产中的感兴趣的网络连接,例如使用 MySQL 标准端口的所有服务器
  • 找出商品目录中缺少的素材资源

您可以从迁移中心下载网络依赖项报告的 CSV 文件。然后,您可以使用 BigQuery 和迁移中心提供的示例查询执行分析,也可以使用任何其他第三方工具。

限制

  • 如需在基础架构中收集连接数据,请使用发现客户端。
  • 系统仅通过操作系统扫描方法收集网络连接数据。 vSphere 扫描不支持网络数据收集。

准备工作

  • 在创建网络依赖项报告之前,您必须先让性能数据收集功能与发现客户端搭配使用。

  • 在使用 BigQuery 分析网络依赖项报告之前,请执行以下操作:

生成网络依赖项报告

如需生成网络依赖项报告,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往创建报告页面。

    前往“创建报告”页面

  2. 点击网络依赖项导出

  3. 从群组列表中,选择要为其生成报告的群组,然后点击导出

  4. 在随即显示的对话框中,选择要导出的数据天数(最短 10 天,最长 90 天),然后点击导出

  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"

以下是此查询的输出示例:

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"