Управление записью пакетов с помощью Наблюдателя за сетями Azure и Azure REST API
Возможность записи пакетов Наблюдателя за сетями позволяет создавать сеансы записи для отслеживания входящего и исходящего трафика виртуальной машины. Для сеанса записи предоставляются фильтры, которые позволяют убедиться, что записывается только требуемый трафик. Записи пакетов помогают выявить аномалии в работе сети по факту или заранее. Они также помогают выполнять сбор сетевой статистики, получать сведения о сетевых вторжениях, выполнять отладку передачи данных между клиентом и сервером и многое другое. Так как запись пакетов активируется удаленно, ее не нужно запускать вручную. К тому же она сразу выполняется на требуемой виртуальной машине, что также позволяет сэкономить ценное время.
В этой статье вы ознакомитесь с разными задачами управления, доступными в настоящее время для записи пакетов.
- Получение записи пакета
- Вывод списка всех записей пакетов
- Запрос состояния записи пакета
- Запуск записи пакета
- Прекращение записи пакета
- Удаление записи пакета
Примечание
Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Перед началом
В этом сценарии вызывается REST API Наблюдателя за сетями для запуска проверки IP-потока. Чтобы вызвать REST API при помощи командлетов PowerShell, вам потребуется ARMClient. Пакет ARMClient можно скачать на сайте Chocolatey.
В этом сценарии предполагается, что вы создали Наблюдатель за сетями в соответствии с инструкциями в статье Create a Network Watcher (Создание Наблюдателя за сетями).
Для записи пакетов необходимо расширение виртуальной машины
AzureNetworkWatcherExtension
. Информацию об установке расширения для виртуальной машины Windows см. в статье Расширение виртуальной машины агента Наблюдателя за сетями для Windows, а для виртуальной машины Linux — в статье Расширение виртуальной машины агента Наблюдателя за сетями для Linux.
выполните вход с помощью ARMClient;
armclient login
Получение виртуальной машины
Выполните следующий скрипт, чтобы получить сведения о виртуальной машине. Эти сведения необходимы для запуска записи пакетов.
В приведенном ниже коде нужно указать переменные.
- subscriptionId — идентификатор подписки. Его также можно получить с помощью командлета Get-AzSubscription.
- resourceGroupName — имя группы ресурсов, в которой содержатся виртуальные машины.
$subscriptionId = "<subscription id>"
$resourceGroupName = "<resource group name>"
armclient get https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2015-05-01-preview
Идентификатор виртуальной машины из приведенных выходных данных используется в следующем примере.
...
,
"type": "Microsoft.Compute/virtualMachines",
"location": "westcentralus",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute
/virtualMachines/ContosoVM",
"name": "ContosoVM"
}
]
}
Получение записи пакета
В следующем примере возвращается состояние отдельной записи пакета.
$subscriptionId = "<subscription id>"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}/querystatus?api-version=2016-12-01"
Ниже приведены примеры типичных ответов, которые возвращаются при запросе состояния записи пакета.
{
"name": "TestPacketCapture5",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/TestPacketCapture6",
"captureStartTime": "2016-12-06T17:20:01.5671279Z",
"packetCaptureStatus": "Running",
"packetCaptureError": []
}
{
"name": "TestPacketCapture5",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/TestPacketCapture6",
"captureStartTime": "2016-12-06T17:20:01.5671279Z",
"packetCaptureStatus": "Stopped",
"stopReason": "TimeExceeded",
"packetCaptureError": []
}
Вывод списка всех записей пакетов
Следующий пример возвращает все сеансы записи пакетов в регионе.
$subscriptionId = "<subscription id>"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
armclient get "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures?api-version=2016-12-01"
Ниже приведен пример типичного ответа, возвращаемого при получении всех записей пакетов.
{
"value": [
{
"name": "TestPacketCapture6",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/TestPacketCapture6",
"etag": "W/\"091762e1-c23f-448b-89d5-37cf56e4c045\"",
"properties": {
"provisioningState": "Succeeded",
"target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute/virtualMachines/ContosoVM",
"bytesToCapturePerPacket": 0,
"totalBytesPerSession": 1073741824,
"timeLimitInSeconds": 60,
"storageLocation": {
"storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Storage/storageAccounts/contosoexamplergdiag374",
"storagePath": "https://contosoexamplergdiag374.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/contosoexamplerg/providers/microsoft.compute/virtualmachines/contosovm/2016/12/06/packetcap
ture_17_19_53_056.cap",
"filePath": "c:\\temp\\packetcapture.cap"
},
"filters": [
{
"protocol": "Any",
"localIPAddress": "",
"localPort": "",
"remoteIPAddress": "",
"remotePort": ""
}
]
}
},
{
"name": "TestPacketCapture7",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/TestPacketCapture7",
"etag": "W/\"091762e1-c23f-448b-89d5-37cf56e4c045\"",
"properties": {
"provisioningState": "Failed",
"target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute/virtualMachines/ContosoVM",
"bytesToCapturePerPacket": 0,
"totalBytesPerSession": 1073741824,
"timeLimitInSeconds": 60,
"storageLocation": {
"storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Storage/storageAccounts/contosoexamplergdiag374",
"storagePath": "https://contosoexamplergdiag374.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/contosoexamplerg/providers/microsoft.compute/virtualmachines/contosovm/2016/12/06/packetcap
ture_17_23_15_364.cap",
"filePath": "c:\\temp\\packetcapture.cap"
},
"filters": [
{
"protocol": "Any",
"localIPAddress": "",
"localPort": "",
"remoteIPAddress": "",
"remotePort": ""
}
]
}
}
]
}
Запрос состояния записи пакета
Следующий пример возвращает все сеансы записи пакетов в регионе.
$subscriptionId = "<subscription id>"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
armclient get "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}/querystatus?api-version=2016-12-01"
Ниже приведен пример типичного ответа, который возвращается при запросе состояния записи пакета.
{
"name": "vm1PacketCapture",
"id": "/subscriptions/{guid}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}",
"captureStartTime" : "9/7/2016 12:35:24PM",
"packetCaptureStatus" : "Stopped",
"stopReason" : "TimeExceeded",
"packetCaptureError" : [ ]
}
Запуск записи пакета
В следующем примере создается запись пакета на виртуальной машине. Он параметризован таким образом, чтобы обеспечить гибкость при создании примера.
$subscriptionId = '<subscription id>'
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
$storageaccountname = "contosoexamplergdiag374"
$vmName = "ContosoVM"
$bytestoCaptureperPacket = "0"
$bytesPerSession = "1073741824"
$captureTimeinSeconds = "60"
$localIP = ""
$localPort = "" # Examples are: 80, or 80-120
$remoteIP = ""
$remotePort = "" # Examples are: 80, or 80-120
$protocol = "" # Valid values are TCP, UDP and Any.
$targetUri = "" # Example: /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.compute/virtualMachine/$vmName
$storageId = "" #Example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Storage/storageAccounts/contosoexamplergdiag374"
$storagePath = "" # Example: "https://mytestaccountname.blob.core.windows.net/capture/vm1Capture.cap"
$localFilePath = "c:\\temp\\packetcapture.cap" # Example: "d:\capture\vm1Capture.cap"
$requestBody = @"
{
'properties': {
'target': '/${targetUri}',
'bytesToCapturePerPacket': '${bytestoCaptureperPacket}',
'totalBytesPerSession': '${bytesPerSession}',
'timeLimitinSeconds': '${captureTimeinSeconds}',
'storageLocation': {
'storageId': '${storageId}',
'storagePath': '${storagePath}',
'filePath': '${localFilePath}'
},
'filters': [
{
'protocol': '${protocol}',
'localIPAddress': '${localIP}',
'localPort': '${localPort}',
'remoteIPAddress': '${remoteIP}',
'remotePort': '${remotePort}'
}
]
}
}
"@
armclient PUT "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}?api-version=2016-07-01" $requestbody
Прекращение записи пакета
В следующем примере останавливается запись пакета на виртуальной машине. Он параметризован таким образом, чтобы обеспечить гибкость при создании примера.
$subscriptionId = '<subscription id>'
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}/stop?api-version=2016-12-01"
Удаление записи пакета
В следующем примере удаляется запись пакета на виртуальной машине. Он параметризован таким образом, чтобы обеспечить гибкость при создании примера.
$subscriptionId = '<subscription id>'
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
armclient delete "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}?api-version=2016-12-01"
Примечание
При удалении записи пакета файл в учетной записи хранения не удаляется.
Дальнейшие действия
Инструкции по скачиванию файлов из учетных записей хранения Azure см. в статье Приступая к работе с хранилищем BLOB-объектов Azure с помощью .NET. Кроме того, можно использовать такое средство, как Storage Explorer. Дополнительные сведения об обозревателе хранилищ см. на этой странице.
Дополнительные сведения об автоматизации записи пакетов с помощью оповещений на виртуальной машине см. в статье, посвященной созданию записи пакетов, активируемой с использованием оповещений.