Bagikan melalui


Memecahkan masalah saat mengaktifkan Application Insights Snapshot Debugger atau melihat rekam jepret

Jika Anda mengaktifkan Application Insights Snapshot Debugger untuk aplikasi, tetapi tidak melihat rekam jepret untuk pengecualian, Anda dapat menggunakan petunjuk ini untuk memecahkan masalah.

Mungkin ada banyak alasan berbeda mengapa rekam jepret tidak dibuat. Anda dapat memulai dengan menjalankan pemeriksaan kesehatan rekam jepret untuk mengidentifikasi beberapa kemungkinan penyebab umum.

Skenario Tidak Didukung

Di bawah ini Anda dapat menemukan skenario tempat Pengumpul Snapshot tidak didukung:

Skenario Efek Samping Rekomendasi
Saat menggunakan Snapshot Pengumpul SDK di aplikasi Anda secara langsung (.csproj) dan Anda telah mengaktifkan opsi lanjutan "Interop". SDK Application Insights lokal (termasuk telemetri Pengumpul Snapshot) akan hilang, oleh karena itu, tidak ada Snapshot yang akan tersedia.
Aplikasi Anda bisa crash saat mulai dengan System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor
Untuk informasi selengkapnya tentang fitur Application Insights "Interop", lihat dokumentasi.
Jika Anda menggunakan opsi lanjutan "Interop", gunakan injeksi Pengumpul Snapshot tanpa kode (diaktifkan melalui portal Microsoft Azure UX)

Pastikan Anda menggunakan Titik Akhir Snapshot Debugger yang sesuai

Saat ini satu-satunya wilayah yang memerlukan modifikasi titik akhir adalah Azure Government dan Microsoft Azure yang dioperasikan oleh 21Vianet.

Untuk App Service dan aplikasi yang menggunakan Application Insights SDK, Anda harus memperbarui string koneksi menggunakan penimpaan yang didukung untuk Snapshot Debugger seperti yang didefinisikan di bawah:

Properti String Koneksi Cloud Pemerintah AS Cloud Tiongkok
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Untuk informasi selengkapnya tentang penimpaan koneksi lainnya, lihat dokumentasi Application Insights.

Untuk Aplikasi Fungsi, Anda harus memperbarui host.json menggunakan penimpaan yang didukung di bawah:

Properti Cloud Pemerintah AS Cloud Tiongkok
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Di bawah ini adalah contoh host.json yang diperbarui dengan titik akhir agen Cloud Pemerintan AS:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      },
      "snapshotConfiguration": {
        "isEnabled": true,
        "agentEndpoint": "https://snapshot.monitor.azure.us"
      }
    }
  }
}

Menggunakan pemeriksaan kesehatan rekam jepret

Beberapa masalah umum mengakibatkan Open Debug Snapshot tidak muncul. Menggunakan Snapshot Collector yang sudah kedaluwarsa, misalnya; mencapai batas pengunggahan harian; atau mungkin rekam jepret hanya perlu waktu lama untuk diunggah. Gunakan Snapshot Health Check untuk memecahkan masalah umum.

Ada tautan di panel pengecualian tampilan jejak ujung ke ujung yang membawa Anda ke Snapshot Health Check.

Cuplikan layar menunjukkan cara memasukkan snapshot pemeriksaan kesehatan.

Antarmuka interaktif seperti obrolan mencari masalah umum dan memandu Anda untuk memperbaikinya.

Cuplikan layar menunjukkan jendela Pemeriksaan Kesehatan interaktif mencantumkan masalah dan saran untuk memperbaikinya.

Jika ini tidak menyelesaikan masalah, lihat langkah-langkah pemecahan masalah manual berikut.

Memverifikasi kunci instrumentasi

Pastikan Anda menggunakan kunci instrumentasi yang benar di aplikasi yang diterbitkan. Biasanya, kunci instrumentasi dibaca dari file ApplicationInsights.config Anda. Verifikasi nilainya sama dengan kunci instrumentasi untuk sumber daya Application Insights yang Anda lihat di portal.

Catatan

Pada tanggal 31 Maret 2025, dukungan untuk penyerapan kunci instrumentasi akan berakhir. Penyerapan kunci instrumentasi akan berjalan terus, namun kami tidak akan lagi menyediakan pembaruan atau dukungan terhadap fitur tersebut. Transisi ke string koneksi untuk memanfaatkan kemampuan baru.

