Penggantian pengambilan sampel - Azure Monitor Application Insights untuk Java
Catatan
Fitur pengalihan pengambilan sampel ada di GA, mulai dari 3.5.0.
Pengambilalihan pengambilan sampel memungkinkan Anda untuk mengambil alih persentase pengambilan sampel default, misalnya:
- Atur persentase pengambilan sampel ke 0 (atau beberapa nilai kecil) untuk pemeriksaan kesehatan yang bising.
- Atur persentase pengambilan sampel ke 0 (atau beberapa nilai kecil) untuk panggilan dependensi yang bising.
- Atur persentase pengambilan sampel ke 100 untuk jenis permintaan penting (misalnya,
/login
) meskipun Anda memiliki pengambilan sampel default yang dikonfigurasi ke sesuatu yang lebih rendah.
Terminologi
Sebelum Anda belajar tentang pengambilalihan pengambilan sampel, Anda harus memahami istilah rentang. Rentang adalah istilah umum untuk:
- Permintaan masuk.
- Dependensi keluar (misalnya, panggilan jarak jauh ke layanan lain).
- Dependensi dalam proses (misalnya, pekerjaan yang sedang dilakukan oleh sub-komponen layanan).
Untuk pengambilalihan pengambilan sampel, komponen rentang ini penting:
- Atribut
Atribut rentang mewakili properti standar dan kustom untuk permintaan atau dependensi yang ditentukan.
Memulai
Untuk memulai, buat file konfigurasi bernama applicationinsights.json. Simpan di direktori yang sama dengan applicationinsights-agent-*.jar. Gunakan templat berikut ini.
{
"connectionString": "...",
"sampling": {
"percentage": 10,
"overrides": [
{
"telemetryType": "request",
"attributes": [
...
],
"percentage": 0
},
{
"telemetryType": "request",
"attributes": [
...
],
"percentage": 100
}
]
}
}
Cara kerjanya
telemetryType
(telemetryKind
dalam Application Insights 3.4.0) harus salah satu dari request
, , dependency
trace
(log), atau exception
.
Saat rentang dimulai, tipe rentang dan atribut yang ada pada waktu tersebut akan digunakan untuk memeriksa apakah ada pengambilalihan pengambilan sampel yang cocok.
Kecocokan dapat berupa strict
atau regexp
. Pencocokan regex dilakukan terhadap seluruh nilai atribut, jadi jika Anda ingin mencocokkan nilai yang berisi abc
di mana pun di dalamnya, maka Anda perlu menggunakan .*abc.*
.
Diambilalihkan pengambilan sampel dapat menentukan beberapa kriteria atribut, dengan semua kriterianya yang harus cocok agar pengambilalihan pengambilan sampel cocok.
Jika salah satu pengambilalihan pengambilan sampel cocok, persentase pengambilan sampelnya akan digunakan untuk menentukan apakah rentang akan diambil sampelnya atau tidak.
Hanya pengambilalihan pengambilan sampel pertama yang cocok yang akan digunakan.
Jika tidak ada pengambilalihan pengambilan sampel yang cocok:
- Jika ini adalah rentang pertama dalam pelacakan, konfigurasi pengambilan sampel tingkat atas akan digunakan.
- Jika bukan rentang pertama dalam pelacakan, maka keputusan pengambilan sampel induk digunakan.
Contoh: Menekan pengumpulan telemetri untuk pemeriksaan kesehatan
Contoh ini menekan pengumpulan telemetri untuk semua permintaan ke /health-checks
.
Contoh ini juga menekan pengumpulan rentang hilir (dependensi) yang biasanya akan dikumpulkan di bawah /health-checks
.
{
"connectionString": "...",
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
{
"key": "url.path",
"value": "/health-check",
"matchType": "strict"
}
],
"percentage": 0
}
]
}
}
Contoh: Menekan pengumpulan telemetri untuk panggilan dependensi yang bising
Contoh ini menekan pengumpulan telemetri untuk semua GET my-noisy-key
panggilan redis.
{
"connectionString": "...",
"sampling": {
"overrides": [
{
"telemetryType": "dependency",
"attributes": [
{
"key": "db.system",
"value": "redis",
"matchType": "strict"
},
{
"key": "db.statement",
"value": "GET my-noisy-key",
"matchType": "strict"
}
],
"percentage": 0
}
]
}
}
Contoh: Kumpulkan 100% telemetri untuk jenis permintaan penting
Contoh ini mengumpulkan 100% telemetri untuk /login
.
Karena rentang hilir (dependensi) menghormati keputusan pengambilan sampel induk (tidak ada penimpaan pengambilan sampel untuk rentang hilir tersebut), mereka juga dikumpulkan untuk semua permintaan '/login'.
{
"connectionString": "...",
"sampling": {
"percentage": 10
},
"sampling": {
"overrides": [
{
"telemetryType": "request",
"attributes": [
{
"key": "url.path",
"value": "/login",
"matchType": "strict"
}
],
"percentage": 100
}
]
}
}
Atribut rentang tersedia untuk pengambilan sampel
Nama atribut rentang didasarkan pada konvensi semantik OpenTelemetry. (HTTP, Olahpesan, Database, RPC)
https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md
Catatan
Untuk melihat kumpulan atribut yang tepat yang diambil oleh Application Insights Java untuk aplikasi Anda, atur tingkat diagnostik mandiri ke debug, dan cari pesan debug yang dimulai dengan teks "rentang ekspor".
Catatan
Hanya atribut yang diatur pada awal rentang yang tersedia untuk pengambilan sampel, sehingga atribut seperti http.response.status_code
atau durasi permintaan yang diambil nanti dapat difilter melalui ekstensi Java OpenTelemetry. Berikut adalah ekstensi sampel yang memfilter rentang berdasarkan durasi permintaan.
Pemecahan Masalah
Jika Anda menggunakan regexp
dan penimpaan pengambilan sampel tidak berfungsi, coba dengan .*
regex. Jika pengambilan sampel sekarang berfungsi, itu berarti Anda memiliki masalah dengan regex pertama dan membaca dokumentasi regex ini.
Jika tidak berfungsi dengan .*
, Anda mungkin memiliki masalah sintaksis di .application-insights.json file
Lihat log Application Insights dan lihat apakah Anda melihat pesan peringatan.