收集跟踪和日志以解决常见的 SDN 问题

适用于:Azure 本地 2311.2 及更高版本;Windows Server 2022、Windows Server 2019

本文介绍了在 Azure Local 上解决软件定义网络 (SDN) 中的常见问题时需要收集哪些数据。 在联系 Microsoft 支持之前,请使用这些信息执行初步故障排除。

先决条件

在开始之前,请确保:

  • 用于收集日志的客户端计算机能够访问 SDN 环境。 例如,一台运行 Windows Admin Center 的、可以访问 SDN 的管理计算机。

  • 你已经安装了 SdnDiagnostics 模块。 有关更多信息,请参阅在 Azure Local 上收集软件定义网络日志

排查预配或配置状态故障

如果网络控制器报告的状态不是成功,请查看网络控制器日志以了解其无法预配或达到所需配置状态的原因。

  • 要返回所有资源(例如虚拟网络)的列表,请运行以下命令:

    Get-SdnResource -NcUri 'https://nc.contoso.com' -Resource VirtualNetwork
    
  • 要查看有关特定资源的更多详细信息,请运行以下命令:

    Get-SdnResource -NcUri 'https://nc.contoso.com' -Resource VirtualNetwork -ResourceId 'Contoso-VNET-01' | ConvertTo-Json -Depth 10
    

ProvisioningState 表示故障的情况下,可以只收集网络控制器角色。

  • 要收集过去四个小时的日志,请运行以下命令:

    Start-SdnDataCollection -Role 'NetworkController' -IncludeLogs
    
  • 要收集创建资源时特定时间窗口的日志,请运行以下命令:

    Start-SdnDataCollection -Role 'NetworkController' -IncludeLogs -FromDate "2024-05-24 09:00:00 AM" -ToDate "2024-05-24 11:00:00 AM"
    

ConfigurationState 指示失败的情况下,你可能需要使用 -Role 调整 Start-SdnDataCollection 以确保捕获正确的数据点。

资源 角色
访问控制列表 NetworkController,Server
网关 NetworkController,Gateway
GatewayPools NetworkController,Gateway
LoadBalancerMuxes NetworkController,LoadBalancerMux
负载均衡器 NetworkController,LoadBalancerMux,Server
LogicalNetworks NetworkController,Server
网络接口 NetworkController,Server
公共IP地址 (PublicIPAddress) NetworkController,LoadBalancerMux,Server
安全标签 NetworkController,Server
服务器 NetworkController,Server
RouteTables NetworkController,Server
VirtualGateways NetworkController,Gateway
VirtualNetworks NetworkController,Server

排除网络 DataPath 故障

在排除流量未按预期运行的故障(如无法访问虚拟 IP 或虚拟机 (VM) 无法访问外部资源)时,应避免完全依赖 ping 协议。 相反,我们强烈建议使用 Test-NetConnection (Windows) 或 telnet (Linux) 来测试您尝试访问的特定终结点。 由于 OS 防火墙和网络防火墙等因素,Ping 可能不可靠,从而导致错误的故障排除结果。 此外,当尝试 ping 负载平衡终结点时,ping 通常默认被阻止。

无论使用何种方法来产生流量,请确保执行大量请求,并注意正在测试的协议(ICMP、TCP、UDP)或端口号以及结果的时间戳。 仅进行一次请求是不够的,并且存在无法捕获数据包的风险,从而会导致错误的数据分析结果。

对于 ping,你可以添加 -t 以将 ping 设为无限。 否则,如果使用的是 Test-NetConnectionTelnet,请将它们放入循环中并捕获 15-30 秒的数据。

例如:

while ($true) {
    Test-NetConnection -ComputerName xx.xx.xx.xx -Port 3389
}

以下是重现问题时建议使用的其他数据点:

  • 从源和目标获取的网络跟踪。
  • 源和目标的 IP 地址。

虚拟网关故障排除 (L3/GRE/IPsec)

本节讨论你遇到以下问题的情况:

  • 无法从外部位置通过虚拟网关访问 VM。
  • 无法通过虚拟网关从与虚拟网关关联的虚拟网络访问资源。

运行以下命令收集进行虚拟网关故障排除所需的跟踪文件:

