Sdílet prostřednictvím


Řešení potíží při používání sady Azure Cosmos DB Python SDK s API pro NoSQL účty.

PLATÍ PRO: NoSQL

Důležité

Tento článek popisuje řešení potíží pouze se sadou Python SDK služby Azure Cosmos DB. Další informace najdete v dokumentaci Readme, v poznámkách k vydání, v balíčku (PyPI), v balíčku (Conda) a ve výkonových tipech.

Tento článek se zabývá běžnými problémy, alternativními řešeními, kroky diagnostiky a nástroji při používání sady Python SDK služby Azure Cosmos DB s účty Azure Cosmos DB for NoSQL. Sada Python SDK služby Azure Cosmos DB poskytuje logickou reprezentaci na straně klienta pro přístup ke službě Azure Cosmos DB for NoSQL. Tento článek popisuje nástroje a přístupy, které vám pomůžou v případě jakýchkoli problémů.

Začněte tímto seznamem:

  • Podívejte se na část Běžné problémy a alternativní řešení v tomto článku.
  • Podívejte se na sadu Python SDK v centrálním úložišti Azure Cosmos DB, které je k dispozici open source na GitHubu. Sekce problémů je aktivně monitorována. Zkontrolujte, jestli už není nějaký podobný problém s alternativním řešením podaný. Jedním z užitečných tipů je filtrování problémů podle značky *Cosmos* .
  • Projděte si tipy pro výkon pro Azure Cosmos DB Python SDK a postupujte podle navrhovaných postupů.
  • Pokud jste nenašli řešení, přečtěte si zbytek tohoto článku. Poté vytvořte GitHub issue. Pokud máte možnost přidat značky k problému na GitHubu, přidejte *Cosmos* tag.

Protokolování a záznam diagnostiky

Důležité

Doporučujeme používat nejnovější verzi sady Python SDK. Tady můžete zkontrolovat historii verzí.

Tato knihovna používá pro diagnostiku protokolování standardní knihovnu protokolování . Základní informace o relacích HTTP (adresy URL, hlavičky atd.) se protokolují na úrovni INFO.

Podrobné protokolování na úrovni DEBUG, včetně těl požadavků/odpovědí a neupravených hlaviček, je možné na klientovi povolit s 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 Podobně může povolit podrobné protokolování pro jednu operaci, i když není pro klienta povolené:

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

Alternativně můžete logovat pomocí CosmosHttpLoggingPolicy, která se rozšiřuje z Azure Core HttpLoggingPolicy, předáním svého logovacího nástroje do argumentu logger. Ve výchozím nastavení použije chování z HttpLoggingPolicy. Předáním argumentu enable_diagnostics_logging se CosmosHttpLoggingPolicy povolí a v odpovědi budou zahrnuty další informace pro ladění problémů s 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)

Podobně lze protokolování povolit pro jednu operaci předáním loggeru do jednotlivého požadavku. Pokud však chcete použít CosmosHttpLoggingPolicy k získání dalších informací, enable_diagnostics_logging musí být argument předán v konstruktoru 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)

Návrh opakování

Pokyny k návrhu odolných aplikací pomocí sad SDK služby Azure Cosmos DB najdete v našem průvodci návrhem odolných aplikací a informace o sémantice opakování sady SDK.

Běžné problémy a alternativní řešení

Obecné návrhy

Pokud chcete zajistit nejvyšší výkon:

  • Ujistěte se, že je aplikace spuštěná ve stejné oblasti jako váš účet služby Azure Cosmos DB.
  • Zkontrolujte využití procesoru na hostiteli, na kterém je aplikace spuštěná. Pokud je využití procesoru 50 procent nebo více, spusťte aplikaci na hostiteli s vyšší konfigurací. Nebo můžete zatížení distribuovat na více počítačích.

Kontrola metrik portálu

Kontrola metrik portálu vám pomůže určit, jestli se jedná o problém na straně klienta nebo jestli došlo k problému se službou. Pokud například metriky obsahují vysokou rychlost požadavků omezených rychlostí (stavový kód HTTP 429), což znamená, že požadavek se omezuje, zkontrolujte příliš velkou část Frekvence požadavků.

Omezování připojení

K omezování připojení může dojít z důvodu [limitu připojení na hostitelském počítači] nebo kvůli vyčerpání portů AZURE SNAT (PAT).

Omezení připojení na hostitelském počítači

Některé systémy Linux, například Red Hat, mají horní limit celkového počtu otevřených souborů. Sokety v Linuxu se implementují jako soubory, takže toto číslo omezuje také celkový počet připojení. Spusťte následující příkaz:

ulimit -a

Maximální počet povolených otevřených souborů, které jsou označené jako "nofile", musí být alespoň dvojnásobkem velikosti fondu připojení. Další informace najdete v tipech k výkonu sady Python SDK služby Azure Cosmos DB.

Vyčerpání portů Azure SNAT (PAT)

Pokud je vaše aplikace nasazená ve službě Azure Virtual Machines bez veřejné IP adresy, navazují ve výchozím nastavení porty Azure SNAT připojení k libovolnému koncovému bodu mimo váš virtuální počítač. Počet připojení povolených z virtuálního počítače ke koncovému bodu služby Azure Cosmos DB je omezený konfigurací Azure SNAT.

Porty Azure SNAT se používají jenom v případech, kdy má váš virtuální počítač privátní IP adresu a proces z virtuálního počítače se pokusí připojit k veřejné IP adrese. Existují dvě alternativní řešení, jak se vyhnout omezení Azure SNAT:

  • Přidejte koncový bod služby Azure Cosmos DB do podsítě virtuální sítě Azure Virtual Machines. Další informace najdete v tématu Koncové body služby Azure Virtual Network.

    Když je koncový bod služby povolený, požadavky se už do Azure Cosmos DB neposílají z veřejné IP adresy. Místo toho se odešle identita virtuální sítě a podsítě. Tato změna může vést k blokování firewallu, jsou-li povoleny pouze veřejné IP adresy. Pokud používáte bránu firewall, při povolení koncového bodu služby přidejte do brány firewall podsíť pomocí ACL virtuální sítě.

  • Přiřaďte virtuálnímu počítači Azure veřejnou IP adresu.

Nelze se připojit ke službě – brána firewall

azure.core.exceptions.ServiceRequestError: značí, že sada SDK se nemůže spojit se službou. Postupujte podle limitu připojení na hostitelském počítači.

Selhání při připojování k emulátoru služby Azure Cosmos DB

Certifikát HTTPS emulátoru služby Azure Cosmos DB je podepsaný svým držitelem. Aby sada Python SDK fungovala s emulátorem, naimportujte certifikát emulátoru. Další informace najdete v tématu Export certifikátů emulátoru služby Azure Cosmos DB.

HTTP proxy

Pokud používáte proxy server HTTP, ujistěte se, že podporuje počet připojení nakonfigurovaných v sadě SDK ConnectionPolicy. V opačném případě dochází k problémům s připojením.

Běžné problémy s dotazy

Metriky dotazů vám pomůžou určit, kde dotaz tráví většinu času. Z metrik dotazů můžete zjistit, kolik prostředků se spotřebovává na zpracování pomocí back-endu oproti klientovi. Přečtěte si další informace o průvodci výkonem dotazů.

Další kroky