Dela via


Felsöka problem när du använder Azure Cosmos DB Python SDK med API för NoSQL-konton

GÄLLER FÖR: NoSQL

Viktigt!

Den här artikeln beskriver endast felsökning för Azure Cosmos DB Python SDK. Mer information finns i Viktig information om Azure Cosmos DB Python SDK, Paket (PyPI), Paket (Conda) och prestandatips.

Den här artikeln beskriver vanliga problem, lösningar, diagnostiksteg och verktyg när du använder Azure Cosmos DB Python SDK med Azure Cosmos DB för NoSQL-konton. Azure Cosmos DB Python SDK tillhandahåller logisk representation på klientsidan för åtkomst till Azure Cosmos DB för NoSQL. I den här artikeln beskrivs verktyg och metoder för att hjälpa dig om du stöter på problem.

Börja med den här listan:

  • Ta en titt på avsnittet Vanliga problem och lösningar i den här artikeln.
  • Titta på Python SDK i den centrala lagringsplatsen för Azure Cosmos DB, som är tillgänglig öppen källkod på GitHub. Det har ett problemavsnitt som övervakas aktivt. Kontrollera om något liknande problem med en lösning redan har lämnats in. Ett användbart tips är att filtrera problem efter taggen *Cosmos* .
  • Granska prestandatipsen för Azure Cosmos DB Python SDK och följ de föreslagna metoderna.
  • Läs resten av den här artikeln om du inte hittar någon lösning. Ange sedan ett GitHub-problem. Om det finns ett alternativ för att lägga till taggar i ditt GitHub-problem lägger du till en *Cosmos* tagg.

Logga och samla in diagnostiken

Viktigt!

Vi rekommenderar att du använder den senaste versionen av Python SDK. Du kan kontrollera versionshistoriken här

Det här biblioteket använder standardloggningsbiblioteket för loggningsdiagnostik. Grundläggande information om HTTP-sessioner (URL:er, rubriker osv.) loggas på INFO-nivå.

Detaljerad loggning på FELSÖKNINGsnivå, inklusive begärande-/svarskroppar och oredigerade huvuden, kan aktiveras på en klient med logging_enable argumentet :

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 På samma sätt kan du aktivera detaljerad loggning för en enda åtgärd, även om den inte är aktiverad för klienten:

database = client.create_database(DATABASE_NAME, logging_enable=True)

Du kan också logga med hjälp av CosmosHttpLoggingPolicy, som sträcker sig från azure Core HttpLoggingPolicy, genom att skicka in loggern till logger argumentet. Som standard använder den beteendet från HttpLoggingPolicy. Om du skickar argumentet enable_diagnostics_logging aktiverar CosmosHttpLoggingPolicydu , och kommer att ha ytterligare information i svaret som är relevant för felsökning av Cosmos-problem.

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)

På samma sätt kan loggning aktiveras för en enda åtgärd genom att skicka in en loggning till den unika begäran. Men om du vill använda CosmosHttpLoggingPolicy för att hämta ytterligare information enable_diagnostics_logging måste argumentet skickas till klientkonstruktorn.

# 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)

Designa om

Se vår guide för att utforma motståndskraftiga program med Azure Cosmos DB SDK:er för vägledning om hur du utformar motståndskraftiga program och lär dig vilka som är SDK:s återförsökssemantik.

Vanliga fel och lösningar

Allmänna förslag

För bästa prestanda:

  • Kontrollera att appen körs i samma region som ditt Azure Cosmos DB-konto.
  • Kontrollera CPU-användningen på värden där appen körs. Om CPU-användningen är 50 procent eller mer kör du appen på en värd med en högre konfiguration. Eller så kan du distribuera belastningen på fler datorer.

Kontrollera portalmåtten

Genom att kontrollera portalmåtten kan du avgöra om det är ett problem på klientsidan eller om det finns ett problem med tjänsten. Om måtten till exempel innehåller en hög frekvens av hastighetsbegränsade begäranden (HTTP-statuskod 429) vilket innebär att begäran begränsas kontrollerar du avsnittet Begärandefrekvens för stor .

Anslutningsbegränsning

Anslutningsbegränsning kan inträffa på grund av antingen en [anslutningsgräns på en värddator] eller [Azure SNAT-portöverbelastning (PAT).

Anslutningsgräns på en värddator

Vissa Linux-system, till exempel Red Hat, har en övre gräns för det totala antalet öppna filer. Sockets i Linux implementeras som filer, så det här antalet begränsar även det totala antalet anslutningar. Kör följande kommando.

ulimit -a

Antalet maximalt tillåtna öppna filer, som identifieras som "nofile", måste vara minst dubbelt så stora som din anslutningspool. Mer information finns i Prestandatips för Azure Cosmos DB Python SDK.

Azure SNAT-portöverbelastning (PAT)

Om din app distribueras på virtuella Azure-datorer utan en offentlig IP-adress upprättar Azure SNAT-portar som standard anslutningar till valfri slutpunkt utanför den virtuella datorn. Antalet anslutningar som tillåts från den virtuella datorn till Azure Cosmos DB-slutpunkten begränsas av Azure SNAT-konfigurationen.

Azure SNAT-portar används endast när den virtuella datorn har en privat IP-adress och en process från den virtuella datorn försöker ansluta till en offentlig IP-adress. Det finns två lösningar för att undvika Azure SNAT-begränsning:

  • Lägg till azure Cosmos DB-tjänstslutpunkten i undernätet för ditt virtuella Azure Virtual Machines-nätverk. Mer information finns i Tjänstslutpunkter för Azure Virtual Network.

    När tjänstslutpunkten är aktiverad skickas inte längre begäranden från en offentlig IP-adress till Azure Cosmos DB. I stället skickas det virtuella nätverket och undernätets identitet. Den här ändringen kan leda till att brandväggen tas bort om endast offentliga IP-adresser tillåts. Om du använder en brandvägg lägger du till ett undernät i brandväggen med hjälp av ACL:er för virtuella nätverk när du aktiverar tjänstslutpunkten.

  • Tilldela en offentlig IP-adress till din virtuella Azure-dator.

Det går inte att nå tjänsten – brandvägg

azure.core.exceptions.ServiceRequestError: anger att SDK:t inte kan nå tjänsten. Följ anslutningsgränsen på en värddator.

Det gick inte att ansluta till Azure Cosmos DB-emulatorn

HTTPS-certifikatet för Azure Cosmos DB-emulatorn är självsignerat. Importera emulatorcertifikatet för att Python SDK ska fungera med emulatorn. Mer information finns i Exportera Azure Cosmos DB-emulatorcertifikat.

HTTP-proxy

Om du använder en HTTP-proxy kontrollerar du att den har stöd för antalet anslutningar som konfigurerats i SDK ConnectionPolicy. Annars kan du stöta på anslutningsproblem.

Vanliga frågeproblem

Frågemåtten hjälper dig att avgöra var frågan används för det mesta. Från frågemåtten kan du se hur mycket av det som spenderas på serverdelen jämfört med klienten. Läs mer i frågeprestandaguiden.

Nästa steg