NoSQL hesapları için API ile Azure Cosmos DB Python SDK'sını kullanırken karşılaşılan sorunları giderme

UYGULANANLAR: NoSQL

Önemli

Bu makalede yalnızca Azure Cosmos DB Python SDK'sı ile ilgili sorun giderme işlemleri yer alır. Daha fazla bilgi için lütfen Azure Cosmos DB Python SDK BeniOku Sürümü notları, Paket (PyPI), Paket (Conda) ve performans ipuçlarına bakın.

Bu makale, NoSQL hesapları için Azure Cosmos DB ile Azure Cosmos DB Python SDK'sını kullanırken karşılaşılan yaygın sorunları, geçici çözümleri, tanılama adımlarını ve araçları kapsar. Azure Cosmos DB Python SDK'sı, NoSQL için Azure Cosmos DB'ye erişmek için istemci tarafı mantıksal temsili sağlar. Bu makalede, sorunla karşılaştığınızda size yardımcı olacak araçlar ve yaklaşımlar açıklanır.

Şu listeyle başlayın:

Tanılamayı günlüğe kaydetme ve yakalama

Önemli

Python SDK'sının en son sürümünü kullanmanızı öneririz. Sürüm geçmişini buradan de kontrol edebilirsiniz

Bu kitaplık, tanılamaları günlüğe kaydetmek için standart günlük kitaplığını kullanır. HTTP oturumlarıyla ilgili temel bilgiler (URL'ler, üst bilgiler vb.) BİlGİ düzeyinde günlüğe kaydedilir.

İstek/yanıt gövdeleri ve kaydedilmemiş üst bilgiler de dahil olmak üzere ayrıntılı HATA AYıKLAMA düzeyi günlüğü bir istemcide şu bağımsız değişkenle logging_enable etkinleştirilebilir:

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)

Benzer şekilde, logging_enable istemci için etkinleştirilmemiş olsa bile tek bir işlem için ayrıntılı günlüğe kaydetmeyi etkinleştirebilir:

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

Alternatif olarak, günlükçünüzü logger bağımsız değişkenine CosmosHttpLoggingPolicygeçirerek azure çekirdeğinden HttpLoggingPolicygenişletilen öğesini kullanarak oturum açabilirsiniz. Varsayılan olarak, öğesinin HttpLoggingPolicydavranışını kullanır. bağımsız değişkeninin enable_diagnostics_logging geçirilmesi, öğesini etkinleştirir CosmosHttpLoggingPolicyve yanıtta Cosmos sorunlarının hatalarını ayıklamayla ilgili ek bilgiler bulunur.

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)

Benzer şekilde, günlük kaydı tekil isteğe bir günlükçü geçirilerek tek bir işlem için etkinleştirilebilir. Ancak, ek bilgi almak için kullanmak CosmosHttpLoggingPolicy isterseniz, bağımsız değişkeninin enable_diagnostics_logging istemci oluşturucusunda geçirilmesi gerekir.

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

Tasarımı yeniden deneyin

Dayanıklı uygulamalar tasarlama ve SDK'nın yeniden deneme semantiğinin hangisi olduğunu öğrenmek için Azure Cosmos DB SDK'ları ile dayanıklı uygulamalar tasarlama kılavuzumuzu inceleyin.

Yaygın sorunlar ve geçici çözümler

Genel öneriler

En iyi performans için:

  • Uygulamanın Azure Cosmos DB hesabınızla aynı bölgede çalıştığından emin olun.
  • Uygulamanın çalıştığı konakta CPU kullanımını denetleyin. CPU kullanımı yüzde 50 veya daha fazlaysa uygulamanızı daha yüksek yapılandırmaya sahip bir konakta çalıştırın. Veya yükü daha fazla makineye dağıtabilirsiniz.

Portal ölçümlerini denetleme

