Sdílet prostřednictvím


Řešení potíží při používání Python SDK služby Azure Cosmos DB s podporou API pro účty 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 README a poznámkách k vydáníbalíčku (PyPI), balíčku (Conda) a tipů pro zlepšení 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á standardní knihovnu protokolování pro zaznamenávání diagnostiky. Základní informace o relacích HTTP (adresy URL, hlavičky atd.) se protokolují na úrovni INFO.

Podrobné protokolování na úrovni ladění DEBUG, včetně těl požadavků a odpovědí a nezcenzurovaný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 jádra Azure HttpLoggingPolicy, tím, že svůj protokolovací nástroj předáte do argumentu logger. Ve výchozím nastavení použije chování z HttpLoggingPolicy. Předáním argumentu enable_diagnostics_logging se povolí CosmosHttpLoggingPolicy a v odpovědi bude obsaženo více informací relevantních 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 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í počet otevřených souborů, které jsou označeny jako "nofile", musí být alespoň dvojnásobný než velikost vašeho 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, pokud jsou povoleny pouze veřejné IP adresy. Pokud používáte bránu firewall, po 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ě – 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 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, jaký podíl je věnován back-endu oproti klientovi. Přečtěte si další informace o průvodci výkonu dotazů.

Další kroky