Az Azure Cosmos DB Python SDK noSQL-fiókokhoz készült API-val való használatakor felmerülő problémák elhárítása

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Fontos

Ez a cikk csak az Azure Cosmos DB Python SDK hibaelhárítását ismerteti. További információért tekintse meg az Azure Cosmos DB Python SDK Readme kibocsátási megjegyzéseit, a Csomag (PyPI), a Csomag (Conda) és a teljesítményre vonatkozó tippeket.

Ez a cikk az Azure Cosmos DB Python SDK noSQL-fiókokhoz készült Azure Cosmos DB-fiókokkal való használatakor felmerülő gyakori problémákat, kerülő megoldásokat, diagnosztikai lépéseket és eszközöket ismerteti. Az Azure Cosmos DB Python SDK ügyféloldali logikai reprezentációt biztosít az Azure Cosmos DB for NoSQL eléréséhez. Ez a cikk azokat az eszközöket és módszereket ismerteti, amelyek segítenek megoldani a problémákat.

Kezdje a következő listával:

A diagnosztikák naplózása és rögzítése

Fontos

Javasoljuk, hogy a Python SDK legújabb verzióját használja. A kiadási előzményeket itt tekintheti meg

Ez a kódtár a szabványos naplózási kódtárat használja a naplózási diagnosztikához. A HTTP-munkamenetekkel (URL-címekkel, fejlécekkel stb.) kapcsolatos alapvető információk infoszinten naplózva lesznek.

A RÉSZLETES HIBAKERESÉSi szintű naplózás, beleértve a kérelem-/választörzseket és a nem felügyelt fejléceket, engedélyezhető egy ügyfélen az logging_enable argumentummal:

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)

Hasonlóképpen logging_enable engedélyezheti a részletes naplózást egyetlen művelet esetében is, még akkor is, ha nincs engedélyezve az ügyfél számára:

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

Másik lehetőségként az Azure Core-ból HttpLoggingPolicykiterjesztett naplóval CosmosHttpLoggingPolicyis bejelentkezhet, ha a naplózót átadja az logger argumentumnak. Alapértelmezés szerint a következő viselkedést HttpLoggingPolicyfogja használni: . Az argumentum átadása lehetővé teszi a enable_diagnostics_loggingCosmosHttpLoggingPolicy, és további információval rendelkezik a Cosmos-problémák hibakereséséhez kapcsolódó válaszban.

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)

Hasonlóképpen, a naplózás engedélyezhető egyetlen művelethez úgy, hogy egy naplózót ad át az egyedi kérésnek. Ha azonban további információk beszerzésére szeretné használni az CosmosHttpLoggingPolicy argumentumot, az enable_diagnostics_logging argumentumot az ügyfélkonstruktornál kell átadni.

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

Újrapróbálkozás a tervezés során

A rugalmas alkalmazások Azure Cosmos DB SDK-kkal való tervezéséről szóló útmutatónkból megtudhatja, hogyan tervezhet rugalmas alkalmazásokat, és megtudhatja, hogy melyek az SDK újrapróbálkozási szemantikája.

Gyakori hibák és áthidaló megoldásaik

Általános javaslatok

A legjobb teljesítmény érdekében:

  • Győződjön meg arról, hogy az alkalmazás ugyanabban a régióban fut, mint az Azure Cosmos DB-fiókja.
  • Ellenőrizze a processzorhasználatot azon a gazdagépen, amelyen az alkalmazás fut. Ha a processzorhasználat 50 százalék vagy több, futtassa az alkalmazást egy magasabb konfigurációjú gazdagépen. Vagy több gépen is eloszthatja a terhelést.
    • Ha az alkalmazást az Azure Kubernetes Service-ben futtatja, az Azure Monitor használatával monitorozhatja a processzorhasználatot.

A portál metrikáinak ellenőrzése

