Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: 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 виртуальной сети.
Большие задержки в сети
Дополнительные сведения об устранении неполадок с задержками см. в этом руководстве.
Сбой при проверке подлинности прокси-сервера
Если отображаются такие ошибки, как 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.
Следующие шаги
- Ознакомьтесь с рекомендациями по обеспечению производительности для пакета SDK для NET.
- Ознакомьтесь с рекомендациями по работе с пакетом SDK для NET.