Udostępnij za pośrednictwem


Rozwiązywanie problemów podczas korzystania z zestawu SDK języka Python usługi Azure Cosmos DB z interfejsem API dla kont NoSQL

DOTYCZY: NoSQL

Ważne

W tym artykule opisano rozwiązywanie problemów tylko z zestawem SDK języka Python usługi Azure Cosmos DB. Aby uzyskać więcej informacji, zobacz informacje o wersji readmezestawu SDK języka Python dla usługi Azure Cosmos DB, pakiet (PyPI), pakiet (Conda) i porady dotyczące wydajności.

W tym artykule opisano typowe problemy, obejścia, kroki diagnostyczne i narzędzia podczas korzystania z zestawu SDK języka Python usługi Azure Cosmos DB z kontami noSQL w usłudze Azure Cosmos DB. Zestaw SDK języka Python usługi Azure Cosmos DB zapewnia logiczną reprezentację po stronie klienta w celu uzyskania dostępu do usługi Azure Cosmos DB for NoSQL. W tym artykule opisano narzędzia i podejścia pomocne w przypadku napotkania jakichkolwiek problemów.

Zacznij od tej listy:

  • Zapoznaj się z sekcją Typowe problemy i obejścia w tym artykule.
  • Zapoznaj się z zestawem SDK języka Python w centralnym repozytorium usługi Azure Cosmos DB, które jest dostępne w usłudze GitHub. Zawiera sekcję problemów, która jest aktywnie monitorowana. Sprawdź, czy wystąpił już podobny problem z obejściem. Jedną z przydatnych wskazówek jest filtrowanie problemów według tagu *Cosmos* .
  • Zapoznaj się z poradami dotyczącymi wydajności zestawu SDK języka Python usługi Azure Cosmos DB i postępuj zgodnie z sugerowaną praktyką.
  • Przeczytaj resztę tego artykułu, jeśli nie znajdziesz rozwiązania. Następnie zgłoś problem z usługą GitHub. Jeśli istnieje opcja dodawania tagów do problemu z usługą *Cosmos* GitHub, dodaj tag.

Rejestrowanie i przechwytywanie diagnostyki

Ważne

Zalecamy korzystanie z najnowszej wersji zestawu PYTHON SDK. Historię wersji można sprawdzić tutaj

Ta biblioteka używa standardowej biblioteki rejestrowania na potrzeby diagnostyki rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.

Szczegółowe rejestrowanie na poziomie DEBUG, w tym treść żądania/odpowiedzi i nieredagowane nagłówki, można włączyć na kliencie z argumentem 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 Podobnie można włączyć szczegółowe rejestrowanie dla pojedynczej operacji, nawet jeśli nie jest włączona dla klienta:

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

Alternatywnie możesz zalogować się przy użyciu CosmosHttpLoggingPolicyelementu , który rozciąga się od podstawowego HttpLoggingPolicyelementu platformy Azure, przekazując rejestrator do argumentu logger . Domyślnie będzie on używać zachowania z klasy HttpLoggingPolicy. Przekazanie argumentu enable_diagnostics_loggingCosmosHttpLoggingPolicyspowoduje włączenie elementu i będzie zawierać dodatkowe informacje w odpowiedzi dotyczącej debugowania problemów z usługą 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)

Podobnie rejestrowanie można włączyć dla pojedynczej operacji, przekazując rejestrator do pojedynczego żądania. Jeśli jednak chcesz użyć elementu w CosmosHttpLoggingPolicy celu uzyskania dodatkowych informacji, enable_diagnostics_logging argument musi zostać przekazany w konstruktorze klienta.

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

Ponawianie próby projektu

Zapoznaj się z naszym przewodnikiem dotyczącym projektowania odpornych aplikacji przy użyciu zestawów SDK usługi Azure Cosmos DB, aby uzyskać wskazówki dotyczące projektowania odpornych aplikacji i dowiedz się, które są semantyka ponawiania próby zestawu SDK.

Typowe problemy i ich rozwiązania

Sugestie ogólne

Aby uzyskać najlepszą wydajność:

  • Upewnij się, że aplikacja działa w tym samym regionie co konto usługi Azure Cosmos DB.
  • Sprawdź użycie procesora CPU na hoście, na którym działa aplikacja. Jeśli użycie procesora CPU wynosi co najmniej 50 procent, uruchom aplikację na hoście z wyższą konfiguracją. Możesz też rozłożyć obciążenie na więcej maszyn.