Memeriksa pengaturan klien TLS/SSL (ASP.NET)

Jika Anda memiliki aplikasi ASP.NET yang dihosting di Azure App Service atau di IIS pada mesin virtual, aplikasi Anda bisa gagal tersambung ke layanan Snapshot Debugger karena protokol keamanan SSL yang hilang.

Titik akhir Snapshot Debugger memerlukan TLS versi 1.2. Set protokol keamanan SSL adalah salah satu kekhasan yang diaktifkan oleh nilai httpRuntime targetFramework di bagian system.web dari web.config. Jika httpRuntime targetFramework adalah 4.5.2 atau lebih rendah, maka TLS 1.2 tidak disertakan secara default.

Catatan

Nilai httpRuntime targetFramework tidak independen dari kerangka kerja target yang digunakan saat membuat aplikasi Anda. Untuk memeriksa pengaturan, buka file web.config Anda dan temukan bagian system.web. Pastikan bahwa targetFramework untuk httpRuntime diatur ke 4.6 atau lebih.

<system.web>
   ...
   <httpRuntime targetFramework="4.7.2" />
   ...
</system.web>

Catatan

Memodifikasi nilai httpRuntime targetFramework mengubah kekhasan runtime yang diterapkan ke aplikasi Anda dan dapat menyebabkan perubahan perilaku halus lainnya. Pastikan untuk menguji aplikasi Anda secara menyeluruh setelah melakukan perubahan ini. Untuk daftar lengkap perubahan kompatibilitas, lihat Perubahan penargetan ulang.

Catatan

Jika targetFramework adalah 4.7 atau lebih tinggi, Windows menentukan protokol yang tersedia. Di Azure App Service, TLS 1.2 tersedia. Namun, jika Anda menggunakan mesin virtual sendiri, Anda mungkin perlu mengaktifkan TLS 1.2 di OS.

Skenario overhead Snapshot Debugger

Snapshot Debugger dirancang untuk digunakan di lingkungan produksi. Pengaturan default mencakup batas tarif untuk meminimalkan dampak pada aplikasi Anda.

Namun, Anda mungkin mengalami overhead CPU, memori, dan I/O kecil yang terkait dengan Snapshot Debugger, seperti dalam skenario berikut.

Saat pengecualian dilemparkan dalam aplikasi Anda:

  • Membuat tanda tangan untuk jenis masalah dan memutuskan apakah akan membuat rekam jepret menambahkan overhead CPU dan memori yang sangat kecil.
  • Jika de-pengoptimalan diaktifkan, ada overhead untuk jitting ulang metode yang melemparkan pengecualian. Ini akan dikeluarkan saat berikutnya metode tersebut dijalankan. Tergantung pada ukuran metode, ini bisa antara 1ms dan 100ms waktu CPU.

Jika handler pengecualian memutuskan untuk membuat rekam jepret:

  • Membuat rekam jepret proses membutuhkan waktu sekitar setengah detik (P50=0,3s, P90=1,2s, P95=1,9s) selama waktu tersebut, utas yang melemparkan pengecualian dijeda. Utas lain tidak diblokir.

  • Mengonversi rekam jepret proses menjadi minidump dan mengunggahnya ke Application Insights membutuhkan waktu beberapa menit.

    • Konversi: P50=63s, P90=187s, P95=275s.
    • Unggah: P50=31s, P90=75s, P95=98s.

    Ini dilakukan di Snapshot Uploader, yang berjalan dalam proses terpisah. Proses Snapshot Uploader berjalan pada prioritas CPU normal di bawah ini dan menggunakan I/O berprioritas rendah.

    Minidump pertama kali ditulis ke disk dan jumlah disk yang diberi ruang kira-kira sama dengan set kerja proses asli. Menulis minidump dapat menginduksi kesalahan halaman saat memori dibaca.

    Minidump dikompresi selama unggahan, yang menggunakan CPU dan memori dalam proses Snapshot Uploader. Overhead CPU, memori, dan disk untuk ini sebanding dengan ukuran rekam jepret proses. Snapshot Uploader memproses rekam jepret secara serial.

