Azure Cosmos DB .NET SDK'sını kullanırken karşılaşılan sorunları tanılama ve giderme

UYGULANANLAR: NoSQL

Bu makale NoSQL için Azure Cosmos DB hesaplarıyla .NET SDK'sını kullanırken karşılaşılan yaygın sorunları, geçici çözümleri, tanılama adımlarını ve araçları kapsar. .NET 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.

Sorun giderme sorunları için denetim listesi

Uygulamanızı üretim ortamına taşımadan önce aşağıdaki denetim listesini göz önünde bulundurun. Denetim listesinin kullanılması, karşılaşabileceğiniz bazı yaygın sorunları engeller. Ayrıca bir sorun oluştuğunda hızlı bir şekilde tanılama yapabilirsiniz:

  • En son SDK'yi kullanın. Önizleme SDK'ları üretim için kullanılmamalıdır. Bu, zaten düzeltmiş olan bilinen sorunlarla karşılaşılmasını engeller.
  • Performans ipuçlarını gözden geçirin ve önerilen uygulamaları izleyin. Bu, ölçeklendirme, gecikme süresi ve diğer performans sorunlarını önlemeye yardımcı olur.
  • Bir sorunu gidermenize yardımcı olması için SDK günlüğünü etkinleştirin. Günlüğün etkinleştirilmesi performansı etkileyebilir, bu nedenle en iyisi yalnızca sorunları giderirken etkinleştirmektir. Aşağıdaki günlükleri etkinleştirebilirsiniz:

Bu makaledeki Yaygın sorunlar ve geçici çözümler bölümüne göz atın.

Etkin olarak izlenen GitHub sorunları bölümüne bakın. Geçici çözümle ilgili benzer bir sorunun zaten dosyalanmış olup olmadığını denetleyin. Bir çözüm bulamadıysanız bir GitHub sorunu oluşturun. Acil sorunlar için bir destek onay işareti açabilirsiniz.

Tanılamaları yakalama

DAHIL olmak üzere CosmosExceptionSDK'daki tüm yanıtların bir Diagnostics özelliği vardır. Bu özellik, yeniden denemeler veya geçici hatalar olup olmadığı dahil olmak üzere tek istekle ilgili tüm bilgileri kaydeder.

Tanılama bir dize olarak döndürülür. Farklı senaryolarda sorun gidermeye yönelik geliştirilmiş olduğundan, dize her sürümde değişir. SDK'nın her sürümünde, dize biçimlendirmede hataya neden olan değişikliklere sahip olur. Hataya neden olan değişiklikleri önlemek için dizeyi ayrıştırmayın. Aşağıdaki kod örneğinde .NET SDK'sını kullanarak tanılama günlüklerinin nasıl okunduğu gösterilmektedir:

try
{
    ItemResponse<Book> response = await this.Container.CreateItemAsync<Book>(item: testItem);
    if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan)
    {
        // Log the response.Diagnostics.ToString() and add any additional info necessary to correlate to other logs 
    }
}
catch (CosmosException cosmosException)
{
    // Log the full exception including the stack trace with: cosmosException.ToString()
    
    // The Diagnostics can be logged separately if required with: cosmosException.Diagnostics.ToString()
}

// When using Stream APIs
ResponseMessage response = await this.Container.CreateItemStreamAsync(partitionKey, stream);
if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan || !response.IsSuccessStatusCode)
{
    // Log the diagnostics and add any additional info necessary to correlate to other logs with: response.Diagnostics.ToString()
}

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

Genel öneriler

  • Özel durum ayrıntılarında yer alan tüm aka.ms bağlantıları izleyin.
  • Mümkün olduğunda uygulamanızı Azure Cosmos DB hesabınızla aynı Azure bölgesinde çalıştırın.
  • İstemci makinenizde kaynak olmaması nedeniyle bağlantı/kullanılabilirlik sorunlarıyla karşılaşabilirsiniz. Azure Cosmos DB istemcisini çalıştıran düğümlerde CPU kullanımınızı izlemenizi ve yüksek yükte çalışıyorsa ölçeği artırmanızı/genişletmenizi öneririz.

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.

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.

SNAT

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. Bu durum bağlantı azaltma, bağlantı kapatma veya yukarıda belirtilen İstek zaman aşımlarına yol açabilir.

Azure SNAT bağlantı noktaları yalnızca VM'nizin özel IP adresi varsa bir genel IP adresine bağlanıyorsa kullanılır. Azure SNAT sınırlamasını önlemeye yönelik iki geçici çözüm vardır (uygulamanın tamamında zaten tek bir istemci örneği kullanıyorsanız):

  • 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.

Yüksek ağ gecikme süresi

Gecikme süresi sorunlarını giderme hakkında ayrıntılı bilgi için gecikme süresi sorun giderme kılavuzumuza bakın.

Ara sunucu kimlik doğrulaması hataları

HTTP 407 olarak gösterilen hatalar görürseniz:

Response status code does not indicate success: ProxyAuthenticationRequired (407);

Bu hata SDK tarafından oluşturulmaz veya Azure Cosmos DB Hizmetinden gelir. Bu, ağ yapılandırmasıyla ilgili bir hatadır. Ağ yapılandırmanızdaki bir ara sunucu, büyük olasılıkla gerekli ara sunucu kimlik doğrulamasına sahip değildir. Ara sunucu kullanmayı beklemiyorsanız ağ ekibinize ulaşın. Ara sunucu kullanıyorsanız, istemci örneğini oluştururken CosmosClientOptions.WebProxy'dedoğru WebProxy yapılandırmasını ayarladığınızdan emin olun.

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.

Aşağıdaki hatayla karşılaşırsanız: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies: ve Windows kullanıyorsanız, en son Windows sürümüne yükseltmeniz gerekir.

Sonraki adımlar