Sprawdzanie metryk portalu

Sprawdzenie metryk portalu pomoże określić, czy jest to problem po stronie klienta, czy występuje problem z usługą. Jeśli na przykład metryki zawierają wysoką częstotliwość żądań ograniczonych szybkością (kod stanu HTTP 429), co oznacza, że żądanie jest ograniczane, sprawdź zbyt dużą sekcję Częstotliwość żądań.

Ograniczanie przepustowości Połączenie ion

Połączenie ograniczanie przepustowości może wystąpić z powodu [limitu połączeń na maszynie hosta] lub [wyczerpania portów SNAT (PAT) platformy Azure].

limit Połączenie ion na maszynie hosta

Niektóre systemy Linux, takie jak Red Hat, mają górny limit całkowitej liczby otwartych plików. Gniazda w systemie Linux są implementowane jako pliki, więc ta liczba ogranicza łączną liczbę połączeń. Uruchom następujące polecenie:

ulimit -a

Liczba maksymalnych dozwolonych otwartych plików, które są identyfikowane jako "nofile", musi być co najmniej dwukrotnie większy niż rozmiar puli połączeń. Aby uzyskać więcej informacji, zobacz Porady dotyczące wydajności zestawu SDK języka Python usługi Azure Cosmos DB.

Wyczerpanie portów SNAT (PAT) platformy Azure

Jeśli aplikacja jest wdrażana na maszynach wirtualnych platformy Azure bez publicznego adresu IP, domyślnie porty SNAT platformy Azure nawiązują połączenia z dowolnym punktem końcowym poza maszyną wirtualną. Liczba połączeń dozwolonych z maszyny wirtualnej do punktu końcowego usługi Azure Cosmos DB jest ograniczona przez konfigurację protokołu SNAT platformy Azure.

Porty SNAT platformy Azure są używane tylko wtedy, gdy maszyna wirtualna ma prywatny adres IP i proces z maszyny wirtualnej próbuje nawiązać połączenie z publicznym adresem IP. Istnieją dwa obejścia, aby uniknąć ograniczenia usługi Azure SNAT:

  • Dodaj punkt końcowy usługi Azure Cosmos DB do podsieci sieci wirtualnej usługi Azure Virtual Machines. Aby uzyskać więcej informacji, zobacz Punkty końcowe usługi Azure Virtual Network.

    Po włączeniu punktu końcowego usługi żądania nie są już wysyłane z publicznego adresu IP do usługi Azure Cosmos DB. Zamiast tego są wysyłane tożsamości sieci wirtualnej i podsieci. Ta zmiana może spowodować porzucenie zapory, jeśli dozwolone są tylko publiczne adresy IP. Jeśli używasz zapory, po włączeniu punktu końcowego usługi dodaj podsieć do zapory przy użyciu list ACL sieci wirtualnej.

  • Przypisz publiczny adres IP do maszyny wirtualnej platformy Azure.

Nie można nawiązać połączenia z usługą — zapora

azure.core.exceptions.ServiceRequestError: wskazuje, że zestaw SDK nie może nawiązać połączenia z usługą. Postępuj zgodnie z limitem Połączenie ion na maszynie hosta.

Niepowodzenie nawiązywania połączenia z emulatorem usługi Azure Cosmos DB

Certyfikat HTTPS emulatora usługi Azure Cosmos DB jest z podpisem własnym. Aby zestaw SDK języka Python działał z emulatorem, zaimportuj certyfikat emulatora. Aby uzyskać więcej informacji, zobacz Eksportowanie certyfikatów emulatora usługi Azure Cosmos DB.

Serwer proxy HTTP

Jeśli używasz serwera proxy HTTP, upewnij się, że może obsługiwać liczbę połączeń skonfigurowanych w zestawie SDK ConnectionPolicy. W przeciwnym razie występują problemy z połączeniem.

Typowe problemy z zapytaniami

Metryki zapytań pomogą określić, gdzie zapytanie spędza większość czasu. Z metryk zapytania możesz zobaczyć, ile z niego jest wydawane na zapleczu a klientem. Dowiedz się więcej na temat przewodnika dotyczącego wydajności zapytań.

Następne kroki

  • Dowiedz się więcej o wytycznych dotyczących wydajności dla zestawu PYTHON SDK
  • Dowiedz się więcej o najlepszych rozwiązaniach dotyczących zestawu PYTHON SDK