Ketika TrackException dipanggil:

Snapshot Debugger memeriksa apakah pengecualiannya baru atau apakah rekam jepret telah dibuat untuknya. Ini menambahkan overhead CPU yang sangat kecil.

Pratinjau Versi .NET Core

Jika Anda menggunakan versi pratinjau .NET Core atau aplikasi Anda mereferensikan Application Insights SDK, secara langsung atau tidak langsung melalui perakitan dependen, ikuti petunjuk untuk Mengaktifkan Snapshot Debugger untuk lingkungan lain.

Periksa Halaman Status ekstensi situs Layanan Diagnostik

Jika Snapshot Debugger diaktifkan melalui panel Application Insights di portal, ini diaktifkan oleh ekstensi situs Layanan Diagnostik.

Catatan

Penginstalan tanpa kode Application Insights Snapshot Debugger mengikuti kebijakan dukungan.NET Core. Untuk informasi selengkapnya tentang runtime yang didukung, lihat Kebijakan Dukungan.NET Core. Anda dapat memeriksa Halaman Status ekstensi ini dengan masuk ke url berikut: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Catatan

Domain tautan Halaman Status akan bervariasi tergantung pada cloud. Domain ini akan sama dengan situs manajemen Kudu untuk App Service. Halaman Status ini menampilkan status penginstalan agen Profiler dan Snapshot Collector. Jika ada kesalahan yang tidak terduga, ini akan ditampilkan dan menunjukkan cara memperbaikinya.

Anda dapat menggunakan situs manajemen Kudu untuk App Service untuk mendapatkan url dasar Halaman Status ini:

  1. Buka aplikasi App Service Anda di portal Azure.
  2. Pilih Alat Tingkat Lanjut, atau cari Kudu.
  3. Pilih Buka.
  4. Setelah Anda berada di situs manajemen Kudu, di URL, tambahkan /DiagnosticServices berikut dan tekan enter. Ini akan berakhir seperti ini: https://<kudu-url>/DiagnosticServices

Meningkatkan ke versi terbaru paket NuGet

Berdasarkan cara Snapshot Debugger diaktifkan, lihat opsi berikut:

  • Jika Snapshot Debugger diaktifkan melalui panel Application Insights di portal, aplikasi Anda harus sudah menjalankan paket NuGet terbaru.

  • Jika Snapshot Debugger diaktifkan dengan menyertakan paket NuGet Microsoft.ApplicationInsights.SnapshotCollector, gunakan Manajer Paket NuGet Visual Studio untuk memastikan Anda menggunakan versi terbaru Microsoft.ApplicationInsights.SnapshotCollector.

Untuk mengetahui informasi terbaru dan perbaikan bug, lihat catatan rilis.

Memeriksa log pengunggah

Setelah snapshot dibuat, file minidump (.dmp) dibuat pada disk. Proses pengunggah terpisah membuat file minidump tersebut dan mengunggahnya, bersama dengan PDB terkait, ke penyimpanan Application Insights Debugger Snapshot. Setelah minidump berhasil diunggah, minidump dihapus dari disk. File log untuk proses pengunggah disimpan pada disk. Di lingkungan App Service, Anda dapat menemukan log ini di D:\Home\LogFiles. Gunakan situs manajemen Kudu untuk App Service untuk menemukan file log ini.

  1. Buka aplikasi App Service Anda di portal Azure.
  2. Pilih Alat Tingkat Lanjut, atau cari Kudu.
  3. Pilih Buka.
  4. Di daftar drop-down Konsol debug, pilih CMD.
  5. Pilih LogFiles.

Anda akan melihat setidaknya satu file dengan nama yang dimulai dengan ekstensi Uploader_ atau SnapshotUploader_ dan .log. Pilih ikon yang sesuai untuk mengunduh file log apa pun atau membukanya di browser. Nama file menyertakan akhiran unik yang mengidentifikasi instans App Service. Jika instans App Service Anda dihosting di lebih dari satu komputer, ada file log terpisah untuk setiap komputer. Saat pengunggah mendeteksi file minidump baru, file tersebut direkam dalam file log. Berikut adalah contoh rekam jepret dan pengunggahan yang berhasil:

SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
    DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
    DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
    DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
    DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
    DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:59.8530649Z