A portálmetrikák ellenőrzése segít megállapítani, hogy az ügyféloldali probléma vagy a szolgáltatással kapcsolatos probléma van-e. Ha például a metrikák nagy sebességű korlátozott kérelmeket tartalmaznak (HTTP-állapotkód: 429), ami azt jelenti, hogy a kérés szabályozva van, akkor ellenőrizze a kérelem sebességének túl nagy szakaszát.

Csatlakozás szabályozás

Csatlakozás szabályozás a [gazdagép kapcsolati korlátja] vagy az [Azure SNAT (PAT) portkimerülése] miatt fordulhat elő.

Csatlakozás gazdagépre vonatkozó korlát

Egyes Linux-rendszerek, például a Red Hat, felső korlátot szabnak a megnyitott fájlok teljes számára. A Linux szoftvercsatornái fájlként vannak implementálva, így ez a szám a kapcsolatok teljes számát is korlátozza. Futtassa az alábbi parancsot.

ulimit -a

A "nofile" néven azonosított maximálisan engedélyezett megnyitott fájlok számának legalább a duplájára kell nőnie a kapcsolatkészlet méretének. További információkért tekintse meg az Azure Cosmos DB Python SDK teljesítménytippeit.

Az Azure SNAT (PAT) portkimerülése

Ha az alkalmazás nyilvános IP-cím nélküli Azure-beli virtuális gépeken van üzembe helyezve, az Azure SNAT-portok alapértelmezés szerint kapcsolatot létesítenek a virtuális gépen kívüli végpontokkal. A virtuális gépről az Azure Cosmos DB-végpontra engedélyezett kapcsolatok számát az Azure SNAT-konfiguráció korlátozza.

Az Azure SNAT-portok csak akkor használatosak, ha a virtuális gép magánhálózati IP-címmel rendelkezik, és a virtuális gép egy folyamata megpróbál csatlakozni egy nyilvános IP-címhez. Az Azure SNAT korlátozásának elkerülésére két áthidaló megoldás létezik:

  • Adja hozzá az Azure Cosmos DB szolgáltatásvégpontot az Azure Virtual Machines virtuális hálózat alhálózatához. További információ: Azure Virtual Network szolgáltatásvégpontok.

    Ha a szolgáltatásvégpont engedélyezve van, a rendszer nem küldi el a kéréseket nyilvános IP-címről az Azure Cosmos DB-nek. Ehelyett a rendszer elküldi a virtuális hálózatot és az alhálózati identitást. Ez a módosítás tűzfalleesést okozhat, ha csak nyilvános IP-címek engedélyezettek. Ha tűzfalat használ, a szolgáltatásvégpont engedélyezésekor adjon hozzá egy alhálózatot a tűzfalhoz virtuális hálózati ACL-ek használatával.

  • Nyilvános IP-cím hozzárendelése az Azure-beli virtuális géphez.

Nem érhető el a szolgáltatás – tűzfal

azure.core.exceptions.ServiceRequestError: azt jelzi, hogy az SDK nem éri el a szolgáltatást. Kövesse a gazdagép Csatlakozás ion korlátját.

Hiba történt az Azure Cosmos DB emulátorhoz való csatlakozáskor

Az Azure Cosmos DB Emulator HTTPS-tanúsítványa önaláírt. Ahhoz, hogy a Python SDK működjön az emulátorsal, importálja az emulátortanúsítványt. További információ: Azure Cosmos DB Emulator-tanúsítványok exportálása.

HTTP-proxy

HA HTTP-proxyt használ, győződjön meg arról, hogy támogatja az SDK-ban ConnectionPolicykonfigurált kapcsolatok számát. Ellenkező esetben csatlakozási problémákat tapasztal.

Gyakori lekérdezési problémák

A lekérdezési metrikák segítenek meghatározni, hogy a lekérdezés hol tölti az idő nagy részét. A lekérdezési metrikákból láthatja, hogy a rendszer mennyit költ a háttérrendszerre és az ügyfélre. További információ a lekérdezés teljesítményére vonatkozó útmutatóról.

Következő lépések