Compartilhar via


Gerenciar capturas de pacotes em máquinas virtuais com o Observador de Rede do Azure usando o PowerShell

A ferramenta de captura de pacotes do Observador de Rede permite que você crie sessões de captura para registrar o tráfego de rede de uma VM (máquina virtual) do Azure, tanto de entrada quanto de saída. Os filtros são fornecidos para a sessão de captura garantir que somente o tráfego que você deseja capturar. A captura de pacotes ajuda a diagnosticar problemas de rede de maneiras reativas e proativas. As aplicações dela vão além da detecção de anomalias para incluir a coleta de estatísticas de rede, a aquisição de insights sobre invasões de rede, a depuração da comunicação cliente-servidor e a resolução de vários outros desafios de rede. A captura de pacotes do Observador de Rede permite que você inicie capturas de pacote remotamente, aliviando a necessidade de execução manual em uma máquina virtual específica.

Neste artigo, você aprenderá a configurar, iniciar, interromper, baixar e excluir remotamente uma captura de pacotes de máquina virtual usando o Azure PowerShell. Para saber como gerenciar capturas de pacotes usando o portal do Azure ou a CLI do Azure, consulte Gerenciar capturas de pacotes para máquinas virtuais usando o portal do Azure ou Gerenciar capturas de pacotes em máquinas virtuais usando a CLI do Azure.

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.

  • Azure Cloud Shell ou Azure PowerShell.

    As etapas desse artigo executam os cmdlets do Azure PowerShell interativamente no Azure Cloud Shell. Para executar os comandos no Cloud Shell, selecione Abrir o Cloud Shell no canto superior direito de um bloco de código. Selecione Copiar para copiar o código e cole-o no Cloud Shell para executá-lo. Você também pode executar o Cloud Shell no portal do Azure.

    Você também pode instalar o Azure PowerShell localmente para executar os cmdlets. Este artigo requer o módulo Az do Azure PowerShell. Para obter mais informações, confira Como instalar o Azure PowerShell. Para localizar a versão instalada, execute Get-InstalledModule -Name Az. Se você executar o PowerShell localmente, entre no Azure usando a cmdlet Connect-AzAccount.

  • Uma máquina virtual com a seguinte conectividade TCP de saída:

    • para a conta de armazenamento pela porta 443
    • para 169.254.169.254 na porta 80
    • para 168.63.129.16 na porta 8037

Observação

  • O Azure criará uma instância do Observador de Rede na região da máquina virtual se o Observador de Rede não estiver habilitado para essa região. Para obter mais informações, consulte Habilitar ou desabilitar o Observador de Rede do Azure.
  • A captura de pacotes do Observador de Rede requer que a extensão de VM do agente do Observador de Rede seja instalada na máquina virtual de destino. Para obter mais informações, consulte Instalar o agente do Observador de Rede.
  • Os dois últimos endereços IP e portas listados nos Pré-requisitos são comuns a todas as ferramentas do Observador de Rede que usam o agente do Observador de Rede e podem mudar ocasionalmente.

Se um grupo de segurança de rede estiver associado ao adaptador de rede ou à sub-rede na qual o adaptador de rede está, verifique se de existem regras que permitem a conectividade de saída nas portas anteriores. Da mesma forma, verifique a conectividade de saída nas portas anteriores ao adicionar rotas definidas pelo usuário à rede.

Habilitar o agente do Observador de Rede

Para usar a captura de pacotes, a extensão de máquina virtual do agente do Observador de Rede deve estar instalada na máquina virtual.

Use o cmdlet Get-AzVMExtension para verificar se a extensão está instalada na máquina virtual:

# List the installed extensions on the virtual machine.
Get-AzVMExtension -VMName 'myVM' -ResourceGroupName 'myResourceGroup' | format-table Name, Publisher, ExtensionType, EnableAutomaticUpgrade 

Se a extensão estiver instalada na máquina virtual, você poderá vê-la listada na saída do comando anterior:

Name                         Publisher                      ExtensionType            EnableAutomaticUpgrade
----                         ---------                      -------------            ----------------------
AzureNetworkWatcherExtension Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux                   True

Se a extensão não estiver instalada, use o cmdlet Set-AzVMExtension para instalá-la:

