Mendiagnosis dan memecahkan masalah saat menggunakan Azure Cosmos DB .NET SDK

BERLAKU UNTUK: NoSQL

Artikel ini membahas masalah umum, solusi, langkah diagnostik, dan alat saat Anda menggunakan .NET SDK dengan Azure Cosmos DB untuk akun NoSQL. .NET SDK menyediakan representasi logis sisi klien untuk mengakses Azure Cosmos DB untuk NoSQL. Artikel ini menjelaskan alat dan pendekatan untuk membantu Anda jika mengalami masalah.

Daftar periksa untuk pemecahan masalah

Pertimbangkan daftar periksa berikut sebelum Anda memindahkan aplikasi ke produksi. Menggunakan daftar periksa mencegah beberapa masalah umum yang mungkin Anda temui. Anda juga dapat mendiagnosis dengan cepat ketika terjadi masalah:

  • Gunakan SDK terbaru. Pratinjau SDK tidak boleh digunakan untuk produksi. Ini akan mencegah bertemu dengan masalah umum yang sudah diperbaiki sebelumnya.
  • Tinjau tips performa, dan ikuti praktik yang disarankan. Ini akan membantu mencegah penskalaan, latensi, dan masalah performa lainnya.
  • Aktifkan pengelogan SDK untuk membantu Anda memecahkan masalah. Mengaktifkan pengelogan dapat memengaruhi performa sehingga yang terbaik adalah mengaktifkannya hanya saat memecahkan masalah. Anda dapat mengaktifkan log berikut:
    • Catat metrik menggunakan portal Microsoft Azure. Metrik portal menunjukkan telemetri Azure Cosmos DB, yang berguna untuk menentukan apakah masalah tersebut terkait dengan Azure Cosmos DB atau dengan pihak klien.
    • Catat string diagnostik dari operasi dan/atau pengecualian.

Lihat bagian Masalah umum dan solusi dalam artikel ini.

Periksa Bagian masalah GitHub yang dipantau secara aktif. Periksa untuk melihat apakah ada masalah serupa dengan solusi yang sudah diajukan. Jika Anda tidak menemukan solusi, ajukan masalah GitHub. Anda dapat membuka tanda centang dukungan untuk masalah mendesak.

Menangkap diagnostik

Semua respons di SDK, termasuk, seperti CosmosException, memiliki properti Diagnostics. Properti ini mencatat semua informasi yang terkait dengan permintaan tunggal termasuk jika ada pencobaan ulang atau kegagalan sementara.

Diagnostik dikembalikan sebagai string. String berubah dengan setiap versi, karena ditingkatkan untuk memecahkan masalah skenario yang berbeda. Dengan setiap versi SDK, string akan memiliki perubahan melanggar format. Jangan mengurai string untuk menghindari kerusakan perubahan. Contoh kode berikut menunjukkan cara membaca log diagnostik menggunakan SDK .NET:

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()
}

Masalah umum dan solusi

Saran umum

  • Ikuti link aka.ms apa pun yang disertakan dalam detail pengecualian.
  • Jalankan aplikasi Anda di wilayah Azure yang sama dengan akun Azure Cosmos DB Anda, jika memungkinkan.
  • Anda mungkin mengalami masalah konektivitas/ketersediaan karena kurangnya sumber daya pada mesin klien Anda. Sebaiknya pantau penggunaan CPU Anda pada simpul yang menjalankan klien Azure Cosmos DB, dan tingkatkan/turunkan skala jika beban penggunaannya tinggi.

Periksa metrik portal

Memeriksa metrik portal akan membantu menentukan apakah itu masalah di sisi klien atau layanan yang bermasalah. Misalnya, jika metrik berisi permintaan dengan tarif terbatas yang tinggi (kode status HTTP 429). yang berarti permintaan akan dibatasi, periksa bagian Tingkat permintaan terlalu besar.

Rancangan percobaan ulang

Lihat panduan kami untuk merancang aplikasi tangguh dengan Azure Cosmos DB SDK untuk panduan tentang cara merancang aplikasi tangguh dan mempelajari yang merupakan semantik coba lagi dari SDK.

SNAT

Jika aplikasi Anda disebar di Microsoft Azure Virtual Machines tanpa alamat IP publik, secara default port Azure SNAT membuat koneksi ke titik akhir di luar VM Anda. Jumlah koneksi yang diizinkan dari VM ke titik akhir Azure Cosmos DB dibatasi oleh konfigurasi Azure SNAT. Situasi ini dapat menyebabkan pembatasan koneksi, penutupan koneksi, atau Waktu permintaan habis yang disebutkan di atas.

Port Azure SNAT hanya digunakan saat VM Anda memiliki alamat IP pribadi yang tersambung ke alamat IP publik. Ada dua solusi untuk menghindari pembatasan Azure SNAT (asalkan Anda sudah menggunakan instans klien tunggal di seluruh aplikasi):

  • Menambahkan titik akhir layanan Azure Cosmos DB Anda ke subnet jaringan virtual Azure Virtual Machines Anda. Untuk informasi selengkapnya, lihat Titik akhir layanan Microsoft Azure Virtual Network.

    Ketika titik akhir layanan diaktifkan, permintaan tidak lagi dikirimkan dari IP publik ke Azure Cosmos DB. Sebagai gantinya, jaringan virtual dan identitas subnet dikirim. Perubahan ini dapat mengakibatkan firewall turun jika hanya IP publik yang diizinkan. Jika Anda menggunakan firewall, saat Anda mengaktifkan titik akhir layanan, tambahkan subnet ke firewall menggunakan Virtual Network ACL.

  • Tetapkan IP publik ke Azure VM Anda.

Latensi jaringan tinggi

Lihat panduan pemecahan masalah latensi kami untuk detail tentang pemecahan masalah latensi.

Kegagalan autentikasi proksi

Jika Anda melihat kesalahan yang ditampilkan sebagai HTTP 407:

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

Kesalahan ini tidak dihasilkan oleh SDK atau berasal dari Layanan Azure Cosmos DB. Kesalahan ini terkait dengan konfigurasi jaringan. Proksi dalam konfigurasi jaringan Anda kemungkinan besar tidak memiliki autentikasi proksi yang diperlukan. Jika Anda tidak mengharapkan untuk menggunakan proksi, hubungi tim jaringan Anda. Jika Anda menggunakan proksi, pastikan Anda mengatur konfigurasi WebProxy yang tepat pada CosmosClientOptions.WebProxy saat membuat instans klien.

Masalah kueri umum

Metrik kueri akan membantu menentukan di mana kueri menghabiskan sebagian besar waktu. Dari metrik kueri, Anda dapat melihat berapa banyak yang dihabiskan untuk back-end vs klien. Pelajari selengkapnya di panduan performa kueri.

Jika Anda mengalami kesalahan berikut: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies: dan menggunakan Windows, Anda harus memutakhirkan ke versi Windows terbaru.

Langkah berikutnya

  • Pelajari tentang panduan Performa untuk .NET SDK
  • Pelajari tentang praktik terbaik untuk .NET SDK