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:
- Bu makaledeki Yaygın sorunlar ve geçici çözümler bölümüne göz atın.
- GitHub'da açık kaynak kullanılabilen Azure Cosmos DB merkezi deposundaki Python SDK'sını inceleyin. Etkin olarak izlenen bir sorunlar bölümü vardır. Geçici çözümle ilgili benzer bir sorunun zaten dosyalanmış olup olmadığını denetleyin. Yararlı bir ipucu, sorunları etikete göre filtrelemektir
*Cosmos*
. - Azure Cosmos DB Python SDK'sı için performans ipuçlarını gözden geçirin ve önerilen uygulamaları izleyin.
- Çözüm bulamadıysanız bu makalenin geri kalanını okuyun. Ardından bir GitHub sorunu oluşturun. GitHub sorununuza etiket ekleme seçeneği varsa etiket
*Cosmos*
ekleyin.
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 CosmosHttpLoggingPolicy
geçirerek azure çekirdeğinden HttpLoggingPolicy
genişletilen öğesini kullanarak oturum açabilirsiniz.
Varsayılan olarak, öğesinin HttpLoggingPolicy
davranışını kullanır. bağımsız değişkeninin enable_diagnostics_logging
geçirilmesi, öğesini etkinleştirir CosmosHttpLoggingPolicy
ve 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.
- Uygulamanızı Azure Kubernetes Service'te çalıştırıyorsanız, CPU kullanımını izlemek için Azure İzleyici'yi kullanabilirsiniz.
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 ConnectionPolicy
yapı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
- Python SDK'sı için performans yönergeleri hakkında bilgi edinin
- Python SDK'sı için en iyi yöntemler hakkında bilgi edinin