# Install Network Watcher agent on a Linux virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentLinux' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 
# Install Network Watcher agent on a Windows virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentWindows' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 

Após uma instalação bem-sucedida da extensão, você verá a seguinte saída:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK 

Iniciar uma captura de pacotes

Para iniciar uma sessão de captura, use o cmdlet New-AzNetworkWatcherPacketCapture:

# 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 

Depois que a sessão de captura for iniciada, você verá a seguinte saída:

ProvisioningState Name   BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ----------------------- -------------------- ------------------
Succeeded         myVM_1 0                       1073741824           18000

A tabela a seguir descreve os parâmetros opcionais que você pode usar com o cmdlet New-AzNetworkWatcherPacketCapture:

Parâmetro descrição
-Filter Adicione filtros para capturar apenas o tráfego desejado. Por exemplo, você pode capturar apenas o tráfego TCP de um endereço IP específico para uma porta específica.
-TimeLimitInSeconds Defina a duração máxima da sessão de captura. O valor padrão é 18000 segundos (5 horas).
-BytesToCapturePerPacket Defina o número máximo de bytes a serem capturados por cada pacote. Todos os bytes serão capturados se não forem usados ou se for inserido 0.
-TotalBytesPerSession Defina o número total de bytes capturados. Quando o valor é atingido, a captura de pacotes é interrompida. Até 1 GB (1.073.741.824 bytes) será capturado se não for usado.
-LocalFilePath Insira um caminho de arquivo local válido se desejar que a captura seja salva na máquina virtual de destino (por exemplo, C:\Capture\myVM_1.cap). Se você estiver usando um computador Linux, o caminho deverá começar com /var/captures.

Parar uma captura de pacotes

Use o cmdlet Stop-AzNetworkWatcherPacketCapture para interromper manualmente uma sessão de captura de pacotes em execução.

# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Observação

O cmdlet não retorna uma resposta, seja executado em uma sessão de captura em andamento ou em uma sessão que já foi encerrada.

Obter uma captura de pacote

Use o cmdlet Get-AzNetworkWatcherPacketCapture para recuperar o status de uma captura de pacotes (em execução ou concluída).

# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

A saída a seguir é um exemplo da saída do cmdlet Get-AzNetworkWatcherPacketCapture. O exemplo a seguir é após a conclusão da captura. O valor de PacketCaptureStatus é Parado, com um StopReason de TimeExceeded. Esse valor mostra que a captura de pacote foi bem-sucedida e executou seu tempo.

ProvisioningState Name   Target                                                                                                                              BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ------                                                                                                                              ----------------------- -------------------- ------------------
Succeeded         myVM_1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0                       1073741824           18000

Observação

Para obter mais detalhes na saída, adicione | Format-List ao final do comando.

Baixar um pacote de capturas

Quando a sessão de captura de pacotes for concluída, o arquivo de captura resultante será salvo em um armazenamento do Azure, em um arquivo local na máquina virtual de destino ou ambos. O destino de armazenamento para a captura de pacotes é especificado durante a criação dela. Para obter mais informações, consulte Iniciar uma captura de pacotes.

Se uma conta de armazenamento for especificada, os arquivos de captura serão salvos na conta de armazenamento no seguinte caminho:

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap

Para baixar um arquivo de captura de pacotes salvo no armazenamento do Azure, use o cmdlet Get-AzStorageBlobContent:

# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob 'subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'

Observação

Você também pode baixar o arquivo de captura no contêiner da conta de armazenamento usando o Gerenciador de Armazenamento do Azure. O Gerenciador de Armazenamento é um aplicativo autônomo que você pode usar para, de maneira prática, acessar e trabalhar com os dados do Armazenamento do Azure. Para obter mais informações, confira Introdução ao Gerenciador de Armazenamento.

Excluir uma captura de pacote

# Remove a packet capture resource.
Remove-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Importante

Excluir uma captura de pacotes no Observador de Rede não exclui o arquivo de captura da conta de armazenamento nem da máquina virtual. Se você não precisar mais do arquivo de captura, precisará excluí-lo manualmente da conta de armazenamento para evitar incorrer em custos de armazenamento.