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, , dependencytrace (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.