Portal ölçümlerini denetlemek, bunun istemci tarafı bir sorun olup olmadığını veya hizmetle ilgili bir sorun olup olmadığını belirlemenize yardımcı olur. Örneğin, ölçümler yüksek oranda sınırlı istekler (HTTP durum kodu 429) içeriyorsa ve bu da isteğin kısıtlandığı anlamına geliyorsa İstek oranı çok büyük bölümünü denetleyin.

Bağlantı azaltma

Bağlantı azaltma, [konak makinesinde bağlantı sınırı] veya [Azure SNAT (PAT) bağlantı noktası tükenmesi] nedeniyle oluşabilir.

Konak makinede bağlantı sınırı

Red Hat gibi bazı Linux sistemlerinin toplam açık dosya sayısı üst sınırı vardır. Linux'taki yuvalar dosya olarak uygulandığından, bu sayı toplam bağlantı sayısını da sınırlar. Aşağıdaki komutu çalıştırın.

ulimit -a

"Nofile" olarak tanımlanan izin verilen en fazla açık dosya sayısı, bağlantı havuzu boyutunuzun en az iki katı olmalıdır. Daha fazla bilgi için bkz. Azure Cosmos DB Python SDK performans ipuçları.

Azure SNAT (PAT) bağlantı noktası tükenmesi

Uygulamanız azure Sanal Makineler genel IP adresi olmadan dağıtılıyorsa, varsayılan olarak Azure SNAT bağlantı noktaları VM'nizin dışındaki herhangi bir uç noktaya bağlantı kurar. VM'den Azure Cosmos DB uç noktasına izin verilen bağlantı sayısı, Azure SNAT yapılandırmasıyla sınırlıdır.

Azure SNAT bağlantı noktaları yalnızca VM'nizin özel ip adresi olduğunda ve VM'den bir işlem genel IP adresine bağlanmaya çalıştığında kullanılır. Azure SNAT sınırlamasını önlemeye yönelik iki geçici çözüm vardır:

  • Azure Cosmos DB hizmet uç noktanızı Azure Sanal Makineler sanal ağınızın alt ağına ekleyin. Daha fazla bilgi için bkz. Azure Sanal Ağ hizmet uç noktaları.

    Hizmet uç noktası etkinleştirildiğinde, istekler artık genel IP'den Azure Cosmos DB'ye gönderilmez. Bunun yerine sanal ağ ve alt ağ kimliği gönderilir. Bu değişiklik, yalnızca genel IP'lere izin veriliyorsa güvenlik duvarının düşmesine neden olabilir. Güvenlik duvarı kullanıyorsanız, hizmet uç noktasını etkinleştirdiğinizde Sanal Ağ ACL'leri kullanarak güvenlik duvarına bir alt ağ ekleyin.

  • Azure VM'nize genel IP atayın.

Hizmete ulaşılamıyor - güvenlik duvarı

azure.core.exceptions.ServiceRequestError: SDK'nın hizmete erişemezseniz gösterir. Konak makinede Bağlantı sınırını izleyin.

Azure Cosmos DB öykünücüsine bağlanma hatası

Azure Cosmos DB Öykünücüsü HTTPS sertifikası otomatik olarak imzalanır. Python SDK'sının öykünücüyle çalışması için öykünücü sertifikasını içeri aktarın. Daha fazla bilgi için bkz . Azure Cosmos DB Öykünücüsü sertifikalarını dışarı aktarma.

HTTP proxy'si

HTTP ara sunucusu kullanıyorsanız, SDK'da ConnectionPolicyyapılandırılan bağlantı sayısını destekleyebilendiğinden emin olun. Aksi takdirde bağlantı sorunlarıyla karşılaşırsınız.

Sık karşılaşılan sorgu sorunları

Sorgu ölçümleri , sorgunun çoğu zaman nereye harcandığını belirlemeye yardımcı olur. Sorgu ölçümlerinden, arka uçta ve istemcide ne kadar harcandığını görebilirsiniz. Sorgu performansı kılavuzu hakkında daha fazla bilgi edinin.

Sonraki adımlar