Pengambilan Sampel di Application Insights
Pengambilan sampel adalah fitur dalam Application Insights. Ini cara yang disarankan untuk mengurangi lalu lintas telemetri, biaya data, dan biaya penyimpanan, sekaligus menyimpan analisis data aplikasi yang benar secara statistik. Pengambilan sampel juga membantu Anda mencegah Application Insights membatasi telemetri. Filter pengambilan sampel memilih item yang terkait, sehingga Anda dapat menavigasi antar item saat melakukan penyelidikan diagnostik.
Saat jumlah metrik disajikan di portal, jumlah metrik dinormalisasi ulang untuk memperhitungkan pengambilan sampel. Hal ini meminimalkan efek pada statistik.
Catatan
- Jika Anda telah mengadopsi Distro OpenTelemetry kami dan mencari opsi konfigurasi, lihat Mengaktifkan Pengambilan Sampel.
Perhatian
Kami merekomendasikan Distro OpenTelemetry Azure Monitor untuk aplikasi atau pelanggan baru untuk mendukung Azure Monitor Application Insights. Distro OpenTelemetry Azure Monitor memberikan fungsionalitas dan pengalaman serupa seperti Application Insights SDK. Dimungkinkan untuk bermigrasi dari Application Insights SDK menggunakan panduan migrasi untuk .NET, Node.js, dan Python, tetapi kami masih berupaya menambahkan beberapa fitur lagi untuk kompatibilitas mundur.
Ringkasan singkat
- Ada tiga jenis pengambilan sampel yang berbeda: pengambilan sampel adaptif, pengambilan sampel dengan laju tetap, dan pengambilan sampel penyerapan.
- Pengambilan sampel adaptif diaktifkan secara default di semua versi terbaru application Insights ASP.NET dan ASP.NET Core Software Development Kits (SDK), dan Azure Functions.
- Pengambilan sampel laju tetap tersedia dalam versi terbaru SDK Application Insights untuk ASP.NET, ASP.NET Core, Java (baik agen maupun SDK), JavaScript, dan Python.
- Di Java, pengambil alihan pengambilan sampel tersedia, dan berguna ketika Anda perlu menerapkan tingkat pengambilan sampel yang berbeda untuk dependensi, permintaan, dan pemeriksaan kesehatan yang dipilih. Gunakan pengambil alihan pengambilan sampel untuk menghilangkan beberapa dependensi mengganggu sementara, misalnya, semua kesalahan penting dibiarkan tetap pada 100%. Ini adalah bentuk pengambilan sampel tetap yang memberi Anda tingkat kontrol paling tinggi atas telemetri Anda.
- Pengambilan sampel penyerapan berfungsi pada titik akhir layanan Application Insights. Ini hanya berlaku jika tidak ada pengambilan sampel lain yang berlaku. Jika SDK mengambil sampel telemetri Anda, pengambilan sampel penyerapan akan dinonaktifkan.
- Untuk aplikasi web, jika Anda mencatat peristiwa kustom dan perlu memastikan serangkaian peristiwa disimpan atau dibuang bersama-sama, peristiwa harus memiliki nilai
OperationId
yang sama. - Jika Anda menulis kueri Analytics, Anda harus mempertimbangkan pengambilan sampel. Secara khusus, Anda harus menggunakan
summarize sum(itemCount)
, bukan hanya menghitung data. - Catatan: Beberapa jenis telemetri, termasuk metrik performa dan metrik kustom akan selalu disimpan, terlepas dari apakah pengambilan sampel diaktifkan atau tidak.
Tabel berikut ini meringkas jenis pengambilan sampel yang tersedia untuk setiap SDK dan jenis aplikasi:
Application Insights SDK | Pengambilan sampel adaptif didukung | Pengambilan sampel laju tetap didukung | Pengambilan sampel penyerapan didukung |
---|---|---|---|
ASP.NET | Ya (aktif secara default) | Ya | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
Inti ASP.NET | Ya (aktif secara default) | Ya | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
Azure Functions | Ya (aktif secara default) | No | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
Java | Tidak | Ya | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
JavaScript | Tidak | Ya | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
Node.JS | Tidak | Ya | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
Python | Tidak | Ya | Hanya jika tidak ada pengambilan sampel lain yang berlaku |
Semua lainnya | Tidak | No | Ya |
Catatan
- Agen Aplikasi Java 3.4.0 dan yang lebih baru menggunakan pengambilan sampel terbatas laju sebagai default saat mengirim telemetri ke Application Insights. Untuk informasi selengkapnya, lihat Pengambilan sampel terbatas laju.
- Informasi di sebagian besar halaman ini berlaku untuk versi Application Insights SDK saat ini. Untuk informasi tentang versi SDK yang lebih lama, lihat versi SDK yang lebih lama.
Kapan harus menggunakan pengambilan sampel
Secara umum, untuk sebagian besar aplikasi berukuran kecil dan sedang Anda tidak perlu melakukan pengambilan sampel. Informasi diagnostik yang paling berguna dan statistik paling akurat dapat diperoleh dengan mengumpulkan data tentang semua aktivitas pengguna Anda.
Keuntungan utama pengambilan sampel adalah:
- Layanan Application Insights menurun ("pembatasan") poin data saat aplikasi Anda mengirim tingkat telemetri yang tinggi dalam interval waktu singkat. Pengambilan sampel mengurangi kemungkinan aplikasi Anda melihat pembatasan terjadi.
- Agar tetap dalam kuota titik data untuk tingkat harga Anda.
- Untuk mengurangi lalu lintas jaringan dari kumpulan telemetri.
Cara kerja pengambilan sampel
Algoritma pengambilan sampel memutuskan item telemetri mana yang disimpan atau dihilangkannya, baik layanan SDK atau Application Insights melakukan pengambilan sampel. Ini mengikuti aturan untuk menjaga semua titik data yang saling terkait tetap utuh, memastikan Application Insights memberikan pengalaman diagnostik yang dapat ditindaklanjuti dan dapat diandalkan, bahkan dengan lebih sedikit data. Misalnya, jika sampel menyertakan permintaan yang gagal, sampel menyimpan semua item telemetri terkait seperti pengecualian dan jejak. Dengan cara ini, saat Anda melihat detail permintaan di Application Insights, Anda selalu melihat permintaan dan telemetri terkait.
Keputusan pengambilan sampel didasarkan pada ID operasi permintaan, yang artinya semua item telemetri milik operasi tertentu disimpan atau dihilangkan. Untuk item telemetri yang tidak memiliki set ID operasi (seperti item telemetri yang dilaporkan dari utas asinkron tanpa konteks HTTP) pengambilan sampel hanya menangkap persentase item telemetri dari setiap jenis.
Saat mengembalikan telemetri kepada Anda, layanan Application Insights menyesuaikan metrik dengan persentase pengambilan sampel yang sama yang digunakan pada saat pengumpulan, agar mengimbangi titik data yang hilang. Oleh karena itu, ketika melihat telemetri di Application Insights, pengguna melihat perkiraan yang benar secara statistik yang dekat dengan angka nyata.
Akurasi perkiraan sangat tergantung pada persentase pengambilan sampel yang dikonfigurasi. Selain itu, akurasi meningkat untuk aplikasi yang menangani volume besar permintaan serupa dari banyak pengguna. Di sisi lain, untuk aplikasi yang tidak berfungsi dengan beban yang signifikan, pengambilan sampel tidak diperlukan karena aplikasi ini biasanya dapat mengirim semua telemetri mereka sambil tetap berada dalam kuota, tanpa menyebabkan kehilangan data dari pembatasan.
Jenis pengambilan sampel
Ada tiga metode pengambilan sampel yang berbeda:
Pengambilan sampel adaptif secara otomatis menyesuaikan volume telemetri yang dikirim dari SDK di aplikasi ASP.NET/ASP.NET Core Anda dan dari Azure Functions. Ini adalah pengambilan sampel default saat Anda menggunakan ASP.NET atau ASP.NET Core SDK. Pengambilan sampel adaptif saat ini hanya tersedia untuk telemetri sisi server ASP.NET/ASP.NET Core, dan untuk Azure Functions.
Pengambilan sampel laju tetap mengurangi volume telemetri yang dikirim dari server ASP.NET, ASP.NET Core, atau Java dan dari browser pengguna Anda. Anda mengatur laju. Klien dan server menyinkronkan pengambilan sampel mereka sehingga, di Pencarian, Anda dapat menavigasi antara tampilan halaman terkait dan permintaan.
Pengambilan sampel penyerapan berlaku di titik akhir layanan Application Insights. Ini membuang beberapa telemetri yang tiba dari aplikasi Anda, dengan laju pengambilan sampel yang ditetapkan. Ini tidak mengurangi lalu lintas telemetri yang dikirim dari aplikasi Anda, tetapi membantu Anda tetap dalam kuota bulanan. Keuntungan utama dari pengambilan sampel penyerapan adalah Anda dapat mengatur laju pengambilan sampel tanpa menyebarkan ulang aplikasi Anda. Pengambilan sampel penyerapan bekerja secara seragam untuk semua server dan klien, tetapi tidak berlaku saat jenis pengambilan sampel lainnya beroperasi.
Penting
Jika metode pengambilan sampel adaptif atau laju tetap diaktifkan untuk jenis telemetri, pengambilan sampel penyerapan akan dinonaktifkan untuk telemetri tersebut. Akan tetapi, jenis telemetri yang tidak termasuk pengambilan sampel di tingkat SDK akan tetap tunduk pada pengambilan sampel penyerapan dengan laju yang ditetapkan di portal.
Pengambilan sampel adaptif
Pengambilan sampel adaptif mempengaruhi volume telemetri yang dikirim dari aplikasi server web Anda ke titik akhir layanan Application Insights.
Tip
Pengambilan sampel adaptif diaktifkan secara default saat Anda menggunakan SDK ASP.NET atau SDK ASP.NET Core, juga diaktifkan secara default untuk Azure Functions.
Volume secara otomatis menyesuaikan agar tetap berada dalam MaxTelemetryItemsPerSecond
batas tarif. Jika aplikasi menghasilkan telemetri rendah, seperti selama penelusuran kesalahan atau penggunaan rendah, aplikasi tidak menghilangkan item selama volume tetap berada di bawah MaxTelemetryItemsPerSecond
. Saat volume telemetri naik, volume tersebut menyesuaikan laju pengambilan sampel untuk mencapai volume target. Penyesuaian ini, dihitung ulang secara berkala, didasarkan pada rata-rata bergerak laju transmisi keluar.
Untuk mencapai volume target, beberapa telemetri yang dihasilkan akan dibuang. Tetapi seperti jenis pengambilan sampel lainnya, algoritmanya mempertahankan item telemetri terkait. Misalnya, saat memeriksa telemetri di Pencarian, Anda dapat menemukan permintaan yang terkait dengan pengecualian tertentu.
Jumlah metrik seperti laju permintaan dan laju pengecualian disesuaikan agar mengimbangi laju pengambilan sampel, sehingga menunjukkan nilai rata-rata di Penjelajah Metrik.
Mengonfigurasi pengambilan sampel adaptif untuk aplikasi ASP.NET
Catatan
Bagian ini berlaku untuk aplikasi ASP.NET, bukan untuk aplikasi ASP.NET Core. Pelajari tentang mengonfigurasi pengambilan sampel adaptif untuk ASP.NET Core nanti dalam dokumen ini.
Dalam ApplicationInsights.config
, Anda dapat menyesuaikan beberapa parameter dalam node AdaptiveSamplingTelemetryProcessor
. Angka yang ditampilkan adalah nilai default:
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
Tingkat target operasi logis yang hendak dikumpulkan algoritma adaptif pada setiap host server. Jika aplikasi web Anda berjalan di banyak host, kurangi nilai ini agar tetap berada dalam laju target lalu lintas Anda di portal Application Insights.
<EvaluationInterval>00:00:15</EvaluationInterval>
Interval di mana tingkat telemetri saat ini dievaluasi kembali. Evaluasi dilakukan sebagai rata-rata pergerakan. Anda mungkin ingin mempersingkat interval ini jika telemetri Anda bisa meledak secara tiba-tiba.
<SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>
Ketika nilai persentase pengambilan sampel berubah, nilai tersebut menentukan seberapa cepat kita dapat mengurangi persentase pengambilan sampel lagi untuk mengambil lebih sedikit data.
<SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>
Ketika nilai persentase pengambilan sampel berubah, nilai tersebut menentukan seberapa cepat kita dapat meningkatkan persentase pengambilan sampel lagi untuk mengambil lebih banyak data.
<MinSamplingPercentage>0.1</MinSamplingPercentage>
Karena persentase pengambilan sampel bervariasi, berapa nilai minimum yang boleh kami tetapkan?
<MaxSamplingPercentage>100.0</MaxSamplingPercentage>
Karena persentase pengambilan sampel bervariasi, berapa nilai maksimum boleh kami tetapkan?
<MovingAverageRatio>0.25</MovingAverageRatio>
Dalam perhitungan rata-rata pergerakan, nilai ini menentukan berat yang harus ditetapkan ke nilai terbaru. Gunakan nilai yang sama dengan atau kurang dari 1. Nilai yang lebih kecil membuat algoritma kurang reaktif terhadap perubahan mendadak.
<InitialSamplingPercentage>100</InitialSamplingPercentage>
Jumlah telemetri yang akan diambil sampelnya saat aplikasi dimulai. Jangan kurangi nilai ini saat Anda sedang melakukan debug.
<ExcludedTypes>type;type</ExcludedTypes>
Titik koma memisahkan daftar jenis yang tidak ingin Anda ambil sampelnya. Jenis yang dikenali adalah:
Dependency
,Event
,Exception
,PageView
,Request
,Trace
. Semua telemetri dari jenis yang ditentukan ditransmisikan; jenis yang tidak ditentukan diambil sampelnya.<IncludedTypes>type;type</IncludedTypes>
Daftar jenis yang dipisahkan dengan titik koma yang ingin Anda ambil sampelnya. Jenis yang dikenali adalah:
Dependency
,Event
,Exception
,PageView
,Request
,Trace
. Jenis yang ditentukan diambil sampelnya; semua telemetri dari jenis lain selalu ditransmisikan.
Untuk mematikan pengambilan sampel adaptif, hapus node AdaptiveSamplingTelemetryProcessor
dari ApplicationInsights.config
.
Alternatif: Mengonfigurasi pengambilan sampel adaptif dalam kode
Alih-alih mengatur parameter pengambilan sampel dalam file .config
, Anda dapat mengatur nilai tersebut secara terprogram.
Hapus semua node
AdaptiveSamplingTelemetryProcessor
dari file.config
.Gunakan cuplikan berikut untuk mengonfigurasi pengambilan sampel adaptif:
using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation; using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel; // ... var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // For older versions of the Application Insights SDK, use the following line instead: // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; // Enable AdaptiveSampling so as to keep overall telemetry volume to 5 items per second. builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5); // If you have other telemetry processors: builder.Use((next) => new AnotherProcessor(next)); builder.Build();
Anda juga dapat menyesuaikan laju pengambilan sampel untuk setiap jenis telemetri satu per satu, atau bahkan dapat mengecualikan jenis tertentu agar tidak diambil sampelnya sama sekali:
// The following configures adaptive sampling with 5 items per second, and also excludes Dependency telemetry from being subjected to sampling.
builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
Mengonfigurasi pengambilan sampel adaptif untuk aplikasi ASP.NET Core
aplikasi ASP.NET Core dapat dikonfigurasi dalam kode atau melalui appsettings.json
file. Untuk informasi lebih lanjut, lihat Konfigurasi di ASP.NET Core.
Pengambilan sampel adaptif diaktifkan secara default untuk semua aplikasi ASP.NET Core. Anda dapat menonaktifkan atau menyesuaikan perilaku pengambilan sampel.
Menonaktifkan pengambilan sampel adaptif
Fitur pengambilan sampel default dapat dinonaktifkan saat menambahkan layanan Application Insights.
Tambahkan ApplicationInsightsServiceOptions
setelah WebApplication.CreateBuilder()
metode dalam Program.cs
file:
var builder = WebApplication.CreateBuilder(args);
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();
Kode di atas menonaktifkan pengambilan sampel adaptif. Ikuti langkah-langkah berikut untuk menambahkan pengambilan sampel dengan opsi kustomisasi lainnya.
Mengonfigurasi pengaturan pengambilan sampel
Gunakan metode TelemetryProcessorChainBuilder
ekstensi berikut untuk menyesuaikan perilaku pengambilan sampel.
Penting
Jika Anda menggunakan metode ini untuk mengonfigurasi pengambilan sampel, pastikan menetapkan properti aiOptions.EnableAdaptiveSampling
ke false
saat memanggil AddApplicationInsightsTelemetry()
. Setelah membuat perubahan ini, Anda kemudian perlu mengikuti instruksi di blok kode berikut dengan tepat untuk mengaktifkan kembali pengambilan sampel adaptif dengan kustomisasi Anda di tempat. Gagal melakukannya dapat mengakibatkan konsumsi data berlebih. Selalu uji pengaturan pengambilan sampel pasca perubahan, dan atur batas data harian yang sesuai untuk membantu mengontrol biaya Anda.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
// Using adaptive sampling
telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);
// Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
// telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
telemetryProcessorChainBuilder.Build();
});
builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
EnableAdaptiveSampling = false,
});
var app = builder.Build();
Anda dapat menyesuaikan pengaturan pengambilan sampel lainnya menggunakan kelas SamplingPercentageEstimatorSettings :
using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
telemetryProcessorChainBuilder.UseAdaptiveSampling(new SamplingPercentageEstimatorSettings
{
MinSamplingPercentage = 0.01,
MaxSamplingPercentage = 100,
MaxTelemetryItemsPerSecond = 5
}, null, excludedTypes: "Dependency");
Mengonfigurasi pengambilan sampel adaptif untuk Azure Functions
Ikuti instruksi dari halaman ini untuk mengonfigurasi pengambilan sampel adaptif untuk aplikasi yang berjalan di Azure Functions.
Pengambilan sampel laju tetap
Pengambilan sampel laju tetap mengurangi lalu lintas yang dikirim dari server web dan browser web Anda. Tidak seperti pengambilan sampel adaptif, pengambilan sampel ini mengurangi telemetri pada laju tetap yang Anda tetapkan. Pengambilan sampel laju tetap tersedia untuk ASP.NET, ASP.NET Core, Java, dan Python.
Seperti teknik lainnya, teknik ini juga menyimpan item terkait. Teknik ini juga menyinkronkan sampel klien dan server sehingga item terkait disimpan. Sebagai contoh, saat Anda melihat tampilan halaman di Penelusuran, Anda dapat menemukan permintaan server terkait.
Di Penjelajah Metrik, laju seperti jumlah permintaan dan pengecualian dikalikan dengan faktor untuk mengimbangi laju pengambilan sampel, sehingga sudah pasti benar.
Mengonfigurasi pengambilan sampel laju tetap untuk aplikasi ASP.NET
Nonaktifkan pengambilan sampel adaptif: Dalam
ApplicationInsights.config
, hapus atau komentari nodeAdaptiveSamplingTelemetryProcessor
.<TelemetryProcessors> <!-- Disabled adaptive sampling: <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> </Add> -->
Aktifkan modul pengambilan sampel laju tetap. Tambahkan cuplikan ini ke
ApplicationInsights.config
:Dalam contoh ini, SamplingPercentage adalah 20, sehingga 20% dari semua item diambil sampelnya. Nilai di Metrics Explorer dikalikan dengan (100/20) = 5 untuk mengkompensasi.
<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <!-- Set a percentage close to 100/N where N is an integer. --> <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) --> <SamplingPercentage>20</SamplingPercentage> </Add> </TelemetryProcessors>
Atau, alih-alih mengatur parameter pengambilan sampel dalam file
ApplicationInsights.config
, Anda dapat mengatur nilai ini secara terprogram:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel; // ... var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // For older versions of the Application Insights SDK, use the following line instead: // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; builder.UseSampling(10.0); // percentage // If you have other telemetry processors: builder.Use((next) => new AnotherProcessor(next)); builder.Build();
Mengonfigurasi pengambilan sampel laju tetap untuk aplikasi ASP.NET Core
Menonaktifkan pengambilan sampel adaptif
Perubahan dapat dilakukan setelah
WebApplication.CreateBuilder()
metode , menggunakanApplicationInsightsServiceOptions
:var builder = WebApplication.CreateBuilder(args); var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions(); aiOptions.EnableAdaptiveSampling = false; builder.Services.AddApplicationInsightsTelemetry(aiOptions); var app = builder.Build();
Mengaktifkan modul pengambilan sampel laju tetap
Perubahan dapat dilakukan setelah
WebApplication.CreateBuilder()
metode :var builder = WebApplication.CreateBuilder(args); builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration => { var builder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // Using fixed rate sampling double fixedSamplingPercentage = 10; builder.UseSampling(fixedSamplingPercentage); builder.Build(); }); builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions { EnableAdaptiveSampling = false, }); var app = builder.Build();
Mengonfigurasi pengambil alihan pengambilan sampel dan pengambilan sampel tingkat tetap untuk aplikasi Java
Secara default tidak ada pengambilan sampel yang diaktifkan dalam autoinstrumentasi Java dan SDK. Saat ini autoinstrumentasi Java, penimpaan pengambilan sampel, dan pengambilan sampel laju tetap didukung. Pengambilan sampel adaptif tidak didukung di Java.
Mengonfigurasi autoinstrumentasi Java
- Untuk mengonfigurasi penggantian pengambilan sampel yang menggantikan rasio pengambilan sampel default dan menerapkan rasio pengambilan sampel yang berbeda untuk permintaan dan dependensi yang dipilih, gunakan panduan penggantian pengambilan sampel.
- Untuk mengonfigurasi pengambilan sampel tarif tetap yang berlaku untuk semua telemetri Anda, gunakan panduan pengambilan sampel tarif tetap.
Catatan
Untuk persentase pengambilan sampel, pilih persentase yang mendekati 100/N di mana N adalah bilangan bulat. Saat ini pengambilan sampel tidak mendukung nilai lain.
Mengonfigurasi pengambilan sampel laju tetap untuk aplikasi OpenCensus Python
Lengkapi aplikasi Anda dengan eksportir OpenCensus Azure Monitor terbaru.
Catatan
Pengambilan sampel laju tetap tidak tersedia untuk eksportir metrik. Ini berarti metrik kustom adalah satu-satunya jenis telemetri tempat pengambilan sampel TIDAK dapat dikonfigurasi. Eksportir metrik akan mengirimkan semua telemetri yang dilacaknya.
Pengambilan sampel laju tetap untuk pelacakan
Anda dapat menentukan sampler
sebagai bagian dari konfigurasi Anda Tracer
. Jika tidak ada sampler eksplisit yang disediakan, ProbabilitySampler
akan digunakan secara default. ProbabilitySampler
akan menggunakan tarif 1/10000 secara default, yang berarti salah satu dari setiap 10.000 permintaan dikirim ke Application Insights. Jika Anda ingin menentukan laju pengambilan sampel, lihat detail berikut.
Untuk menentukan laju pengambilan sampel, pastikan Tracer
menentukan pembuat sampel dengan laju pengambilan sampel antara 0,0 dan 1,0 inklusif. Tingkat pengambilan sampel 1,0 mewakili 100%, yang berarti semua permintaan Anda dikirim sebagai telemetri ke Application Insights.
tracer = Tracer(
exporter=AzureExporter(
instrumentation_key='00000000-0000-0000-0000-000000000000',
),
sampler=ProbabilitySampler(1.0),
)
Pengambilan sampel laju tetap untuk log
Anda dapat mengonfigurasi pengambilan sampel laju tetap untuk AzureLogHandler
dengan mengubah argumen opsional logging_sampling_rate
. Jika tidak ada argumen yang disediakan, laju pengambilan sampel 1,0 akan digunakan. Tingkat pengambilan sampel 1,0 mewakili 100%, yang berarti semua permintaan Anda dikirim sebagai telemetri ke Application Insights.
handler = AzureLogHandler(
instrumentation_key='00000000-0000-0000-0000-000000000000',
logging_sampling_rate=0.5,
)
Mengonfigurasi pengambilan sampel laju tetap untuk halaman web dengan JavaScript
Halaman web berbasis JavaScript dapat dikonfigurasi untuk menggunakan Application Insights. Telemetri dikirim dari aplikasi klien yang berjalan di browser pengguna, dan halaman dapat di-hosting dari server mana pun.
Saat mengonfigurasi halaman web berbasis JavaScript untuk Application Insights, ubah cuplikan JavaScript yang Anda dapatkan dari portal Application Insights.
Tip
Di Aplikasi ASP.NET aplikasi yang menyertakan JavaScript, cuplikan biasanya terletak di _Layout.cshtml
.
Sisipkan garis seperti samplingPercentage: 10,
sebelum kunci instrumentasi:
<script>
var appInsights = // ...
({
// Value must be 100/N where N is an integer.
// Valid examples: 50, 25, 20, 10, 5, 1, 0.1, ...
samplingPercentage: 10,
instrumentationKey: ...
});
window.appInsights = appInsights;
appInsights.trackPageView();
</script>
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.
Untuk persentase pengambilan sampel, pilih persentase yang mendekati 100/N di mana N adalah bilangan bulat. Saat ini pengambilan sampel tidak mendukung nilai lain.
Mengoordinasikan pengambilan sampel sisi server dan sisi klien
SDK JavaScript sisi klien berpartisipasi dalam pengambilan sampel laju tetap dengan SDK sisi server. Halaman berinstrumentasi hanya mengirim telemetri sisi klien dari pengguna yang sama tempat SDK sisi server membuat keputusan untuk disertakan dalam pengambilan sampel. Logika ini dirancang untuk menjaga integritas sesi pengguna di seluruh aplikasi sisi klien dan sisi server. Akibatnya, dari item telemetri tertentu di Application Insights, Anda dapat menemukan semua item telemetri lainnya untuk pengguna atau sesi ini, dan di Pencarian Anda dapat menavigasi antara tampilan dan permintaan halaman terkait.
Jika telemetri sisi server dan klien Anda tidak menampilkan sampel terkoordinasi:
- Pastikan Anda mengaktifkan pengambilan sampel baik di server maupun klien.
- Pastikan Anda menetapkan persentase pengambilan sampel yang sama di klien dan server.
- Pastikan bahwa versi SDK adalah 2.0 atau lebih tinggi.
Pengambilan sampel penyerapan
Pengambilan sampel penyerapan beroperasi pada titik tempat telemetri dari server web, browser, dan perangkat Anda mencapai titik akhir layanan Application Insights. Meskipun tidak mengurangi lalu lintas telemetri yang dikirim dari aplikasi Anda, hal ini mengurangi jumlah yang diproses dan disimpan (dan dikenai biaya) oleh Application Insights.
Gunakan jenis pengambilan sampel ini jika aplikasi Anda sering melebihi kuota bulanannya dan Anda tidak memiliki opsi untuk menggunakan salah satu jenis pengambilan sampel berbasis SDK.
Tetapkan laju pengambilan sampel di halaman Penggunaan dan estimasi biaya:
Seperti jenis pengambilan sampel lainnya, algoritmanya mempertahankan item telemetri terkait. Misalnya, saat memeriksa telemetri di Pencarian, Anda dapat menemukan permintaan yang terkait dengan pengecualian tertentu. Jumlah metrik seperti laju permintaan dan laju pengecualian disimpan dengan benar.
Pengambilan sampel membuang titik data tertentu, membuatnya tidak tersedia dalam fitur Application Insights apa pun seperti Ekspor Berkelanjutan.
Pengambilan sampel penyerapan tidak berfungsi bersama pengambilan sampel adaptif atau laju tetap. Pengambilan sampel adaptif secara otomatis diaktifkan dengan ASP.NET SDK, ASP.NET Core SDK, di Azure App Service, atau dengan Agen Application Insights. Ketika titik akhir layanan Application Insights menerima telemetri dan mendeteksi tingkat pengambilan sampel di bawah 100% (menunjukkan pengambilan sampel aktif), titik akhir mengabaikan laju pengambilan sampel penyerapan yang ditetapkan.
Peringatan
Nilai yang ditampilkan di petak portal menunjukkan nilai yang Anda tetapkan untuk pengambilan sampel penyerapan. Ini tidak mewakili laju pengambilan sampel aktual jika ada pengambilan sampel SDK (pengambilan sampel adaptif atau laju tetap) sedang beroperasi.
Jenis pengambilan sampel mana yang harus digunakan?
Gunakan pengambilan sampel penyerapan jika:
- Anda sering menggunakan kuota telemetri bulanan.
- Anda mendapatkan terlalu banyak telemetri dari browser web pengguna.
- Anda menggunakan versi SDK yang tidak mendukung pengambilan sampel - misalnya versi ASP.NET yang lebih lama dari 2.0.
Gunakan pengambilan sampel laju tetap jika:
- Anda memerlukan pengambilan sampel yang disinkronkan antara klien dan server untuk menavigasi antara peristiwa terkait. Misalnya, tampilan halaman dan permintaan HTTP di Pencarian saat menyelidiki peristiwa.
- Anda yakin dengan persentase pengambilan sampel yang sesuai untuk aplikasi Anda. Seharusnya cukup tinggi untuk mendapatkan metrik yang akurat, tetapi di bawah tarif yang melebihi kuota harga Anda dan batas pembatasan.
Gunakan pengambilan sampel adaptif:
Jika kondisi untuk menggunakan bentuk pengambilan sampel lain tidak berlaku, kami sarankan pengambilan sampel adaptif. Pengaturan ini diaktifkan secara default dalam SDK ASP.NET/ASP.NET Core. Ini tidak mengurangi lalu lintas sampai tingkat minimum tertentu tercapai, oleh karena itu situs penggunaan rendah mungkin tidak diambil sampelnya sama sekali.
Mengetahui apakah pengambilan sampel sedang beroperasi
Gunakan kueri Analytics untuk menemukan laju pengambilan sampel.
union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType
Jika Anda melihat bahwa RetainedPercentage
untuk jenis apa pun kurang dari 100, jenis telemetri tersebut sedang digunakan sebagai sampel.
Penting
Application Insights tidak mengambil sampel sesi, metrik (termasuk metrik kustom), atau jenis telemetri penghitung kinerja dalam salah satu teknik pengambilan sampel. Jenis-jenis ini selalu dikecualikan dari pengambilan sampel karena pengurangan presisi bisa saja sangat tidak diinginkan untuk jenis telemetri ini.
Akurasi kueri log dan tingkat sampel yang tinggi
Saat aplikasi ditingkatkan skalanya, aplikasi dapat memproses puluhan, ratusan, atau ribuan item kerja per detik. Mencatat peristiwa untuk masing-masing peristiwa bukan sumber daya atau hemat biaya. Application Insights menggunakan pengambilan sampel untuk beradaptasi dengan pertumbuhan volume telemetri secara fleksibel dan untuk mengontrol penggunaan sumber daya dan biaya.
Peringatan
Integritas tampilan end-to-end operasi terdistribusi dapat terpengaruh jika ada aplikasi dalam operasi terdistribusi yang telah mengaktifkan pengambilan sampel. Keputusan pengambilan sampel yang berbeda dibuat oleh setiap aplikasi dalam operasi terdistribusi, sehingga telemetri untuk satu ID Operasi dapat disimpan oleh satu aplikasi sementara aplikasi lain dapat memutuskan untuk tidak mengambil sampel telemetri untuk ID Operasi yang sama.
Saat tingkat pengambilan sampel meningkat, akurasi kueri berbasis log menurun dan meningkat. Ini hanya berdampak pada akurasi kueri berbasis log ketika pengambilan sampel diaktifkan dan tingkat sampel berada dalam rentang yang lebih tinggi (~ 60%). Dampaknya bervariasi berdasarkan jenis telemetri, jumlah telemetri per operasi, dan faktor lainnya.
SDK menggunakan metrik yang telah ditentukan sebelumnya untuk menyelesaikan masalah yang disebabkan oleh pengambilan sampel. Untuk informasi selengkapnya tentang metrik ini, lihat Azure Application Insights - Azure Monitor | Microsoft Docs. SDK mengidentifikasi properti yang relevan dari data yang dicatat dan mengekstrak statistik sebelum pengambilan sampel. Untuk meminimalkan penggunaan dan biaya sumber daya, metrik dikumpulkan. Proses ini menghasilkan beberapa item telemetri metrik per menit, bukan ribuan item telemetri peristiwa. Misalnya, metrik ini mungkin melaporkan "aplikasi web ini memproses 25 permintaan" ke akun MDM, dengan itemCount
100 dalam rekaman telemetri permintaan terkirim. Metrik preaggregasi ini memberikan angka yang akurat dan dapat diandalkan bahkan ketika pengambilan sampel berdampak pada hasil kueri berbasis log. Anda dapat melihatnya di panel Metrik portal Application Insights.
Tanya jawab umum
Apakah pengambilan sampel memengaruhi akurasi pemberitahuan?
- Ya. Pemberitahuan hanya dapat terpicu pada data sampel. Pemfilteran agresif dapat mengakibatkan pemberitahuan tidak diaktifkan seperti yang diharapkan.
Catatan
Pengambilan sampel tidak diterapkan ke Metrik, tetapi Metrik dapat berasal dari data sampel. Dengan cara ini pengambilan sampel dapat secara tidak langsung memengaruhi akurasi pemberitahuan.
Apa perilaku pengambilan sampel default yang ada dalam SDK ASP.NET dan ASP.NET Core?
- Jika Anda menggunakan salah satu versi terbaru SDK di atas, Pengambilan Sampel Adaptif diaktifkan secara default dengan lima item telemetri per detik.
Secara default, sistem menambahkan dua
AdaptiveSamplingTelemetryProcessor
simpul: satu menyertakanEvent
jenis dalam pengambilan sampel, sementara yang lain mengecualikannya. Konfigurasi ini membatasi telemetri ke limaEvent
item jenis dan lima item dari semua jenis lainnya yang digabungkan, memastikanEvents
diambil sampelnya secara terpisah dari jenis telemetri lainnya.
Gunakan contoh di bagian sebelumnya pada halaman ini untuk mengubah perilaku default ini.
Bisakah telemetri diambil sampel lebih dari sekali?
- Tidak. SamplingTelemetryProcessors mengabaikan item dari pertimbangan pengambilan sampel jika item ini sudah diambil sampelnya. Hal yang sama berlaku untuk pengambilan sampel penyerapan juga, yang tidak menerapkan pengambilan sampel ke item yang sudah diambil sampelnya di SDK itu sendiri.
Mengapa tidak mengambil sampel "mengumpulkan X persen dari setiap jenis telemetri" sederhana?
- Meskipun pendekatan pengambilan sampel ini akan memberikan tingkat presisi yang tinggi dalam perkiraan metrik, ini akan menghentikan kemampuan menghubungkan data diagnostik setiap pengguna, sesi, dan permintaan, yang sangat penting untuk diagnostik. Oleh karena itu, pengambilan sampel berfungsi lebih baik dengan kebijakan seperti "kumpulkan semua item telemetri untuk X persen pengguna aplikasi," atau "kumpulkan semua telemetri untuk X persen permintaan aplikasi." Untuk item telemetri yang tidak terkait dengan permintaan (seperti pemrosesan asinkron latar belakang), fallback adalah untuk "mengumpulkan X persen dari semua item untuk setiap jenis telemetri."
Apakah persentase pengambilan sampel bisa berubah dari waktu ke waktu?
- Ya, pengambilan sampel adaptif mengubah persentase pengambilan sampel secara bertahap, berdasarkan volume telemetri yang saat ini diamati.
Jika saya menggunakan pengambilan sampel laju tetap, bagaimana cara mengetahui persentase pengambilan sampel mana yang paling sesuai untuk aplikasi saya?
Salah satu caranya adalah dengan mulai melakukan pengambilan sampel adaptif, mencari tahu laju apa yang diselesaikannya (lihat pertanyaan di atas), lalu beralih ke pengambilan sampel laju tetap menggunakan laju itu.
Jika tidak, Anda harus menebak. Analisis penggunaan telemetri Anda saat ini di Application Insights, amati setiap pembatasan yang terjadi, dan perkirakan volume telemetri yang dikumpulkan. Ketiga input ini, bersama dengan tingkat harga yang Anda pilih, menyarankan seberapa banyak Anda mungkin ingin mengurangi volume telemetri yang dikumpulkan. Akan tetapi, peningkatan jumlah pengguna Anda atau beberapa pergeseran lain dalam volume telemetri mungkin membuat perkiraan Anda tidak valid.
Apa yang terjadi jika saya mengonfigurasi persentase pengambilan sampel menjadi terlalu rendah?
- Persentase pengambilan sampel yang terlalu rendah menyebabkan pengambilan sampel yang terlalu agresif, dan mengurangi akurasi perkiraan saat Application Insights berusaha mengimbangi visualisasi data untuk pengurangan volume data. Juga pengalaman diagnostik Anda mungkin terpengaruh secara negatif, karena beberapa permintaan yang jarang gagal atau lambat dapat diambil sampelnya.
Apa yang terjadi jika saya mengonfigurasi persentase pengambilan sampel menjadi terlalu tinggi?
- Mengonfigurasi persentase pengambilan sampel yang terlalu tinggi (tidak cukup agresif) mengakibatkan pengurangan yang tidak mencukupi pada volume telemetri yang dikumpulkan. Anda masih dapat mengalami kehilangan data telemetri yang terkait dengan pembatasan, dan biaya penggunaan Application Insights mungkin lebih tinggi dari yang Anda rencanakan karena biaya kelebihan pemakaian.
Apa yang terjadi jika saya mengonfigurasi pengaturan IncludedTypes dan ExcludedTypes?
- Sebaiknya jangan mengatur dan
ExcludedTypes
IncludedTypes
dalam konfigurasi Anda untuk mencegah konflik apa pun dan memastikan pengaturan pengumpulan telemetri yang jelas. - Jenis telemetri yang tercantum di
ExcludedTypes
dikecualikan meskipun juga diatur dalamIncludedTypes
pengaturan. ExcludedTypes akan lebih diutamakan daripada IncludedTypes.
Di platform apa saya dapat menggunakan pengambilan sampel?
- Pengambilan sampel penyerapan dapat terjadi secara otomatis untuk telemetri apa pun di atas volume tertentu, jika SDK tidak melakukan pengambilan sampel. Konfigurasi ini akan berfungsi, misalnya, jika Anda menggunakan versi SDK ASP.NET atau Java SDK yang lebih lama.
- Jika Anda menggunakan ASP.NET saat ini atau ASP.NET Core SDK (dihosting baik di Azure atau di server Anda sendiri), Anda mendapatkan pengambilan sampel adaptif secara default, tetapi Anda dapat beralih ke tarif tetap seperti yang dijelaskan sebelumnya. Dengan pengambilan sampel laju tetap, SDK browser secara otomatis disinkronkan ke sampel peristiwa terkait.
- Jika Anda menggunakan agen Java saat ini, Anda dapat mengonfigurasi
applicationinsights.json
(untuk Java SDK, konfigurasiApplicationInsights.xml
) guna mengaktifkan pengambilan sampel laju tetap. Pengambilan sampel dinonaktifkan secara default. Dengan pengambilan sampel laju tetap, SDK browser akan disinkronkan otomatis ke sampel peristiwa terkait.
Ada peristiwa langka tertentu yang selalu ingin saya lihat. Bagaimana saya bisa melewati modul pengambilan sampel?
Cara terbaik untuk selalu melihat peristiwa tertentu adalah dengan menulis TelemetryInitializer kustom, yang mengatur
SamplingPercentage
ke 100 pada item telemetri yang ingin Anda pertahankan, seperti yang ditunjukkan dalam contoh berikut. Inisialisasi dijamin berjalan sebelum prosesor telemetri (termasuk pengambilan sampel), sehingga memastikan bahwa semua teknik pengambilan sampel mengabaikan item ini dari pertimbangan pengambilan sampel apa pun. Inisialisasi telemetri kustom tersedia dalam SDK ASP.NET, SDK ASP.NET Core, SDK JavaScript, dan SDK Java. Misalnya, Anda dapat mengonfigurasi inisialisasi telemetri menggunakan SDK ASP.NET:public class MyTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { if(somecondition) { ((ISupportSampling)telemetry).SamplingPercentage = 100; } } }
Versi SDK yang lebih lama
Pengambilan sampel adaptif tersedia untuk Application Insights SDK untuk ASP.NET v2.0.0-beta3 dan yang lebih baru, SDK Microsoft.ApplicationInsights.AspNetCore v2.2.0-beta1 dan yang lebih baru, dan diaktifkan secara default.
Pengambilan sampel laju tetap adalah fitur SDK dalam versi ASP.NET dari 2.0.0 dan SDK Java versi 2.0.1 dan seterusnya.
Sebelum v2.5.0-beta2 dari ASP.NET SDK dan v2.2.0-beta3 dari ASP.NET Core SDK, keputusan pengambilan sampel untuk aplikasi yang menentukan "pengguna" (seperti sebagian besar aplikasi web) bergantung pada hash ID pengguna. Untuk aplikasi yang tidak menentukan pengguna (seperti layanan web), aplikasi berdasarkan keputusan pada ID operasi permintaan. Versi terbaru dari SDK ASP.NET dan ASP.NET Core sekarang menggunakan ID operasi untuk keputusan pengambilan sampel.
Langkah berikutnya
- Pemfilteran dapat memberikan kontrol yang lebih ketat atas hal yang dikirim SDK Anda.
- Baca artikel Jaringan Pengembang Mengoptimalkan Telemetri dengan Application Insights.