Pelacakan dependensi di Application Insights

Catatan

Dokumentasi berikut bergantung pada API klasik Application Insights. Rencana jangka panjang untuk Application Insights adalah mengumpulkan data menggunakan OpenTelemetry. Untuk informasi selengkapnya, lihat Mengaktifkan Azure Monitor OpenTelemetry untuk aplikasi .NET, Node.js, Python, dan Java.

Dependensi adalah komponen yang disebut oleh aplikasi Anda. Ini biasanya layanan yang dipanggil dengan menggunakan HTTP, database, atau sistem file. Application Insights mengukur durasi panggilan dependensi dan apakah itu gagal atau tidak, bersama dengan informasi seperti nama dependensi. Anda dapat menyelidiki panggilan dependensi tertentu dan menghubungkannya dengan permintaan dan pengecualian.

Dependensi yang dilacak secara otomatis

Application Insights SDKs untuk .NET dan .NET Core dikirimkan dengan DependencyTrackingTelemetryModule, yang merupakan modul telemetri yang secara otomatis mengumpulkan dependensi. Kumpulan dependensi ini diaktifkan secara otomatis untuk aplikasi ASP.NET dan ASP.NET Core saat dikonfigurasi menurut dokumen resmi yang ditautkan. Modul DependencyTrackingTelemetryModule dikirimkan sebagai paket NuGet Microsoft.ApplicationInsights.DependencyCollector. Ini dibawa secara otomatis saat Anda menggunakan paket NuGet Microsoft.ApplicationInsights.Web atau paket NuGet Microsoft.ApplicationInsights.AspNetCore.

Saat ini, DependencyTrackingTelemetryModule melacak dependensi berikut secara otomatis:

Dependensi Detail
HTTP/HTTPS Panggilan HTTP/HTTPS lokal atau jarak jauh.
Panggilan WCF Hanya dilacak secara otomatis jika pengikatan berbasis HTTP digunakan.
SQL Panggilan dilakukan dengan SqlClient. Lihat bagian Pelacakan SQL Tingkat Lanjut untuk mendapatkan kueri SQL lengkap untuk menangkap kueri SQL.
Azure Blob Storage, Table Storage, atau Queue Storage Panggilan yang dilakukan dengan klien Azure Storage.
SDK klien Azure Event Hubs Gunakan paket terbaru: https://nuget.org/packages/Azure.Messaging.EventHubs.
SDK klien Azure Service Bus Gunakan paket terbaru: https://nuget.org/packages/Azure.Messaging.ServiceBus.
Azure Cosmos DB Dilacak secara otomatis jika HTTP/HTTPS digunakan. Pelacakan untuk operasi dalam mode langsung dengan TCP juga akan ditangkap secara otomatis menggunakan paket >pratinjau = 3.33.0-pratinjau. Untuk detail selengkapnya, kunjungi dokumentasi.

Jika Anda kehilangan dependensi atau menggunakan SDK yang berbeda, pastikan dependensi tersebut ada dalam daftar dependensi yang dikumpulkan secara otomatis. Jika dependensi tidak dikumpulkan secara otomatis, Anda dapat melacaknya secara manual dengan melacak panggilan dependensi.

Menyiapkan pelacakan dependensi otomatis di aplikasi konsol

Untuk melacak dependensi secara otomatis dari aplikasi konsol .NET, instal paket NuGet Microsoft.ApplicationInsights.DependencyCollector dan inisialisasi DependencyTrackingTelemetryModule:

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

Untuk aplikasi konsol .NET Core, TelemetryConfiguration.Active kadaluwarsa. Lihat panduan dalam dokumentasi layanan Pekerja dan dokumentasi pemantauan ASP.NET Core.

Bagaimana cara kerja pemantauan dependensi otomatis?

Dependensi dikumpulkan secara otomatis dengan menggunakan salah satu teknik berikut:

  • Menggunakan instrumentasi kode byte di sekitar metode tertentu. Gunakan InstrumentationEngine baik dari StatusMonitor atau ekstensi Azure App Service Web Apps.
  • EventSource panggilan balik.
  • DiagnosticSource panggilan balik di .NET atau .NET Core SDK terbaru.

Melacak dependensi secara manual

Contoh dependensi berikut, yang tidak dikumpulkan secara otomatis, memerlukan pelacakan manual:

  • Azure Cosmos DB dilacak secara otomatis hanya jika HTTP/HTTPS digunakan. Mode TCP tidak akan diambil secara otomatis oleh Application Insights untuk versi SDK yang lebih lama dari 2.22.0-Beta1.
  • Redis

Untuk dependensi yang tidak dikumpulkan secara otomatis oleh SDK, Anda dapat melacaknya secara manual dengan menggunakan API TrackDependency yang digunakan oleh modul pengumpul otomatis standar.

Contoh

