使用 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