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 dan Peta Strategi OpenTelemetry kami. Panduan migrasi tersedia untuk .NET, Node.js, dan Python.
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 dariStatusMonitor
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.
Pilih tombol Sampel di kanan bawah. Kemudian pilih sampel untuk melihat detail transaksi end-to-end.
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.
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
- Pengecualian
- Data pengguna dan halaman
- Ketersediaan
- Menyiapkan pelacakan dependensi kustom untuk Java.
- Menyiapkan pelacakan dependensi kustom untuk OpenCensus Python.
- Menulis telemetri dependensi kustom
- Lihat model data untuk jenis Application Insights dan model data.
- Lihat platform yang didukung oleh Application Insights.