Jika Anda membuat kode dengan assembly yang tidak Anda tulis sendiri, Anda dapat melakukan semua panggilan ke sana. Skenario ini akan memungkinkan Anda untuk mengetahui kontribusi apa yang dilakukannya pada waktu respons Anda.

Agar data ini ditampilkan dalam bagan dependensi di Application Insights, kirimkan dengan menggunakan TrackDependency:


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

Atau, TelemetryClient menyediakan metode ekstensi StartOperation dan StopOperation, yang dapat digunakan untuk melacak dependensi secara manual seperti yang ditunjukkan dalam Pelacakan dependensi keluar.

Jika Anda ingin menonaktifkan modul pelacakan dependensi standar, hapus referensi ke DependencyTrackingTelemetryModule di ApplicationInsights.config untuk aplikasi ASP.NET. Untuk aplikasi ASP.NET Core, ikuti instruksi di Application Insights untuk aplikasi ASP.NET Core.

Melacak panggilan AJAX dari halaman web

Untuk halaman web, Application Insights JavaScript SDK secara otomatis mengumpulkan panggilan AJAX sebagai dependensi.

Pelacakan SQL Tingkat Lanjut untuk mendapatkan kueri SQL penuh

Catatan

Azure Functions memerlukan pengaturan terpisah untuk mengaktifkan pengumpulan teks SQL. Untuk informasi selengkapnya, lihat Mengaktifkan kumpulan kueri SQL.

Untuk panggilan SQL, nama server dan database selalu dikumpulkan dan disimpan sebagai nama DependencyTelemetry yang dikumpulkan. Bidang lain, yang disebut data, dapat berisi teks kueri SQL penuh.

Untuk aplikasi ASP.NET Core, sekarang diperlukan untuk ikut serta dalam kumpulan Teks SQL dengan menggunakan:

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

Untuk aplikasi ASP.NET, teks kueri SQL penuh dikumpulkan dengan bantuan instrumentasi kode byte, yang memerlukan penggunaan mesin instrumentasi atau dengan menggunakan paket NuGet Microsoft.Data.SqlClient alih-alih pustaka System.Data.SqlClient. Langkah-langkah khusus platform untuk mengaktifkan kumpulan kueri SQL penuh dijelaskan dalam tabel berikut.

Platform Langkah-langkah yang diperlukan untuk mendapatkan kueri SQL penuh
Web Apps di Azure App Service Di panel kontrol aplikasi web Anda, buka panel Application Insights dan aktifkan SQL Commands di bawah .NET.
Server IIS (Azure Virtual Machines, lokal, dan sebagainya) Gunakan paket NuGet Microsoft.Data.SqlClient atau gunakan Modul PowerShell Agen Application Insights untuk menginstal mesin instrumentasi dan memulai ulang IIS.
Layanan Cloud Azure Tambahkan tugas permulaan untuk menginstal StatusMonitor.
Aplikasi Anda harus di-onboard ke ApplicationInsights SDK pada waktu bulid dengan menginstall paket NuGet untuk ASP.NET atau aplikasi ASP.NET Core.
IIS Express Gunakan paket Microsoft.Data.SqlClient NuGet.
WebJobs di Azure App Service Gunakan paket Microsoft.Data.SqlClient NuGet.

Selain langkah spesifik platform sebelumnya, Anda juga harus secara eksplisit ikut serta untuk mengaktifkan kumpulan perintah SQL dengan memodifikasi file applicationInsights.config dengan kode berikut:

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

Dalam kasus sebelumnya, cara yang tepat untuk memvalidasi bahwa mesin instrumentasi telah diinstal dengan benar adalah dengan memvalidasi bahwa versi SDK dari DependencyTelemetry yang dikumpulkan adalah rddp. Penggunaan rdddsd atau rddf menunjukkan dependensi dikumpulkan melalui panggilan balik DiagnosticSource atau EventSource, sehingga kueri SQL penuh tidak akan diambil.

Di mana menemukan data dependensi

  • Peta Aplikasi memvisualisasikan dependensi antara aplikasi Anda dan komponen tetangga.
  • Diagnostik Transaksi menunjukkan data server terpadu dan berkorelasi.
  • Tab Browser memperlihatkan panggilan AJAX dari browser pengguna Anda.
  • Klik dari permintaan yang lambat atau gagal untuk memeriksa panggilan dependensi mereka.
  • Analytics dapat digunakan untuk mengkueri data dependensi.

Mendiagnosis permintaan lambat

Setiap peristiwa permintaan dikaitkan dengan panggilan dependensi, pengecualian, dan peristiwa lain yang dilacak saat aplikasi Anda memproses permintaan. Jadi, jika beberapa permintaan dilakukan buruk, Anda dapat mengetahui apakah itu karena respons yang lambat dari dependensi.

Menelusuri dari permintaan ke dependensi

Pilih tab Performa di sebelah kiri dan pilih tab Dependensi di bagian atas.