Get-SdnEnvironmentInfo -NetworkController 'nc01.contoso.com'
Start-SdnNetshTrace -ComputerName $Global:SdnDiagnostics.EnvironmentInfo.Gateway -Role Gateway

# if using IPsec, also need to capture traffic on the MUXes
# Start-SdnNetshTrace -ComputerName $Global:SdnDiagnostics.EnvironmentInfo.LoadBalancerMux -Role 'LoadBalancerMux'

# perform a repro of the issue

Stop-SdnNetshTrace -ComputerName $Global:SdnDiagnostics.EnvironmentInfo.Gateway
# Stop-SdnNetshTrace -ComputerName $Global:SdnDiagnostics.EnvironmentInfo.LoadBalancerMux

生成网络跟踪后,你可以通过运行 Start-SdnDataCollection 来自动获取它们。

# add LoadBalancerMux to -Role if using IPsec in previous step
Start-SdnDataCollection -Role NetworkController,Gateway -IncludeLogs -FromDate (Get-Date).AddHours(-1)

注意

如果你切换到了非默认目录来保存跟踪文件,请记住系统不会自动获取跟踪文件。 你需要手动收集它们。

故障排除负载均衡器 VIP 或入/出站网络地址转换 (NAT)

本节讨论你遇到以下问题的情况:

  • 无法从外部位置访问负载均衡器 VIP。
  • 无法从部署在单独虚拟网络或逻辑网络中的 VM 访问负载均衡器 VIP。
  • 无法从部署在虚拟网络或逻辑网络上的 VM 访问外部(本地或 Internet)位置。

在这些情况下,流量不会通过虚拟网关或网络虚拟设备 (NVA) 进行路由,而是直接由负载均衡器多路复用器进行处理。

Enable-SdnVipTrace 可让启用对流量穿越的数据路径计算机进行跟踪的过程实现自动化。 启用跟踪后,cmdlet 就会暂停以允许你重现问题。 重现问题后,按任意键继续禁用跟踪。

按照以下步骤收集用于排除负载均衡器 VIP 或入站/出站 NAT 故障的跟踪文件:

  1. 要在 datapath 计算机上自动启用跟踪,请运行以下命令:

    Enable-SdnVipTrace -VirtualIP xx.xx.xx.xx -NcUri 'https://nc.contoso.com'
    
  2. 跟踪完成后,若要手动检索跟踪文件,请使用 Copy-SdnFileFromComputer。 它会将 .etl 文件复制到你的工作站。

    或者,若要自动检索网络跟踪,请运行以下命令以使用 Start-SdnDataCollection

    Start-SdnDataCollection -Role NetworkController,LoadBalancerMux -IncludeLogs -FromDate (Get-Date).AddHours(-1)
    

    此外,你的工作站上的工作目录下还会生成一个 {VIP}_TraceMapping.json 文件。 该文件包含用于分析网络跟踪的有价值的信息。

解决东/西向流量流的问题

本节讨论你遇到以下问题的情况:

  • 无法访问部署在同一虚拟网络或逻辑网络上的 VM 的专用 IP 地址。
  • 无法访问部署在单独虚拟网络或逻辑网络上的 VM 的专用 IP 地址。

按照以下步骤收集跟踪文件以解决东/西向流量流的问题:

  1. 确定你托管正在排除故障的 VM 的 Hyper-V 主机。 确定 Hyper-V 主机后,请使用 Start-SdnNetshTraceStop-SdnNetshTrace 执行网络跟踪:

    Start-SdnNetshTrace -ComputerName 'machine01.contoso.com','machine02.contoso.com' -Role:Server
    
    # repro your scenario
    Stop-SdnNetshTrace -ComputerName 'machine01.contoso.com','machine02.contoso.com'
    
  2. 跟踪完成后,若要手动检索跟踪文件,请使用 Copy-SdnFileFromComputer 将 .etl 文件复制到你的工作站。

    或者,若要自动检索网络跟踪,请运行以下命令以使用 Start-SdnDataCollection

    Start-SdnDataCollection -ComputerName 'machine01.contoso.com','machine02.contoso.com' -IncludeLogs -FromDate (Get-Date).AddHours(-1)
    

后续步骤