Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
В этой статье описывается устранение неполадок только пакета SDK для Python для Azure Cosmos DB. Дополнительные сведения см. в Readme, заметках о выпуске SDK Azure Cosmos DB для Python, на странице пакета (PyPI), пакета (Conda) и советах по производительности.
В этой статье рассматриваются распространенные проблемы, обходные пути, этапы диагностики и инструменты при использовании Python SDK “Azure Cosmos DB” с учетными записями Azure Cosmos DB для NoSQL. Пакет SDK для Python для Azure Cosmos DB предоставляет логическое представление на стороне клиента для доступа к Azure Cosmos DB для NoSQL. В этой статье описываются средства и подходы, которые помогут вам, если вы столкнетесь с проблемами.
Начните со следующего списка:
- Ознакомьте с разделом Распространенные проблемы и их обходные решения в этой статье.
- Просмотрите пакет SDK для Python в центральном репозитории Azure Cosmos DB, который доступен как проект с открытым исходным кодом на GitHub. В нем есть раздел проблем , который активно отслеживается. Проверьте, уже ли зарегистрирована похожая проблема с обходным решением. Одним из полезных советов является фильтрация проблем по тегу
*Cosmos*. - Ознакомьтесь с советами по производительности пакета SDK для Python для Azure Cosmos DB и следуйте рекомендациям.
- Прочитайте остальную часть этой статьи, если вы не нашли решение. Затем создайте проблему на GitHub. Если есть возможность добавить теги в проблему GitHub, добавьте
*Cosmos*тег.
Ведение журнала и запись диагностики
Это важно
Рекомендуется использовать последнюю версию пакета SDK для Python. Журнал выпусков можно проверить здесь
Эта библиотека использует стандартную библиотеку ведения журнала для диагностики ведения журнала. Основные сведения о сеансах HTTP (URL-адресах, заголовках и т. д.) регистрируются на уровне INFO.
Подробное логирование уровня отладки, включая содержимое запросов и ответов и нередактированные заголовки, можно активировать на клиенте с помощью аргумента logging_enable:
import sys
import logging
from azure.cosmos import CosmosClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# This client will log detailed information about its HTTP sessions, at DEBUG level
client = CosmosClient(URL, credential=KEY, logging_enable=True)
Аналогичным образом с помощью параметра logging_enable можно включить подробное журналирование для отдельной операции (даже если этот режим не включен в клиенте):
database = client.create_database(DATABASE_NAME, logging_enable=True)
Кроме того, вы можете вести журнал с помощью функции CosmosHttpLoggingPolicy, которая является расширением ядра HttpLoggingPolicy Azure, передавая ваш логгер в качестве аргумента logger.
По умолчанию оно будет использовать поведение из HttpLoggingPolicy. Передача аргумента enable_diagnostics_logging будет включать CosmosHttpLoggingPolicy и предоставлять дополнительные сведения в ответе, относящиеся к отладке проблем Cosmos.
import logging
from azure.cosmos import CosmosClient
#Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a file output
handler = logging.FileHandler(filename="azure")
logger.addHandler(handler)
# This client will log diagnostic information from the HTTP session by using the CosmosHttpLoggingPolicy.
# Since we passed in the logger to the client, it will log information on every request.
client = CosmosClient(URL, credential=KEY, logger=logger, enable_diagnostics_logging=True)
Аналогичным образом, журналирование можно включить для одной операции, передав его в отдельный запрос.
Однако если вы хотите использовать CosmosHttpLoggingPolicy для получения дополнительной информации, аргумент enable_diagnostics_logging необходимо передать в конструкторе клиента.
# This example enables the `CosmosHttpLoggingPolicy` and uses it with the `logger` passed in to the `create_database` request.
client = CosmosClient(URL, credential=KEY, enable_diagnostics_logging=True)
database = client.create_database(DATABASE_NAME, logger=logger)
Повторная попытка разработки
Ознакомьтесь с нашим руководством по проектированию устойчивых приложений с помощью SDK для Azure Cosmos DB, чтобы узнать, как проектировать устойчивые приложения и понять, какие повторные попытки поддерживаются SDK.
Распространенные проблемы и обходные решения для них
Общие рекомендации
Обеспечить наилучшую производительность можно так.
- Убедитесь, что приложение запущено в том же регионе, что и учетная запись Azure Cosmos DB.
- Проверьте использование ЦП на узле, где работает приложение. Если загрузка ЦП составляет 50 процентов или больше, запустите приложение на узле с более высокой конфигурацией. Кроме того, вы можете распределить нагрузку на другие компьютеры.
- Если вы используете приложение в службе Azure Kubernetes, вы можете использовать Azure Monitor для мониторинга использования ЦП.
Проверка метрик портала
Проверка метрик портала поможет определить, связана ли проблема с клиентом или со службой. Например, если метрики содержат много запросов подряд с кодом состояния HTTP 429 (ограничение количества), значит, к запросам применяется регулирование. В этом случае просмотрите сведения в разделе Слишком высокая частота запросов.
Регулирование подключений
Регулирование подключений может произойти из-за [ограничения подключения на хост-компьютере] или [исчерпания портов SNAT (PAT) Azure].
Ограничение подключения на хост-компьютере
Некоторые системы Linux, такие как Red Hat, имеют верхний предел общего количества открытых файлов. Сокеты в Linux реализованы в виде файлов, поэтому это число также ограничивает общее количество подключений. Выполните следующую команду.
ulimit -a
Максимально допустимое количество разрешенных открытых файлов, которые определяются как "nofile", должно быть по крайней мере в два раза больше размера пула подключений. Дополнительные сведения см. в советах по производительности пакета SDK для Python для Azure Cosmos DB.
Исчерпание портов SNAT (PAT) Azure
Если приложение развернуто на виртуальных машинах Azure без общедоступного IP-адреса, по умолчанию порты SNAT Azure устанавливают подключения к любой конечной точке за пределами виртуальной машины. Количество разрешенных подключений от виртуальной машины к конечной точке Azure Cosmos DB ограничивается конфигурацией Azure SNAT.
Порты SNAT Azure используются только в том случае, если у виртуальной машины есть частный IP-адрес, а процесс из виртуальной машины пытается подключиться к общедоступному IP-адресу. Существует два обходных решения, чтобы избежать ограничения SNAT Azure:
Добавьте конечную точку службы Azure Cosmos DB к подсети виртуальной сети для службы "Виртуальные машины Azure". Дополнительные сведения см. в статье Конечные точки служб для виртуальной сети Azure.
При включении конечной точки службы запросы больше не отправляются с общедоступного IP-адреса в Azure Cosmos DB. Вместо этого отправляются идентификаторы виртуальной сети и подсети. Это изменение может привести к сбою брандмауэра, если разрешены только общедоступные IP-адреса. Если вы используете брандмауэр, при включении конечной точки службы добавьте подсеть в брандмауэр с помощью ACL виртуальной сети.
Назначьте общедоступный IP-адрес виртуальной машине Azure.
Не удается связаться со службой — брандмауэр
azure.core.exceptions.ServiceRequestError: указывает, что пакет SDK не может связаться со службой. Следуйте ограничению подключения на хост-компьютере.
Сбой подключения к эмулятору Azure Cosmos DB
Сертификат HTTPS эмулятора Azure Cosmos DB самозаверяется. Чтобы пакет SDK Python работал с эмулятором, импортируйте сертификат эмулятора. Дополнительные сведения см. в статье "Экспорт сертификатов эмулятора Azure Cosmos DB".
Прокси-сервер HTTP
При использовании прокси-сервера HTTP убедитесь, что он может поддерживать число подключений, указанное в свойстве ConnectionPolicy пакета SDK.
В противном случае возникнут проблемы с подключением.
Типичные проблемы с запросами
Метрики запроса помогут определить, на что запрос тратит больше всего времени. С помощью метрик запроса можно узнать, какая часть работы выполняется во внутренней службе, а какая в клиенте. Дополнительные сведения см. в руководстве по повышению производительности запросов.
Дальнейшие шаги
- Сведения о рекомендациях по производительности пакета SDK для Python
- Узнайте о лучших практиках для Python SDK