本页面介绍了如何在 Migration Center 中生成和分析网络依赖关系报告。
概览
网络依赖项报告提供有关与服务器和数据库的连接的每日汇总数据。 通过网络依赖关系报告,您可以查看与基础架构中资产的所有连接,以及每天的连接数。
如需收集网络依赖项数据,请让资产识别客户端运行几天,并启用与迁移中心同步数据的功能。然后,资产识别客户端会识别来自已扫描资产的所有网络连接。连接中的目标资产可以是您在 Migration Center 目录中通过资产识别客户端发现或手动导入的任何资产,也可以是未知资产。
网络依赖关系报告适用于以下情况:
- 收集有关与服务器和数据库的连接的数据,以识别属于同一应用的资产,
- 识别一组资产中相关网络连接,例如,使用 MySQL 标准端口的所有服务器
- 识别资产库中缺失的资产
您可以从迁移中心以 CSV 文件格式下载网络依赖关系报告。然后,您可以使用 BigQuery 和 Migration Center 提供的示例查询执行分析,也可以使用任何其他第三方工具执行。
限制
- 如需在基础架构中收集连接数据,请使用发现客户端。
- 系统只会使用 OS 扫描方法收集网络连接数据。 vSphere 扫描不支持网络数据收集。
准备工作
在创建网络依赖项报告之前,您必须使用资产识别客户端进行性能收集。
在使用 BigQuery 分析网络依赖关系报告之前,请执行以下操作:
- 了解如何将本地数据导入 BigQuery。
- 了解如何运行查询。
生成网络依赖关系报告
要生成网络依赖关系报告,请按以下步骤操作:
前往报告目录页面。
点击网络依赖关系报告。
从群组列表中,选择要为哪些群组生成报告,然后点击导出。
在出现的对话框中,选择要导出数据的天数(介于 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 |
---|---|
虚拟机 x5ua3o2w | 9970 |
虚拟机 glg5np3w | 9763 |
虚拟机 q3z4zfp8 | 9557 |
虚拟机 2nnsrt37 | 9372 |
虚拟机 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 | 连接 |
---|---|
虚拟机 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"
。
以下是此查询的示例输出:
Day | LocalVMName | LocalAssetID | LocalGroups | LocalIP | LocalPort | 协议 | LocalProcessName | RemoteVMName | RemoteAssetID | RemoteGroups | RemoteIP | RemotePort | ConnectionCount |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2024-04-18 | VM-0lf60 关闭 | projects/982941055174/locations/us-central1/assets/0lf60off | 群组 1 | 10.0.45.138 | 272 | tcp | bash | 虚拟机 0spdofr9 | projects/982941055174/locations/us-central1/assets/0spdofr9 | 144.35.88.1 | 272 | 499 | |
2024-04-18 | 虚拟机 Goa5uxhi | projects/982941055174/locations/us-central1/assets/goa5uxhi | 群组 3 | 10.187.175.82 | 781 | tcp | bash | 虚拟机 27i5d2uj | projects/982941055174/locations/us-central1/assets/27i5d2uj | 22.99.72.109 | 781 | 980 | |
2024-04-19 | 虚拟机 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 地址的连接,该 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"
。