Pilih Nama Dependensi di bawah Keseluruhan. Setelah Anda memilih dependensi, grafik distribusi durasi dependensi tersebut muncul di sebelah kanan.

Screenshot that shows the Dependencies tab open to select a Dependency Name in the chart.

Pilih tombol Sampel di kanan bawah. Kemudian pilih sampel untuk melihat detail transaksi end-to-end.

Screenshot that shows selecting a sample to see the end-to-end transaction details.

Profil situs langsung Anda

Profiler Application Insights melacak panggilan HTTP ke situs langsung Anda dan menunjukkan kepada Anda fungsi dalam kode Anda yang membutuhkan waktu lama.

Permintaan gagal

Permintaan yang gagal mungkin juga dikaitkan dengan panggilan gagal ke dependensi.

Pilih tab Kegagalan di sebelah kiri dan pilih tab Dependensi di bagian atas.

Screenshot that shows selecting the failed requests chart.

Di sini Anda akan melihat jumlah dependensi yang gagal. Untuk mendapatkan informasi selengkapnya tentang kemunculan yang gagal, pilih Nama Dependensi di tabel bawah. Pilih tombol Dependensi di kanan bawah untuk melihat detail transaksi end-to-end.

Logs (Analytics)

Anda dapat melacak dependensi dalam bahasa kueri Kusto. Berikut adalah beberapa contoh.

  • Temukan panggilan dependensi yang gagal:

    
        dependencies | where success != "True" | take 10
    
  • Temukan panggilan AJAX:

    
        dependencies | where client_Type == "Browser" | take 10
    
  • Menemukan panggilan dependensi yang terkait dengan permintaan:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • Temukan panggilan AJAX yang terkait dengan tampilan halaman:

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

Tanya jawab umum

Bagian ini menyediakan jawaban atas pertanyaan umum.

Bagaimana cara pengumpul dependensi otomatis melaporkan panggilan yang gagal ke dependensi?

Panggilan dependensi yang gagal akan memiliki bidang success diatur ke Salah. Modul DependencyTrackingTelemetryModule tidak melaporkan ExceptionTelemetry. Model data lengkap untuk dependensi dijelaskan dalam model data telemetri Application Insights.

Bagaimana cara menghitung latensi menelan untuk telemetri dependensi saya?

Gunakan kode ini:

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

Bagaimana cara menentukan waktu panggilan dependensi dimulai?

Dalam tampilan kueri Log Analytics, timestamp menunjukkan saat panggilan TrackDependency() dimulai, yang terjadi segera setelah respons panggilan dependensi diterima. Untuk menghitung waktu saat panggilan dependensi dimulai, Anda akan mengambil timestamp dan mengurangi rekaman duration panggilan dependensi.

Apakah pelacakan dependensi di Application Insights menyertakan isi respons pengelogan?

Pelacakan dependensi di Application Insights tidak menyertakan badan respons pengelogan karena akan menghasilkan terlalu banyak telemetri untuk sebagian besar aplikasi.

SDK sumber terbuka

Seperti setiap Application Insights SDK, modul kumpulan dependensi juga merupakan sumber terbuka. Baca dan berkontribusi pada kode atau laporkan masalah di repository resmi GitHub.

Koleksi otomatis dependensi

Di bawah ini adalah daftar panggilan dependensi yang saat ini didukung yang secara otomatis terdeteksi sebagai dependensi tanpa memerlukan modifikasi tambahan apa pun pada kode aplikasi Anda. Dependensi ini divisualisasikan dalam Peta aplikasi Application Insights dan tampilan Diagnostik transaksi. Jika dependensi Anda tidak ada dalam daftar di bawah ini, Anda masih dapat melacaknya secara manual dengan panggilan dependensi trek.

.NET

Kerangka kerja aplikasi Versi
ASP.NET Webforms 4.5+
ASP.NET MVC +4
ASP.NET WebAPI 4.5+
Inti ASP.NET 1.1+
Pustaka komunikasi
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 - rilis stabil terbaru. (Lihat Catatan di bawah ini.)
SDK Klien Azure Event Hubs 1.1.0
SDK Klien ServiceBus 7.0.0
Klien penyimpanan
ADO.NET 4.5+

Catatan

Ada masalah yang diketahui dengan versi Microsoft.Data.SqlClient yang lebih lama. Sebaiknya gunakan 1.1.0 atau yang lebih baru untuk mengurangi masalah ini. Entity Framework Core tidak selalu dikirim dengan rilis stabil terbaru Microsoft.Data.SqlClient jadi kami menyarankan untuk mengonfirmasi bahwa Anda berada di setidaknya 1.1.0 untuk menghindari masalah ini.

Java

Lihat daftar dependensi data yang dikumpulkan secara otomatis milik Application Insights Java.

Node.js

Daftar modul terbaru yang saat ini didukung dipertahankan di sini.

JavaScript

Pustaka komunikasi Versi
XMLHttpRequest Semua

Langkah berikutnya