本文介绍如何使用 Azure 网络观察程序数据包捕获功能远程配置、启动、停止、下载和删除数据包捕获。
先决条件
具有活动订阅的 Azure 帐户。
免费创建帐户。
虚拟机 (VM) 或虚拟机规模集需具备以下出站 TCP 连接能力:通过端口 169.254.169.254
连接到 80
,以及通过端口 168.63.129.16
连接到 8037
。 网络观察程序代理 VM 扩展使用这些 IP 地址与 Azure 平台进行通信。
网络观察程序代理 VM 扩展已安装在目标虚拟机上。 每当在 Azure 门户中使用网络观察程序数据包捕获时,都会在目标 VM 或规模集上自动安装代理(如果以前未安装)。 要更新已安装的代理,请参阅将 Azure 网络观察程序扩展更新到最新版本。
具有 VM 出站 TCP 连接的 Azure 存储帐户,通过端口 443
连接到该帐户。 如果你没有存储帐户,请参阅使用 Azure 门户创建存储帐户。
- 必须可从目标虚拟机或规模集的子网访问存储帐户。 有关详细信息,请参阅配置 Azure 存储防火墙和虚拟网络。
- 必须启用存储帐户密钥访问,才能允许使用共享访问签名 (SAS) 令牌从网络观察程序发出的请求。
使用 Azure 帐户登录到 Azure 门户。
具有活动订阅的 Azure 帐户。
免费创建帐户。
虚拟机 (VM) 需具备以下出站 TCP 连接能力:通过端口 169.254.169.254
连接到 80
,以及通过端口 168.63.129.16
连接到 8037
。 网络观察程序代理 VM 扩展使用这些 IP 地址与 Azure 平台进行通信。
网络观察程序代理 VM 扩展已安装在目标虚拟机上。 有关详细信息,请参阅管理适用于 Windows 的网络观察程序代理 VM 扩展或适用于 Linux 的网络观察程序代理 VM 扩展。
具有 VM 出站 TCP 连接的 Azure 存储帐户,通过端口 443
连接到该帐户。 如果你没有存储帐户,请参阅使用 PowerShell 创建存储帐户。
- 必须可从目标虚拟机或规模集的子网访问存储帐户。 有关详细信息,请参阅配置 Azure 存储防火墙和虚拟网络。
- 必须启用存储帐户密钥访问,才能允许使用共享访问签名 (SAS) 令牌从网络观察程序发出的请求。
Azure Cloud Shell 或 Azure PowerShell。
本文中的步骤在 Azure Cloud Shell 中以交互方式运行 Azure PowerShell cmdlet 命令。 要在 Cloud Shell 中运行命令,请选择代码块右上角的“打开 Cloud Shell”。 选择“复制”以复制代码,并将其粘贴到 Cloud Shell 以运行。 也可以从 Azure 门户中运行 Cloud Shell。
也可以在本地安装 Azure PowerShell 以运行 cmdlet。 本文需要 Az PowerShell 模块。 有关详细信息,请参阅如何安装 Azure PowerShell。 如果在本地运行 PowerShell,请使用 Connect-AzAccount cmdlet 登录到 Azure。
具有活动订阅的 Azure 帐户。
免费创建帐户。
虚拟机 (VM) 需具备以下出站 TCP 连接能力:通过端口 169.254.169.254
连接到 80
,以及通过端口 168.63.129.16
连接到 8037
。 网络观察程序代理 VM 扩展使用这些 IP 地址与 Azure 平台进行通信。
网络观察程序代理 VM 扩展已安装在目标虚拟机上。 有关详细信息,请参阅管理适用于 Windows 的网络观察程序代理 VM 扩展或适用于 Linux 的网络观察程序代理 VM 扩展。
具有 VM 出站 TCP 连接的 Azure 存储帐户,通过端口 443
连接到该帐户。 如果没有存储帐户,请参阅使用 Azure CLI 创建存储帐户。
- 必须可从目标虚拟机或规模集的子网访问存储帐户。 有关详细信息,请参阅配置 Azure 存储防火墙和虚拟网络。
- 必须启用存储帐户密钥访问,才能允许使用共享访问签名 (SAS) 令牌从网络观察程序发出的请求。
Azure Cloud Shell 或 Azure CLI。
本文中的步骤在 Azure Cloud Shell 中以交互方式运行 Azure CLI 命令。 要在 Cloud Shell 中运行命令,请选择代码块右上角的“打开 Cloud Shell”。 选择“复制”以复制代码,并将其粘贴到 Cloud Shell 以运行。 也可以从 Azure 门户中运行 Cloud Shell。
还可以 在本地安装 Azure CLI 以运行命令。 如果在本地运行 Azure CLI,请使用 az login 命令登录到 Azure。
启动数据包捕获
若要启动捕获会话,请使用以下步骤:
在门户顶部的搜索框中,输入“网络观察程序”。 在搜索结果中,选择“网络观察程序”。
在“网络诊断工具”下选择“数据包捕获”,然后选择“+ 添加”以创建数据包捕获。
在“添加数据包捕获”中,输入或选择以下设置的值:
设置 |
价值 |
基本详细信息 |
|
订阅 |
选择虚拟机的 Azure 订阅。 |
资源组 |
选择虚拟机的资源组。 |
目标类型 |
选择“虚拟机”或“虚拟机规模集”。 |
目标虚拟机规模集 |
选择虚拟机规模集。 如果选择“虚拟机规模集”作为目标类型,则可以使用此选项。 |
目标实例 |
选择虚拟机或规模集实例。 |
数据包捕获名称 |
输入名称或保留默认名称。 |
数据包捕获配置 |
|
捕获位置 |
选择“存储帐户”(默认选项)、“文件”或“两者”。 |
存储帐户 |
选择“标准”存储帐户1。 如果选择了“存储帐户”或“两者”作为捕获位置,则此选项可用。 存储帐户必须与缓存位于同一区域中。 |
本地文件路径 |
输入要在目标虚拟机中保存捕获的有效本地文件路径。 如果使用的是 Linux 计算机,路径可以以 /var/captures 开头。 如果使用的是 Windows 计算机,路径可以以 C:\Captures 开头。 如果选择了“文件”或“两者”作为捕获位置,则此选项可用。 |
每个数据包的最大字节数 |
输入每个数据包要捕获的最大字节数。 如果留空或输入 0,则会捕获所有字节。 |
每个会话的最大字节数 |
输入捕获的字节总数。 一旦达到此值,数据包捕获便停止。 如果留空,最多捕获 1 GB。 |
时间限制(秒) |
输入数据包捕获会话的时间限制(以秒为单位)。 一旦达到此值,数据包捕获便停止。 如果留空,则最多捕获 5 小时(18,000 秒)。 |
筛选(可选) |
|
添加筛选条件 |
选择“添加筛选条件”以添加新筛选器。 可以根据需要定义任意数量的筛选器。 |
协议 |
根据所选协议筛选数据包捕获。 可用值为 TCP、UDP 或 Any。 |
本地 IP 地址2 |
在数据包捕获中筛选其中的本地 IP 地址与此值匹配的数据包。 |
本地端口2 |
在数据包捕获中筛选其中的本地端口与此值匹配的数据包。 |
远程 IP 地址2 |
将数据包捕获筛选为远程 IP 地址与此值匹配的数据包。 |
远程端口2 |
在数据包捕获中筛选其中的远程端口与此值匹配的数据包。 |
1 目前不支持使用高级存储帐户存储数据包捕获。
2 端口和 IP 地址值可以是单个值、某个范围(例如 80-1024),或多个值(例如 80、443)。
选择“启动数据包捕获”。
达到时间限制或达到每个会话的最大字节数后,数据包捕获将停止。
要启动捕获会话,请使用 New-AzNetworkWatcherPacketCapture cmdlet:
# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'
# Place the storage account configuration into a variable.
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'myResourceGroup' -Name 'mystorageaccount'
# Start the Network Watcher capture session.
New-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1' -TargetVirtualMachineId $vm.Id -StorageAccountId $storageAccount.Id
启动捕获会话后,会看到以下输出:
ProvisioningState Name BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ---- ----------------------- -------------------- ------------------
Succeeded myVM_1 0 1073741824 18000
下表介绍了可用于 New-AzNetworkWatcherPacketCapture cmdlet 的可选参数:
参数 |
描述 |
-Filter |
添加筛选器以仅捕获所需的流量。 例如,可以只捕获从特定 IP 地址到特定端口的 TCP 流量。 |
-TimeLimitInSeconds |
设置捕获会话的最长持续时间。 默认值为 18000 秒(5 小时)。 |
-BytesToCapturePerPacket |
设置每个数据包要捕获的最大字节数。 如果未使用或输入了 0,则会捕获所有字节。 |
-TotalBytesPerSession |
设置捕获的字节总数。 一旦达到此值,数据包捕获便停止。 如果未使用,则最多捕获 1 GB(1073741824 字节)。 |
-LocalFilePath |
如果希望将捕获保存在目标虚拟机中(例如 C:\Capture\myVM_1.cap),请输入有效的本地文件路径。 如果你使用的是 Linux 计算机,则路径必须以 /var/captures 开头。 |
达到时间限制或达到每个会话的最大字节数后,数据包捕获将停止。
若要启动捕获会话,请使用 az network watcher packet-capture create 命令:
# Start the Network Watcher capture session.
az network watcher packet-capture create --name 'myVM_1' --resource-group 'myResourceGroup' --vm 'myVM' --storage-account 'mystorageaccount'
# Start the Network Watcher capture session (storage account is in different resource group from the VM).
az network watcher packet-capture create --name 'myVM_1' --resource-group 'myResourceGroup' --vm 'myVM' --storage-account '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup2/providers/Microsoft.Storage/storageAccounts/mystorageaccount'
启动捕获会话后,会看到以下输出:
{
"bytesToCapturePerPacket": 0,
"etag": "W/\"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb\"",
"filters": [],
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_eastus/packetCaptures/myVM_1",
"name": "myVM_1",
"provisioningState": "Succeeded",
"resourceGroup": "NetworkWatcherRG",
"scope": {
"exclude": [],
"include": []
},
"storageLocation": {
"storageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
"storagePath": "https://mystorageaccount.blob.core.windows.net/network-watcher-logs/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2025/01/31/packetcapture_16_39_41_077.cap"
},
"target": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"targetType": "AzureVM",
"timeLimitInSeconds": 18000,
"totalBytesPerSession": 1073741824
}
下表介绍了可用于 az network watcher packet-capture create 命令的可选参数:
参数 |
描述 |
--filters |
添加筛选器以仅捕获所需的流量。 例如,可以只捕获从特定 IP 地址到特定端口的 TCP 流量。 |
--time-limit |
设置捕获会话的最长持续时间。 默认值为 18000 秒(5 小时)。 |
--capture-size |
设置每个数据包要捕获的最大字节数。 如果未使用或输入了 0,则会捕获所有字节。 |
--capture-limit |
设置捕获的字节总数。 一旦达到此值,数据包捕获便停止。 如果未使用,则最多捕获 1 GB(1073741824 字节)。 |
--file-path |
如果希望将捕获保存在目标虚拟机中(例如 C:\Capture\myVM_1.cap),请输入有效的本地文件路径。 如果你使用的是 Linux 计算机,则路径必须以 /var/captures 开头。 |
达到时间限制或达到每个会话的最大字节数后,数据包捕获将停止。
停止数据包捕获
若要在数据包捕获会话达到其时间限制或文件大小限制之前手动停止该会话,请选择数据包捕获右侧的省略号“...”,或右键单击,然后选择“停止”。
若要在数据包捕获会话达到其时间限制或文件大小限制之前手动停止该会话,请使用 Stop-AzNetworkWatcherPacketCapture cmdlet。
# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'
注意
无论在当前正在运行的捕获会话还是已停止的会话上运行,该 cmdlet 都不会返回响应。
若要在数据包捕获会话达到其时间限制或文件大小限制之前手动停止该会话,请使用 az network watcher packet-capture stop 命令。
# Manually stop a packet capture session.
az network watcher packet-capture stop --___location 'eastus' --name 'myVM_1'
注意
无论在当前正在运行的捕获会话还是已停止的会话上运行,该命令都不会返回响应。
查看数据包捕获状态
转到网络观察程序的“数据包捕获”页,列出现有数据包捕获,而不考虑其状态。
使用 Get-AzNetworkWatcherPacketCapture cmdlet 检索数据包捕获的状态(正在运行或已完成)。
# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'
以下输出是 Get-AzNetworkWatcherPacketCapture
cmdlet 的输出示例。 以下示例是捕获完成后的输出结果。 PacketCaptureStatus 值为“已停止”,StopReason 为 TimeExceeded。 此值显示数据包捕获已成功完成,并已运行了限定的时间。
ProvisioningState Name Target BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ---- ------ ----------------------- -------------------- ------------------
Succeeded myVM_1 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0 1073741824 18000
注意
若要获取输出中的更多详细信息,请在命令末尾添加 | Format-List
。
使用 az network watcher packet-capture show-status 命令检索数据包捕获的状态(正在运行或已完成)。
# Get information, properties, and status of a packet capture.
az network watcher packet-capture show-status --___location 'eastus' --name 'myVM_1'
以下示例是 az network watcher packet-capture show-status
命令的输出。 可以看到 packetCaptureStatus 值已停止,其 StopReason 值为 TimeExceeded:
{
"additionalProperties": {
"status": "Succeeded"
},
"captureStartTime": "2016-12-06T17:20:01.5671279Z",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_eastus/packetCaptures/myVM_1",
"name": "packetCaptureName",
"packetCaptureError": [],
"packetCaptureStatus": "Stopped",
"stopReason": "TimeExceeded"
}
下载数据包捕获
完成数据包捕获会话后,生成的捕获文件将保存到 Azure 存储、目标虚拟机中的本地文件或这两个位置。 数据包捕获的存储目的地在其创建期间指定。 有关详细信息,请参阅“启动数据包捕获”部分。
若要下载保存到 Azure 存储的数据包捕获文件,请执行以下步骤:
在“数据包捕获”页中,选择要下载其文件的数据包捕获。
在“详细信息”部分,选择数据包捕获文件链接。
在 blob 页中,选择“下载”。
还可以通过直接转到以下路径的存储帐户容器来下载捕获文件:
https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap
如果指定了存储帐户,则捕获文件将保存到以下路径的存储帐户:
https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap
若要将数据包捕获从 Azure 存储下载到本地磁盘,请使用 Get-AzStorageBlobContent cmdlet:
# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'
如果指定了存储帐户,则捕获文件将保存到以下路径的存储帐户:
https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap
若要将数据包捕获从 Azure 存储下载到本地磁盘,请使用 az storage blob download 命令:
# Download the packet capture file from Azure storage container.
az storage blob download --container-name 'network-watcher-logs' --blob-url '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' --file 'C:\Capture\myVM_1.cap'
注意
可以使用 Azure 存储资源管理器从存储帐户容器下载捕获文件。 存储资源管理器是可用于访问和处理 Azure 存储数据的独立应用。 有关详细信息,请参阅存储资源管理器入门。
重要
在数据包捕获会话期间,捕获文件可能不会立即出现在存储帐户容器中,因为它最初保存在临时位置。 文件在捕获会话完成后传输到其最终位置。
要下载保存到虚拟机 (VM) 的数据包捕获文件,请连接到 VM 并从数据包捕获创建期间指定的本地路径下载文件。
删除数据包捕获
在“数据包捕获”页中,选择要删除的数据包捕获右侧的“...”,或右键单击,然后选择“删除”。
选择是。
重要
删除网络观察程序中的数据包捕获资源不会删除存储帐户或虚拟机中的捕获文件。 如果不再需要捕获文件,则必须从存储帐户或虚拟机中手动将其删除。
相关内容