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

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 poznámkách k verzi sady Python SDK pro čtení sady Python SDK, balíčku (PyPI), balíčku (Conda) a tipy k výkonu.

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. Obsahuje oddíl problémů, který je aktivně monitorován. Zkontrolujte, jestli už není nějaký podobný problém s alternativním řešením. Jedním z užitečných tipů je filtrování problémů podle značky *Cosmos* .
  • Projděte si tipy pro zvýšení výkonu sady Python SDK služby Azure Cosmos DB a postupujte podle navrhovaných postupů.
  • Pokud jste nenašli řešení, přečtěte si zbytek tohoto článku. Pak vytvořte problém GitHubu. Pokud máte možnost přidat značky k problému s GitHubem, přidejte značku *Cosmos* .

Protokolování a zaznamenání 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 ladění, včetně těl požadavků/odpovědí a nereagovaných hlaviček, je možné povolit u klienta 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 protokolovat pomocí CosmosHttpLoggingPolicy, která se rozšiřuje z azure core HttpLoggingPolicy, předáním protokolovací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 CosmosHttpLoggingPolicyse povolí a v reakci na ladění problémů s Cosmos bude obsahovat další informace.

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 protokolovacího nástroje do jednotné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í povolený počet povolených otevřených souborů, které jsou označené jako "nofile", musí být alespoň dvojnásobná velikost 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 poklesu brány firewall, pokud jsou povoleny pouze veřejné IP adresy. Pokud používáte bránu firewall, když povolíte koncový bod služby, přidejte do brány firewall podsíť pomocí seznamů ACL virtuální sítě.

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

Nejde se spojit se službou – 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.

Proxy server HTTP

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 z toho se stráví back-endem a klientem. Přečtěte si další informace o průvodci výkonem dotazů.

Další kroky