Catatan

Contoh di atas adalah dari versi 1.2.0 paket NuGet Microsoft.ApplicationInsights.SnapshotCollector. Dalam versi sebelumnya, proses pengunggah disebut MinidumpUploader.exe dan log kurang terperinci. Dalam contoh sebelumnya, kunci instrumentasi adalah c12a605e73c44346a984e00000000000. Nilai ini harus sesuai dengan kunci instrumentasi untuk aplikasi Anda. Minidump dikaitkan dengan rekam jepret dengan 139e411a23934dc0b9ea08a626db16c5 ID. Anda dapat menggunakan ID ini nanti untuk menemukan data pengecualian terkait di Application Insights Analytics.

Pengunggah memindai PDF baru sekitar 15 menit sekali. Berikut contohnya:

SnapshotUploader.exe Information: 0 : PDB rescan requested.
    DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
    DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
    DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
    DateTime=2018-03-09T01:47:19.4614027Z

Untuk aplikasi yang tidak dihosting di App Service, log pengunggah berada di folder yang sama dengan minidumps: %TEMP%\Dumps\<ikey> (yang mana <ikey> adalah kunci instrumentasi Anda).

Pemecahan masalah Cloud Services

Di Cloud Services, folder sementara default bisa terlalu kecil untuk menyimpan file minidump, yang mengarah ke rekam jepret yang hilang.

Ruang yang dibutuhkan tergantung pada total kumpulan kerja aplikasi Anda dan jumlah rekam jepret bersamaan.

Kumpulan kerja peran web 32-bit ASP.NET biasanya antara 200 MB dan 500 MB. Izinkan setidaknya dua rekam jepret bersamaan.

Misalnya, jika aplikasi Anda menggunakan 1 GB dari total kumpulan kerja, Anda harus memastikan setidaknya ada ruang disk 2 GB untuk menyimpan rekam jepret.

Ikuti langkah-langkah ini untuk mengonfigurasi peran Cloud Service Anda dengan sumber daya lokal khusus untuk rekam jepret.

  1. Tambahkan sumber daya lokal baru ke Cloud Services Anda dengan mengedit file definisi Cloud Services (.csdef). Contoh berikut menentukan sumber daya yang disebut SnapshotStore dengan ukuran 5 GB.

    <LocalResources>
      <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. Ubah kode startup peran Anda untuk menambahkan variabel lingkungan yang menunjuk ke sumber daya lokal SnapshotStore. Untuk Peran Pekerja, kode harus ditambahkan ke metode OnStart peran Anda:

    public override bool OnStart()
    {
        Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
        return base.OnStart();
    }
    

    Untuk Peran Web (ASP.NET), kode harus ditambahkan ke metode Application_Start aplikasi web Anda:

    using Microsoft.WindowsAzure.ServiceRuntime;
    using System;
    namespace MyWebRoleApp
    {
        public class MyMvcApplication : System.Web.HttpApplication
        {
           protected void Application_Start()
           {
              Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
              // TODO: The rest of your application startup code
           }
        }
    }
    
  3. Perbarui file ApplicationInsights.config peran Anda untuk menimpa lokasi folder sementara yang digunakan oleh SnapshotCollector

    <TelemetryProcessors>
     <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
       <!-- Use the SnapshotStore local resource for snapshots -->
       <TempFolder>%SNAPSHOTSTORE%</TempFolder>
       <!-- Other SnapshotCollector configuration options -->
     </Add>
    </TelemetryProcessors>
    

Menimpa folder Salinan Bayangan

Saat dimulai, Snapshot Collector mencoba menemukan folder di disk yang cocok untuk menjalankan proses Snapshot Uploader. Folder yang dipilih dikenal sebagai folder Salin Bayangan.

Snapshot Collector memeriksa beberapa lokasi terkenal, memastikan adanya izin untuk menyalin biner Snapshot Uploader. Variabel lingkungan berikut digunakan:

  • Fabric_Folder_App_Temp
  • LOCALAPPDATA
  • APPDATA
  • TEMP

Jika folder yang cocok tidak dapat ditemukan, Snapshot Collector melaporkan kesalahan yang mengatakan "Tidak dapat menemukan folder salinan bayangan yang cocok."

