Устранение неполадок сети
В этой статье описывается несколько средств, которые могут диагностировать проблемы с сетью различных сложностей. К этим проблемам относятся сценарии, начиная от устранения неполадок с неожиданным значением ответа от службы и заканчивая выявлением первопричины исключения закрытого подключения.
Для устранения неполадок на стороне клиента клиентские библиотеки Azure для Java предлагают согласованную и надежную историю ведения журнала, как описано в разделе Настройка ведения журнала в пакете SDK Azure для Java. Однако клиентские библиотеки выполняют сетевые вызовы по различным протоколам, что может привести к сценарию устранения неполадок, выходящему за пределы заданной области устранения неполадок. При возникновении этих проблем решение — использовать внешние средства, описанные в этой статье, для диагностики сетевых проблем.
Скрипач
Fiddler — это прокси-сервер отладки HTTP, который позволяет регистрировать запросы и ответы, передаваемые через него as-is. Необработанные запросы и ответы, которые можно записать, могут помочь в устранении неполадок, когда служба получает непредвиденный запрос, или клиент получает непредвиденный ответ. Чтобы использовать Fiddler, необходимо настроить клиентскую библиотеку через прокси-сервер HTTP. Если вы используете ПРОТОКОЛ HTTPS, вам потребуется дополнительная конфигурация для проверки расшифрованных тел запроса и ответа.
Добавление прокси-сервера HTTP
Чтобы добавить прокси-сервер HTTP, следуйте инструкциям в настройке прокси-серверов в пакете SDK Azure для Java. Не забудьте использовать адрес Fiddler по умолчанию localhost
на порту 8888.
Включение расшифровки HTTPS
По умолчанию Fiddler может записывать только HTTP-трафик. Если приложение использует ПРОТОКОЛ HTTPS, необходимо выполнить дополнительные действия, чтобы доверять сертификату Fiddler, чтобы разрешить ему записывать трафик HTTPS. Дополнительные сведения см. в меню HTTPS документации Fiddler.
Ниже показано, как использовать среду выполнения Java (JRE) для доверия к сертификату. Если сертификат не является доверенным, запрос HTTPS через Fiddler может завершиться ошибкой с предупреждениями системы безопасности.
Экспорт сертификата Fiddler.
Найдите ключевой инструмент JRE (обычно в jre/bin).
Найдите cacert JRE (обычно в jre/lib/security).
Откройте окно Bash и выполните следующую команду, чтобы импортировать сертификат:
sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
Введите пароль.
Доверяйте сертификату.
Wireshark
Wireshark — это анализатор сетевого протокола, который может записывать сетевой трафик, не требуя изменений в коде приложения. Wireshark является высококонфигурируемым и может захватывать как общий, так и специфический низкоуровневый сетевой трафик. Эта возможность полезна для устранения неполадок в сценариях, таких как закрытие соединения удаленным узлом или прерывание соединений во время операции. Графический интерфейс Wireshark отображает записи с помощью цветовой схемы, которая идентифицирует уникальные случаи захвата, например повторную передачу TCP, RST и т. д. Вы также можете фильтровать записи во время записи или во время анализа.
Настройка фильтра записи
Фильтры отслеживания снижают количество сетевых вызовов, которые записываются для анализа. Без фильтров записи Wireshark фиксирует весь трафик, проходящий через сетевой интерфейс. Это поведение может создавать огромные объемы данных, большинство из которых может оказаться шумом для исследования. Использование фильтра захвата помогает заранее ограничить сетевой трафик, подлежащий фиксации, чтобы упростить исследование. См. дополнительную информацию в разделе "Сбор данных в реальном времени в сети" в документации Wireshark.
В следующем примере добавляется фильтр отслеживания для записи сетевого трафика, отправленного или полученного от определенного узла.
В Wireshark перейдите к фильтрам захвата >..., а затем добавьте новый фильтр со значением host <host-IP-or-hostname>
. Этот фильтр перехватывает трафик только к этому узлу и от него. Если приложение взаимодействует с несколькими узлами, можно добавить несколько фильтров записи или добавить IP-адрес или имя узла с логическим оператором 'OR', чтобы обеспечить менее строгую фильтрацию захвата.
Запись на диск
Возможно, вам потребуется запустить приложение в течение длительного времени, чтобы воспроизвести неожиданное сетевое исключение и просмотреть трафик, который приводит к нему. Кроме того, может быть невозможно сохранить все записи в памяти. К счастью, Wireshark может записывать записи на диск, чтобы они были доступны для последующей обработки. Этот подход позволяет избежать риска нехватки памяти при воспроизведении проблемы. Дополнительные сведения см. в разделе Входные данные, выходные данные и печать в документации Wireshark.
В следующем примере показано, как настроить Wireshark для сохранения записей на диск с несколькими файлами, в которых файлы разделены на 100 кб или размер 50 МБ.
В Wireshark перейдите к параметры захвата > и найдите вкладку Выходные данные, затем введите имя файла для назначения. Эта конфигурация приводит к тому, что Wireshark сохраняет записи в одном файле.
Чтобы включить запись в несколько файлов, выберите Создать новый файл автоматически, а затем выберите после 100000 пакетов и после 50 мегабайт. Эта конфигурация заставляет Wireshark создать новый файл, когда выполнен один из предикатов. Каждый новый файл использует то же базовое имя, что и введенное имя файла, и добавляет уникальный идентификатор.
Если вы хотите ограничить количество файлов, которые может создать Wireshark, выберите Использовать кольцевой буфер с X-файлами. Этот параметр ограничивает Wireshark ведением журнала только с указанным количеством файлов. По достижении этого количества файлов Wireshark начинает перезаписывать файлы, начиная с самого старого.
Снимки фильтров
Иногда невозможно жестко ограничить трафик, который записывает Wireshark, например, если приложение взаимодействует с несколькими узлами с помощью различных протоколов. В этом сценарии при использовании постоянной записи, как описано ранее, проще проводить анализ после захвата сетевого трафика. Wireshark поддерживает синтаксис, подобный фильтру, для анализа записей. Для получения дополнительной информации см. раздел "Работа с захваченными пакетами" в документации Wireshark.
В следующем примере загружается сохраненный файл записи и выполняется фильтрация по ip.src_host==<IP>
.
В Wireshark перейдите к файлу > Открыть и загрузите сохраненный захват из местоположения файла, использованного ранее. После загрузки файла под строкой меню появится входной фильтр. В входных данных фильтра введите ip.src_host==<IP>
. Этот фильтр ограничивает представление записи, чтобы он отображал только записи, в которых источник был из узла с IP-<IP>
.
Дальнейшие действия
В этой статье рассматриваются различные средства для диагностики сетевых проблем при работе с пакетом SDK Azure для Java. Теперь, когда вы знакомы с высокоуровневыми сценариями использования, вы можете начать изучение самого пакета SDK. Дополнительные сведения о доступных API см. в Azure SDK для Java-библиотек.