Problemen oplossen wanneer u Azure Cosmos DB Python SDK gebruikt met API voor NoSQL-accounts
VAN TOEPASSING OP: NoSQL
Belangrijk
Dit artikel bevat alleen informatie over het oplossen van problemen met de Python SDK van Azure Cosmos DB. Raadpleeg de releaseopmerkingen voor De Leesmij-release van Azure Cosmos DB Python SDK, Package (PyPI), Package (Conda) en tips voor betere prestaties voor meer informatie.
In dit artikel worden veelvoorkomende problemen, tijdelijke oplossingen, diagnostische stappen en hulpprogramma's beschreven wanneer u Azure Cosmos DB Python SDK gebruikt met Azure Cosmos DB voor NoSQL-accounts. Azure Cosmos DB Python SDK biedt logische weergave aan de clientzijde voor toegang tot Azure Cosmos DB voor NoSQL. In dit artikel worden tools en benaderingen beschreven om u te helpen bij eventuele problemen.
Begin met deze lijst:
- Bekijk de sectie Veelvoorkomende problemen en tijdelijke oplossingen in dit artikel.
- Bekijk de Python SDK in de centrale opslagplaats van Azure Cosmos DB, die open source beschikbaar is op GitHub. Het bevat een sectie met problemen die actief wordt bewaakt. Controleer of er al een vergelijkbaar probleem met een tijdelijke oplossing is opgeslagen. Een handige tip is om problemen te filteren op de
*Cosmos*
tag. - Bekijk de prestatietips voor de Python SDK van Azure Cosmos DB en volg de voorgestelde procedures.
- Lees de rest van dit artikel als u geen oplossing hebt gevonden. Dien vervolgens een GitHub-probleem in. Als er een optie is om tags toe te voegen aan uw GitHub-probleem, voegt u een
*Cosmos*
tag toe.
Logboekregistratie en vastleggen van de diagnostische gegevens
Belangrijk
U wordt aangeraden de nieuwste versie van python SDK te gebruiken. U kunt hier de releasegeschiedenis controleren
Deze bibliotheek maakt gebruik van de standaardbibliotheek voor logboekregistratie voor diagnostische logboekregistratie. Basisinformatie over HTTP-sessies (URL's, headers, enzovoort) wordt geregistreerd op INFO-niveau.
Gedetailleerde logboekregistratie op FOUTOPSPORINGsniveau, inclusief aanvraag-/antwoordteksten en niet-bewerkte headers, kunnen worden ingeschakeld op een client met het logging_enable
argument:
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)
Op dezelfde manier kan logging_enable
logboekregistratie voor één bewerking inschakelen, zelfs wanneer dit niet is ingeschakeld voor de client:
database = client.create_database(DATABASE_NAME, logging_enable=True)
U kunt ook logboeken maken met behulp van de CosmosHttpLoggingPolicy
, die zich uitbreidt van de Azure-kern HttpLoggingPolicy
, door uw logboekregistratie door te geven aan het logger
argument.
Standaard wordt het gedrag van HttpLoggingPolicy
. Als u het enable_diagnostics_logging
argument doorgeeft, wordt deze CosmosHttpLoggingPolicy
ingeschakeld en krijgt u aanvullende informatie in het antwoord dat relevant is voor het opsporen van fouten in Cosmos-problemen.
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)
Op dezelfde manier kan logboekregistratie worden ingeschakeld voor één bewerking door een logboekregistratie door te geven aan de enkelvoudige aanvraag.
Als u echter de functie wilt gebruiken CosmosHttpLoggingPolicy
om aanvullende informatie te verkrijgen, moet het enable_diagnostics_logging
argument worden doorgegeven aan de clientconstructor.
# 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)
Ontwerp voor opnieuw proberen
Raadpleeg onze handleiding voor het ontwerpen van flexibele toepassingen met Azure Cosmos DB SDK's voor hulp bij het ontwerpen van tolerante toepassingen en het leren van de semantiek voor opnieuw proberen van de SDK.
Veelvoorkomende problemen en tijdelijke oplossingen
Algemene suggesties
Voor de beste prestaties:
- Zorg ervoor dat de app wordt uitgevoerd in dezelfde regio als uw Azure Cosmos DB-account.
- Controleer het CPU-gebruik op de host waarop de app wordt uitgevoerd. Als het CPU-gebruik 50 procent of meer is, voert u uw app uit op een host met een hogere configuratie. Of u kunt de belasting op meer computers distribueren.
- Als u uw toepassing uitvoert in Azure Kubernetes Service, kunt u Azure Monitor gebruiken om het CPU-gebruik te bewaken.
De metrische gegevens van de portal controleren
Door de metrische gegevens van de portal te controleren, kunt u bepalen of het een probleem aan de clientzijde is of of er een probleem is met de service. Als de metrische gegevens bijvoorbeeld een hoge snelheidslimiet voor aanvragen (HTTP-statuscode 429) bevatten, wat betekent dat de aanvraag wordt beperkt, controleert u de sectie Aanvraagsnelheid te groot .
Verbindingsbeperking
Verbindingsbeperking kan optreden vanwege een [verbindingslimiet op een hostcomputer] of [Azure SNAT (PAT) poortuitputting].
Verbindingslimiet op een hostcomputer
Sommige Linux-systemen, zoals Red Hat, hebben een bovengrens voor het totale aantal geopende bestanden. Sockets in Linux worden geïmplementeerd als bestanden, dus dit aantal beperkt ook het totale aantal verbindingen. Voer de volgende opdracht uit.
ulimit -a
Het aantal maximaal toegestane geopende bestanden, die worden geïdentificeerd als 'nofile', moet ten minste een dubbele grootte hebben voor uw verbindingsgroep. Zie de prestatietips voor De Python SDK van Azure Cosmos DB voor meer informatie.
Poortuitputting van Azure SNAT (PAT)
Als uw app is geïmplementeerd op virtuele Azure-machines zonder een openbaar IP-adres, maken standaard Azure SNAT-poorten verbindingen met een eindpunt buiten uw VM. Het aantal verbindingen dat van de VM naar het Azure Cosmos DB-eindpunt is toegestaan, wordt beperkt door de Azure SNAT-configuratie.
Azure SNAT-poorten worden alleen gebruikt wanneer uw VIRTUELE machine een privé-IP-adres heeft en een proces van de VM probeert verbinding te maken met een openbaar IP-adres. Er zijn twee tijdelijke oplossingen om azure SNAT-beperking te voorkomen:
Voeg uw Azure Cosmos DB-service-eindpunt toe aan het subnet van uw virtuele Azure-machines-netwerk. Zie Azure Virtual Network-service-eindpunten voor meer informatie.
Wanneer het service-eindpunt is ingeschakeld, worden de aanvragen niet meer verzonden vanaf een openbaar IP-adres naar Azure Cosmos DB. In plaats daarvan worden de identiteit van het virtuele netwerk en het subnet verzonden. Deze wijziging kan leiden tot een daling van de firewall als alleen openbare IP-adressen zijn toegestaan. Als u een firewall gebruikt en u het service-eindpunt inschakelt, voegt u een subnet toe aan de firewall met behulp van ACL's voor virtueel netwerk.
Wijs een openbaar IP-adres toe aan uw Azure-VM.
Kan de service niet bereiken - firewall
azure.core.exceptions.ServiceRequestError:
geeft aan dat de SDK de service niet kan bereiken. Volg de verbindingslimiet op een hostcomputer.
Fout bij het maken van verbinding met Azure Cosmos DB Emulator
Het HTTPS-certificaat van Azure Cosmos DB Emulator is zelfondertekend. Importeer het emulatorcertificaat om de Python SDK te laten werken met de emulator. Zie Azure Cosmos DB Emulator-certificaten exporteren voor meer informatie.
HTTP-proxy
Als u een HTTP-proxy gebruikt, moet u ervoor zorgen dat deze het aantal verbindingen ondersteunt dat is geconfigureerd in de SDK ConnectionPolicy
.
Anders ondervindt u verbindingsproblemen.
Veelvoorkomende queryproblemen
De metrische querygegevens helpen bepalen waar de query het grootste deel van de tijd doorbrengt. In de metrische querygegevens kunt u zien hoeveel er wordt besteed aan de back-end versus de client. Meer informatie over de handleiding voor queryprestaties.
Volgende stappen
- Meer informatie over prestatierichtlijnen voor de Python SDK
- Meer informatie over de aanbevolen procedures voor de Python SDK