Jika salinan gagal, Snapshot Collector melaporkan kesalahan ShadowCopyFailed.

Jika pengunggah tidak dapat diluncurkan, Snapshot Collector akan melaporkan kesalahan UploaderCannotStartFromShadowCopy. Isi pesan sering berisi System.UnauthorizedAccessException. Kesalahan ini biasanya terjadi karena aplikasi berjalan di bawah akun dengan izin yang berkurang. Akun ini memiliki izin untuk menulis ke folder salinan bayangan, tetapi tidak memiliki izin untuk mengeksekusi kode.

Karena kesalahan ini biasanya terjadi selama startup, kesalahan biasanya akan diikuti oleh kesalahan ExceptionDuringConnect yang mengatakan Pengunggah gagal memulai."

Untuk mengatasi kesalahan ini, Anda dapat menentukan folder salinan bayangan secara manual melalui opsi konfigurasi ShadowCopyFolder. Misalnya, menggunakan ApplicationInsights.config:

<TelemetryProcessors>
 <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
   <!-- Override the default shadow copy folder. -->
   <ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
   <!-- Other SnapshotCollector configuration options -->
 </Add>
</TelemetryProcessors>

Atau, jika Anda menggunakan appsettings.json dengan aplikasi .NET Core:

{
  "ApplicationInsights": {
    "InstrumentationKey": "<your instrumentation key>"
  },
  "SnapshotCollectorConfiguration": {
    "ShadowCopyFolder": "D:\\SnapshotUploader"
  }
}

Menggunakan pencarian Application Insights untuk menemukan pengecualian dengan rekam jepret

Saat rekam jepret dibuat, pengecualian pelemparan ditandai dengan ID rekam jepret. ID rekam jepret tersebut disertakan sebagai properti kustom saat pengecualian dilaporkan ke Application Insights. Dengan menggunakan Cari di Application Insights, Anda dapat menemukan semua data dengan properti kustom ai.snapshot.id.

  1. Telusuri ke sumber daya Application Insights Anda di portal Azure.
  2. Pilih Telusuri.
  3. Ketik ai.snapshot.id kotak teks Cari dan tekan Enter.

Cuplikan layar menunjukkan penelusuran untuk telemetri dengan ID snapshot di portal.

Jika pencarian ini tidak menampilkan hasil, tidak ada rekam jepret yang dilaporkan ke Application Insights dalam rentang waktu yang dipilih.

Untuk mencari ID rekam jepret tertentu dari log Pengunggah, ketik ID tersebut di kotak Pencarian. Jika Anda tidak dapat menemukan data untuk rekam jepret yang Anda tahu telah diunggah, ikuti langkah-langkah berikut:

  1. Periksa kembali apakah Anda melihat sumber daya Application Insights yang tepat dengan memverifikasi kunci instrumentasi.

  2. Menggunakan tanda waktu dari log Pengunggah, sesuaikan filter Rentang Waktu pencarian untuk mencakup rentang waktu tersebut.

Jika Anda masih tidak melihat pengecualian dengan ID rekam jepret tersebut, data pengecualian tidak dilaporkan ke Application Insights. Situasi ini dapat terjadi jika aplikasi Anda mengalami crash setelah mengambil rekam jepret tetapi sebelum melaporkan data pengecualian. Dalam hal ini, periksa log App Service di bawah Diagnose and solve problems untuk melihat apakah ada mulai ulang yang tidak terduga atau pengecualian yang tidak tertangani.

Mengedit proksi jaringan atau aturan firewall

Jika aplikasi Anda tersambung ke Internet melalui proksi atau firewall, Anda mungkin perlu memperbarui aturan untuk berkomunikasi dengan layanan Snapshot Debugger.

IP yang digunakan oleh Application Insights Snapshot Debugger disertakan dalam tag layanan Azure Monitor. Untuk informasi selengkapnya, lihat Dokumentasi Tag Layanan.

Apakah ada biaya penagihan saat menggunakan rekam jepret?

Tidak ada biaya terhadap langganan Anda khusus untuk Snapshot Debugger. File rekam jepret yang dikumpulkan akan disimpan secara terpisah dari telemetri yang dikumpulkan oleh SDK Application Insights dan tidak ada biaya untuk penyerapan atau penyimpanan snapshot.