Mengumpulkan diagnostik dalam kontainer
Alat diagnostik yang sama yang berguna untuk mendiagnosis masalah .NET Core dalam skenario lain juga berfungsi di kontainer Docker. Namun, beberapa alat memerlukan langkah-langkah khusus untuk bekerja dalam kontainer. Artikel ini membahas bagaimana alat untuk mengumpulkan jejak performa dan mengumpulkan cadangan dapat digunakan dalam kontainer Docker.
Menggunakan alat .NET CLI dalam kontainer
Alat-alat ini berlaku untuk: ✔️ .NET Core 3.1 SDK dan versi yang lebih baru
Alat diagnostik CLI global .NET Core (penghitung dotnet, dotnet-dump, dotnet-gcdump, dotnet-monitor, dan dotnet-trace) dirancang untuk bekerja di berbagai lingkungan dan semuanya harus berfungsi langsung di kontainer Docker. Karena itu, alat-alat ini adalah metode yang disukai untuk mengumpulkan informasi diagnostik untuk skenario .NET Core yang menargetkan .NET Core 3.1 atau yang lebih baru dalam kontainer.
Anda juga dapat menginstal alat-alat ini tanpa .NET SDK dengan mengunduh varian file tunggal dari tautan di paragraf sebelumnya. Penginstalan ini memerlukan penginstalan global runtime .NET versi 3.1 atau yang lebih baru, yang dapat Anda peroleh mengikuti salah satu metode yang ditentukan dalam dokumentasi penginstalan .NET atau dengan menggunakan salah satu kontainer runtime resmi.
Menggunakan alat CLI global .NET Core dalam kontainer sespan
Jika Anda ingin menggunakan alat diagnostik CLI global .NET Core untuk mendiagnosis proses dalam kontainer yang berbeda, perhatikan persyaratan tambahan berikut:
- Kontainer harus berbagi namespace proses (sehingga alat dalam kontainer sidecar dapat mengakses proses dalam kontainer target).
- Alat diagnostik CLI global .NET Core memerlukan akses ke file yang ditulis runtime .NET Core ke direktori /tmp, sehingga direktori /tmp harus dibagi antara target dan kontainer sespan melalui pemasangan volume. Ini dapat dilakukan, misalnya, dengan meminta kontainer berbagi volume umum atau volume Kubernetes emptyDir . Jika Anda mencoba menggunakan alat diagnostik dari kontainer sidecar tanpa berbagi direktori /tmp, Anda akan mendapatkan kesalahan tentang proses "tidak menjalankan runtime .NET yang kompatibel."
Menggunakan PerfCollect dalam kontainer
Alat ini berlaku untuk: ✔️ .NET Core 2.1 dan versi yang lebih baru
PerfCollect Skrip ini berguna untuk mengumpulkan jejak performa dan merupakan alat yang direkomendasikan untuk mengumpulkan jejak sebelum .NET Core 3.0. Jika menggunakan PerfCollect dalam kontainer, ingatlah persyaratan berikut:
PerfCollectSYS_ADMINmembutuhkan kemampuan (untuk menjalankanperfalat), jadi pastikan kontainer dimulai dengan kemampuan tersebut.PerfCollectmengharuskan beberapa variabel lingkungan diatur sebelum aplikasi dimulai pembuatan profil. Ini dapat diatur baik di Dockerfile atau saat memulai kontainer. Karena variabel ini tidak boleh diatur di lingkungan produksi normal, biasanya hanya menambahkannya saat memulai kontainer yang akan diprofilkan. Dua variabel yang diperlukan PerfCollect adalah:DOTNET_PerfMapEnabled=1DOTNET_EnableEventLog=1
Catatan
.NET 6 menstandarkan pada prefiks
DOTNET_daripadaCOMPlus_untuk variabel lingkungan yang mengonfigurasi perilaku run-time .NET. Namun, prefiksCOMPlus_akan terus berfungsi. Jika Anda menggunakan versi runtime .NET sebelumnya, Anda masih harus menggunakan prefiksCOMPlus_untuk variabel lingkungan.
Menggunakan PerfCollect dalam kontainer sespan
Jika Anda ingin menjalankan PerfCollect dalam satu kontainer untuk memprofilkan proses .NET Core dalam kontainer yang berbeda, pengalamannya hampir sama kecuali untuk perbedaan ini:
- Variabel lingkungan yang disebutkan sebelumnya (
DOTNET_PerfMapEnableddanDOTNET_EnableEventLog) harus diatur untuk kontainer target (bukan yang berjalanPerfCollect). - Kontainer yang berjalan
PerfCollectharus memilikiSYS_ADMINkemampuan (bukan kontainer target). - Kedua kontainer harus berbagi namespace proses.
Menggunakan createdump dalam kontainer
Alat ini berlaku untuk: ✔️ .NET Core 2.1 dan versi yang lebih baru
Alternatif untuk dotnet-dump, createdump dapat digunakan untuk membuat cadangan inti di Linux yang berisi informasi asli dan terkelola. Alat createdump ini diinstal dengan runtime .NET Core dan dapat ditemukan di samping libcoreclr.so (biasanya di "/usr/share/dotnet/shared/Microsoft.NETCore.App/[version]"). Alat ini bekerja sama dalam kontainer seperti di lingkungan Linux non-kontainer dengan pengecualian tunggal yang diperlukan SYS_PTRACE alat, sehingga kontainer Docker harus dimulai dengan kemampuan tersebut.
Menggunakan createdump dalam kontainer sespan
Jika Anda ingin menggunakan createdump untuk membuat cadangan dari proses dalam kontainer yang berbeda, pengalamannya hampir sama kecuali untuk perbedaan ini:
- Kontainer yang berjalan
createdumpharus memilikiSYS_PTRACEkemampuan (bukan kontainer target). - Kedua kontainer harus berbagi namespace proses.