使用 PowerShell 通过 Azure 网络观察程序管理虚拟机规模集中的数据包捕获

使用网络观察程序数据包捕获,可以创建捕获会话以跟踪进出虚拟机规模集实例的流量。 为捕获会话提供了筛选器以确保仅捕获所需的流量。 数据包捕获有助于以主动和被动方式诊断网络异常。 其他用途包括收集网络统计信息,获得网络入侵信息,调试客户端与服务器之间的通信,等等。 如果能够远程触发数据包捕获,则可以减轻在所需虚拟机规模集实例上手动运行数据包捕获的负担,节省宝贵的时间。

本文将引导完成当前可用于数据包捕获的不同管理任务。

准备阶段

本文假定你拥有以下资源:

  • 要创建数据包捕获的区域中的网络观察程序实例

重要

数据包捕获需要虚拟机规模集扩展 AzureNetworkWatcherExtension。 有关在 Windows VM 上安装扩展的信息,请访问适用于 Windows 的 Azure 网络观察程序代理虚拟机扩展;有关 Linux VM 的信息,请访问适用于 Linux 的 Azure 网络观察程序代理虚拟机扩展

安装虚拟机规模集扩展

步骤 1

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

步骤 2

在虚拟机规模集/虚拟机规模集实例上安装 networkWatcherAgent

Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "AzureNetworkWatcherExtension" -Publisher "Microsoft.Azure.NetworkWatcher" -Type "NetworkWatcherAgentWindows" -TypeHandlerVersion "1.4" -AutoUpgradeMinorVersion $True

Update-AzVmss -ResourceGroupName "$resourceGroupName" -Name $virtualMachineScaleSetName -VirtualMachineScaleSet $vmss
Update-AzVmssInstance -ResourceGroupName "$resourceGroupName" -VMScaleSetName $vmss.Name -InstanceId 0
> The `Set-AzVMExtension` cmdlet may take several minutes to complete.

步骤 3

若要确保已安装代理,请按照步骤 1 操作

Get-AzVMss -ResourceGroupName $vmss.ResourceGroupName -VMScaleSetName $vmss.Name

启动数据包捕获

完成前面的步骤后,数据包捕获代理将安装在虚拟机规模集上。

步骤 1

下一步是检索网络观察程序实例。 将此变量传递给步骤 4 中的 New-AzNetworkWatcherPacketCapture cmdlet。

$networkWatcher = Get-AzNetworkWatcher  | Where {$_.Location -eq "chinaeast" }

步骤 2

检索存储帐户。 此存储帐户用于存储数据包捕获文件。

$storageAccount = Get-AzStorageAccount -ResourceGroupName testrg -Name testrgsa123

步骤 3

可以使用筛选器来限制数据包捕获存储的数据。 以下示例设置两个筛选器。 第一个筛选器仅收集从本地 IP 10.0.0.3 发往目标端口 20、80 和 443 的传出 TCP 流量。 第二个筛选器仅收集 UDP 流量。

$filter1 = New-AzPacketCaptureFilterConfig -Protocol TCP -RemoteIPAddress "1.1.1.1-255.255.255.255" -LocalIPAddress "10.0.0.3" -LocalPort "1-65535" -RemotePort "20;80;443"
$filter2 = New-AzPacketCaptureFilterConfig -Protocol UDP

注意

可以为数据包捕获定义多个筛选器。

步骤 4

创建数据包捕获的范围

$s1 = New-AzPacketCaptureScopeConfig -Include "0", "1"

步骤 5

运行 New-AzNetworkWatcherPacketCaptureV2 cmdlet 并传递在上一步骤中检索的所需值,启动数据包捕获过程。


New-AzNetworkWatcherPacketCaptureV2 -NetworkWatcher $networkwatcher -PacketCaptureName $pcName -TargetId $vmss.Id -TargetType "azurevmss" -StorageAccountId $storageAccount.id -Filter $filter1, $filter2

获取数据包捕获

运行 Get-AzNetworkWatcherPacketCapture cmdlet,检索当前正在运行的或已完成的数据包捕获的状态。

Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"

以下示例是 Get-AzNetworkWatcherPacketCapture cmdlet 的输出。 以下示例是捕获完成后的输出结果。 PacketCaptureStatus 值为“已停止”,StopReason 为 TimeExceeded。 此值显示数据包捕获已成功完成,并已运行了限定的时间。

Name                    : PacketCaptureTest
Id                      : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatcher
                          s/NetworkWatcher_chinaeast/packetCaptures/PacketCaptureTest
Etag                    : W/"4b9a81ed-dc63-472e-869e-96d7166ccb9b"
ProvisioningState       : Succeeded
Target                  : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Compute/virtualMachines/testvm1
BytesToCapturePerPacket : 0
TotalBytesPerSession    : 1073741824
TimeLimitInSeconds      : 60
StorageLocation         : {
                            "StorageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Storage/storageA
                          ccounts/examplestorage",
                            "StoragePath": "https://examplestorage.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/00000000-0000-0000-0000-00000
                          0000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/testvm1/2017/02/01/packetcapture_22_42_48_238.cap"
                          }
Filters                 : [
                            {
                              "Protocol": "TCP",
                              "RemoteIPAddress": "1.1.1.1-255.255.255",
                              "LocalIPAddress": "10.0.0.3",
                              "LocalPort": "1-65535",
                              "RemotePort": "20;80;443"
                            },
                            {
                              "Protocol": "UDP",
                              "RemoteIPAddress": "",
                              "LocalIPAddress": "",
                              "LocalPort": "",
                              "RemotePort": ""
                            }
                          ]
CaptureStartTime        : 2/1/2017 10:43:01 PM
PacketCaptureStatus     : Stopped
StopReason              : TimeExceeded
PacketCaptureError      : []

停止数据包捕获

运行 Stop-AzNetworkWatcherPacketCapture cmdlet 后,如果捕获会话正在进行,它将停止。

Stop-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"

注意

该 cmdlet 在当前正在运行的捕获会话或已停止的现有会话中运行时,将不返回任何响应。

删除数据包捕获

Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"

注意

删除数据包捕获不会删除存储帐户中的文件。

下载数据包捕获

完成数据包捕获会话后,可以将捕获文件上传到 blob 存储或实例上的本地文件。 数据包捕获的存储位置是在创建会话时定义的。 用于访问这些保存到存储帐户的捕获文件的便利工具是 Microsoft Azure 存储资源管理器,下载地址为:https://storageexplorer.com/

如果指定了存储帐户,则数据包捕获文件将保存到以下位置的存储帐户:

如果选择了多个实例

https://{storageAccountName}.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachinescalesets/{VMSSName}/{year}/{month}/{day}/packetCapture_{creationTime}

如果选择了单个实例

https://{storageAccountName}.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachinescalesets/{VMSSName}/virtualMachines/{instance}/{year}/{month}/{day}/packetCapture_{creationTime}.cap

后续步骤

访问查看“IP 流验证”,了解是否允许某些流量传入和传出 VM