Поделиться через


Диагностика и устранение неполадок при использовании пакета SDK Azure Cosmos DB для .NET

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

В этой статье рассматриваются распространенные проблемы, обходные пути, шаги диагностики и средства при использовании пакета SDK для .NET с учетными записями NoSQL в Azure Cosmos DB. Пакет SDK для .NET предоставляет логическое представление на стороне клиента для доступа к Azure Cosmos DB для NoSQL. В этой статье описываются средства и подходы, которые помогут вам, если вы столкнетесь с проблемами.

Контрольный список для устранения неполадок

Перед тем как переносить приложение в рабочую среду, примените этот контрольный список. Использование этого контрольного списка поможет предотвратить несколько распространенных проблем. Кроме того, с ним вы сможете быстрее диагностировать причины возникновения проблем.

  • Используйте пакет SDK последней версии. Предварительные версии пакетов SDK не следует использовать для приложений в рабочей среде. Это предотвратит проявление известных проблем, которые уже исправлены.
  • Просмотрите советы по повышению производительности и следуйте рекомендациям. Это поможет предотвратить проблемы с масштабированием, задержками и производительностью в целом.
  • Включите ведение журнала для пакета SDK. Это поможет устранить неполадки. Включение ведения журнала может ухудшить производительность, поэтому лучше включать его только на время устранения неполадок. Вы можете включить следующие журналы:
    • Регистрируйте метрики с использованием портала Azure. Метрики портала показывают телеметрию Azure Cosmos DB, которая помогает определить, связана ли проблема с Azure Cosmos DB или с клиентской стороны.
    • В журнал заносятся строки диагностики для операций и (или) исключений.

Ознакомьте с разделом Распространенные проблемы и их обходные решения в этой статье.

Проверьте раздел проблем на GitHub, который активно отслеживается. Проверьте, уже ли зарегистрирована похожая проблема с обходным решением. Если вы не нашли решение, создайте запрос на сайте GitHub. Если проблема срочная, можете создать запрос в службу поддержки.

Сбор диагностических данных

Для всех ответов в пакете SDK, включая CosmosException, доступно свойство Diagnostics. В это свойство записываются все сведения, связанные с одним запросом, в том числе сведения о повторных попытках и временных сбоях.

Диагностика возвращается в виде строки. От версии к версии содержимое этой строки изменяется. Это связано с совершенствованием программного обеспечения для улучшения процесса устранения неполадок в различных сценариях. В каждой версии SDK будут существенные изменения в форматировании строки. Не анализируйте эту строку, чтобы избежать существенных изменений. В следующем примере кода показано, как выполнять чтение данных из журналов диагностики с помощью пакета SDK для .NET.

try
{
    ItemResponse<Book> response = await this.Container.CreateItemAsync<Book>(item: testItem);
    if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan)
    {
        // Log the response.Diagnostics.ToString() and add any additional info necessary to correlate to other logs 
    }
}
catch (CosmosException cosmosException)
{
    // Log the full exception including the stack trace with: cosmosException.ToString()
    
    // The Diagnostics can be logged separately if required with: cosmosException.Diagnostics.ToString()
}

// When using Stream APIs
ResponseMessage response = await this.Container.CreateItemStreamAsync(partitionKey, stream);
if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan || !response.IsSuccessStatusCode)
{
    // Log the diagnostics and add any additional info necessary to correlate to other logs with: response.Diagnostics.ToString()
}

Распространенные проблемы и обходные решения для них

Общие рекомендации

  • Перейдите по любой ссылке aka.ms в сведениях об исключении.
  • Если это возможно, запускайте приложение в том же регионе Azure, где расположена учетная запись Azure Cosmos DB.
  • Вы можете столкнуться с проблемами подключения или доступности из-за недостатка ресурсов на клиентском компьютере. Мы рекомендуем отслеживать использование ЦП в узлах, где выполняется клиент Azure Cosmos DB, и выполнять вертикальное или горизонтальное масштабирование, если они работают под высокой нагрузкой.

Проверка метрик портала

Проверка метрик портала поможет определить, связана ли проблема с клиентом или со службой. Например, если метрики содержат много запросов подряд с кодом состояния HTTP 429 (ограничение количества), значит, к запросам применяется регулирование. В этом случае просмотрите сведения в разделе Слишком высокая частота запросов.

Повторная попытка разработки

Ознакомьтесь с нашим руководством по проектированию устойчивых приложений с помощью SDK для Azure Cosmos DB, чтобы узнать, как проектировать устойчивые приложения и понять, какие повторные попытки поддерживаются SDK.

SNAT.

Если ваше приложение развернуто в службе Виртуальные машины Azure без общедоступного IP-адреса, по умолчанию для подключений к любой конечной точке вне виртуальной машины используются порты Azure SNAT. Количество разрешенных подключений от виртуальной машины к конечной точке Azure Cosmos DB ограничивается конфигурацией Azure SNAT. Такая ситуация может привести к ограничению подключений, закрытию подключений или вышеупомянутым таймаутам запросов.

Порты Azure SNAT используются только в тех случаях, когда виртуальная машина с частным IP-адресом обращается к общедоступному IP-адресу. Есть два обходных решения, которые позволят обойти ограничение Azure SNAT (если вы уже используете единственный экземпляр клиента во всем приложении).

  • Добавьте конечную точку службы Azure Cosmos DB к подсети виртуальной сети для службы "Виртуальные машины Azure". Дополнительные сведения см. в статье Конечные точки служб для виртуальной сети Azure.

    При включении конечной точки службы запросы больше не отправляются с общедоступного IP-адреса в Azure Cosmos DB. Вместо этого отправляются идентификаторы виртуальной сети и подсети. Это изменение может привести к сбою брандмауэра, если разрешены только общедоступные IP-адреса. Если вы используете брандмауэр, при включении конечной точки службы добавьте подсеть в брандмауэр с помощью ACL виртуальной сети.

  • Назначьте общедоступный IP-адрес виртуальной машине Azure.

Большие задержки в сети

Дополнительные сведения об устранении неполадок с задержками см. в этом руководстве.

Сбой при проверке подлинности прокси-сервера

Если отображаются такие ошибки, как HTTP 407:

Response status code does not indicate success: ProxyAuthenticationRequired (407);

Эта ошибка не создается пакетом SDK и не поступает из службы Azure Cosmos DB. Это ошибка, связанная с конфигурацией сети. В конфигурации вашей сети, вероятно, не хватает необходимой аутентификации для прокси-сервера. Если вы не планируете использовать прокси-сервер, обратитесь к своей команде, ответственной за работу сети. Если вы используете прокси-сервер, убедитесь, что при создании экземпляра клиента настроена правильная конфигурация WebProxy в CosmosClientOptions.WebProxy.

Типичные проблемы с запросами

Метрики запроса помогут определить, на что запрос тратит больше всего времени. С помощью метрик запроса можно узнать, какая часть работы выполняется во внутренней службе, а какая в клиенте. Дополнительные сведения см. в руководстве по повышению производительности запросов.

Если при работе в среде Windows произойдет ошибка Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies:, следует обновить систему до последней версии Windows.

Следующие шаги