Persentil dan metrik yang bernilai distribusi

Dokumen ini menjelaskan cara memahami persentil dan model histogram untuk data metrik dengan jenis nilai Distribution. Metrik distribusi menentukan rentang nilai, yang disebut bucket, dan mencatat jumlah nilai terukur yang masuk ke setiap bucket. Metrik distribusi tidak melaporkan nilai masing-masing pengukuran, tetapi melaporkan histogram jumlah dalam bucket. Jenis nilai ini digunakan oleh layanan jika setiap pengukuran terlalu banyak untuk dikumpulkan, tetapi informasi statistik, seperti rata-rata atau persentil, tentang pengukuran tersebut bernilai.

Jika memetakan metrik yang bernilai distribusi pada peta panas, Anda dapat menggunakan opsi di toolbar diagram untuk menempatkan persentil ke-50, ke-95, dan ke-99. Untuk menampilkan metrik nilai distribusi pada diagram garis, Anda harus mengonfigurasi diagram untuk mengonversi nilai distribusi menjadi nilai numerik. Anda dapat melakukan konversi ini menggunakan aligner yang memilih persentil.

Bagian berikutnya dari halaman ini menggunakan contoh sintetis untuk menunjukkan cara menentukan persentil. Contoh tersebut menunjukkan bahwa nilai persentil bergantung pada jumlah bucket, lebar bucket, distribusi pengukuran, dan jumlah total sampel. Nilai persentil tidak bergantung pada nilai terukur sebenarnya karena nilai tersebut tidak tersedia dalam histogram.

Contoh dengan data sintetis

Pertimbangkan model bucket Exponential dengan skala 1, faktor pertumbuhan 2, dan 10 bucket terbatas. Histogram ini berisi 12 bucket, 10 bucket terbatas, 1 bucket yang hanya menentukan batas atas, dan 1 yang hanya menentukan batas bawah. Untuk contoh ini, bucket terbatas dengan indeks n+1 dua kali lebih lebar dari bucket terbatas dengan indeks n.

Contoh berikut menunjukkan bahwa lebar bucket menentukan error maksimum antara persentil yang dihitung dan pengukuran. Eksperimen tersebut juga menunjukkan bahwa jumlah sampel dalam histogram penting. Misalnya, jika jumlah sampel kurang dari 20, persentil ke-95 dan ke-99 selalu berada di bucket yang sama.

Kasus 1: Jumlah total sampel adalah 1.

Jika ada satu pengukuran, ketiga nilai persentil tersebut akan berbeda, tetapi keduanya hanya menampilkan persentil ke-50, ke-95, dan ke-99 dari bucket yang sama. Error antara pengukuran dan pengukuran sebenarnya tidak dapat ditentukan karena pengukuran tidak diketahui.

Misalnya, asumsikan histogram pengukuran seperti yang ditunjukkan pada tabel berikut:

Nomor bucket Batas bawah Batas atas Jumlah Rentang persentil
0 1 0 0
1 1 2 0 0
2 2 4 0 0
3 4 8 0 0
4 8 16 0 0
5 16 32 0 0
6 32 64 0 0
7 64 128 0 0
8 128 256 1 0—100
9 256 512 0 0
10 512 1024 0 0
11 1024 0 0

Untuk menghitung persentil ke-50, lakukan hal berikut:

  1. Gunakan jumlah bucket untuk menentukan bucket yang berisi persentil ke-50. Dalam contoh ini, bucket nomor 8 berisi persentil ke-50.
  2. Hitung estimasinya menggunakan aturan berikut:

    pth percentage = bucket_low +
                    (bucket_up - bucket_low)*(p - p_low)/(p_up - p_low)
    

    Dalam ekspresi sebelumnya, p_low dan p_up adalah batas bawah dan atas dari rentang persentil untuk bucket. Demikian pula, bucket_low dan bucket_up adalah batas bawah dan atas bucket. Nilai untuk p_low dan p_up bergantung pada cara pendistribusian jumlah di antara bucket yang berbeda.

Misalnya, persentil ke-50 dihitung sebagai:

   50th percentile = 128 + (256-128)*(50-0)/(100-0)
                   = 128 + 128 * 50 / 100
                   = 128 + 64
                   = 192

Untuk menghitung persentil ke-95, ganti 50 dengan 95 dalam ekspresi sebelumnya. Untuk contoh ini jika hanya ada satu sampel, persentil-nya adalah sebagai berikut:

Persentil Nomor bucket Nilai
Ke-50 8 192
Ke-95 8 249,6
Ke-99 8 254,7

Error antara estimasi dan pengukuran sebenarnya dapat dibatasi, tetapi tidak dapat ditentukan karena pengukurannya tidak diketahui.

Kasus 2: Jumlah total sampel adalah 10.

Jika ada 10 sampel, persentil ke-50 mungkin berada di bucket yang berbeda dari persentil ke-95 dan ke-99. Namun, tidak ada cukup pengukuran untuk memungkinkan persentil ke-95 dan ke-99 berada di bucket yang berbeda.

Misalnya, asumsikan histogram pengukuran seperti yang ditunjukkan pada tabel berikut:

Nomor bucket Batas bawah Batas atas Jumlah Rentang persentil
0 1 4 0 - 40
1 1 2 2 40 - 60
2 2 4 1 60 - 70
3 4 8 1 70 - 80
4 8 16 1 80 - 90
5 16 32 0 0
6 32 64 0 0
7 64 128 0 0
8 128 256 1 90 - 100
9 256 512 0 0
10 512 1024 0 0
11 1024 0 0

Anda dapat menggunakan prosedur yang dijelaskan sebelumnya untuk menghitung persentil ke-50, ke-95, dan ke-99. Misalnya, persentil ke-50, yang ada pada nomor bucket 1, dihitung sebagai berikut:

50th percentile = 1 + (2-1)*(50-40)/(60-40)
                = 1 + (1 * 10 / 20)
                = 1 + 0.5
                = 1.5

Demikian pula, persentil ke-95 dihitung sebagai berikut:

95th percentile = 128 + (256-128)*(95-90)/(100-90)
                = 128 + 128 * 5 / 10
                = 128 + 64
                = 192

Dengan menggunakan proses yang dijelaskan sebelumnya, persentil dapat dihitung. Setiap baris dalam tabel berikut mencantumkan persentil, bucket yang sesuai, dan nilai yang dihitung:

Persentil Nomor bucket Nilai Kesalahan maksimum
Ke-50 1 1,5 0,5
Ke-95 8 192 74
Ke-99 8 243,2 115,2

Dalam contoh ini dan dalam contoh sebelumnya, persentil ke-95 ada di bucket nomor 8; namun, komputasi persentilnya berbeda. Perbedaannya terletak pada cara pendistribusian sampel. Pada contoh pertama, semua sampel berada di bucket yang sama, sedangkan dalam contoh terbaru, sampel berada di bucket yang berbeda.

Contoh dengan data nyata

Bagian ini berisi contoh yang menggambarkan cara menentukan model bucket yang digunakan oleh metrik tertentu. Bagian ini juga menggambarkan cara mengevaluasi potensi error dalam nilai persentil yang dihitung.

Mengidentifikasi model bucket

Guna menentukan bucket yang digunakan untuk metrik selama interval waktu tertentu, panggil metode projects.timeSeries/list Cloud Monitoring API.

Misalnya, guna mengidentifikasi model bucket untuk metrik, lakukan tindakan berikut:

  1. Buka halaman web projects.timeSeries/list.
  2. Di Penjelajah API, masukkan filter yang menentukan metrik, waktu mulai, dan waktu berakhir.

    Misalnya, untuk mendapatkan informasi tentang metrik yang menyimpan latensi permintaan API, masukkan informasi berikut:

    metric.type="serviceruntime.googleapis.com/api/request_latencies"
    resource.type="consumed_api"
    

    Dalam contoh ini, kolom filter menentukan jenis metrik dan jenis resource. Untuk informasi selengkapnya tentang filter ini, lihat Filter pemantauan.

  3. Klik Enter.

Berikut adalah respons list API untuk metrik bernilai distribusi yang tersedia di satu project Google Cloud:

{
  "timeSeries": [
    {
      "metric": {...},
      "resource": {...},
      },
      "metricKind": "DELTA",
      "valueType": "DISTRIBUTION",
      "points": [
        {
          "interval": {
            "startTime": "2020-11-03T15:05:00Z",
            "endTime": "2020-11-03T15:06:00Z"
          },
          "value": {
            "distributionValue": {
              "count": "3",
              "mean": 25.889,
              "bucketOptions": {
                "exponentialBuckets": {
                  "numFiniteBuckets": 66,
                  "growthFactor": 1.4,
                  "scale": 1
                }
              },
              "bucketCounts": [
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "0",
                "3"
              ]
            }
          }
        },

Dalam respons API, kolom value menjelaskan data yang disimpan dalam array points. Kolom count dan mean melaporkan bahwa terdapat 3 pengukuran untuk interval waktu yang ditentukan dan nilai rata-ratanya adalah 25,889. Kolom bucketOptions menunjukkan bahwa model eksponensial dikonfigurasi untuk memiliki 66 bucket, skala 1, dan faktor pertumbuhan 1,4.

Untuk menghitung batas bawah dan atas untuk bucket dengan indeks n, gunakan aturan berikut:

  • Batas bawah (1 ≤ n < N) = skala * (faktor pertumbuhan)(n-1)
  • Batas atas (0 ≤ n < N-1) = skala * (faktor pertumbuhan)n

Pada ekspresi sebelumnya, N adalah jumlah total bucket.

Bucket untuk metrik ini, beserta titik tengah setiap bucket, ditampilkan dalam tabel berikut:

n Batas bawah Batas atas Titik tengah
0 1 Tidak berlaku
1 1 1,40 1,20
2 1,40 1,96 1,68
...
9 14,76 20,66 17,71
10 20,66 28,93 24,79
11 28,93 40,50 34,71
...

Memverifikasi komputasi persentil

Setelah konfigurasi bucket diketahui, untuk setiap kumpulan pengukuran, Anda dapat memprediksi nilai nilai persentil ke-50, ke-95, dan ke-99. Misalnya, jika ada satu sampel dan berada di nomor bucket 10, nilai persentil ke-50 adalah 24,79.

Untuk mengambil nilai persentil ke-50, ke-95, dan ke-99 dari metrik, Anda dapat menggunakan metode API projects.timeSeries/list serta menyertakan periode penyelarasan dan penyelaras. Dalam contoh ini, setelan berikut dipilih:

  • Perata: ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95, atau ALIGN_PERCENTILE_99
  • Periode Perataan: 60 d

Untuk pilihan ALIGN_PERCENTILE_50, setiap nilai dalam deret waktu adalah persentil ke-50 dari bucket:

{
  "timeSeries": [
    {
      "metric": {...},
      "resource": {...},
      "metricKind": "GAUGE",
      "valueType": "DOUBLE",
      "points": [
        {
          "interval": {
            "startTime": "2020-11-03T15:06:36Z",
            "endTime": "2020-11-03T15:06:36Z"
          },
          "value": {
            "doubleValue": 24.793256140799986
          }
        },
        {
          "interval": {
            "startTime": "2020-11-03T15:05:36Z",
            "endTime": "2020-11-03T15:05:36Z"
          },
          "value": {
            "doubleValue": 34.710558597119977
          }
        },
        {
          "interval": {
            "startTime": "2020-11-03T15:04:36Z",
            "endTime": "2020-11-03T15:04:36Z"
          },
          "value": {
            "doubleValue": 24.793256140799986
          }
        }
      ]
    },

Untuk dua sampel, persentil ke-50 ada di bucket 10, untuk sampel lainnya ada di bucket 11.

Tabel berikut menunjukkan hasil menjalankan metode projects.timeSeries/list dengan pelurus yang berbeda. Baris pertama sesuai dengan kasus saat penyelaras tidak ditentukan. Jika Anda tidak menentukan penyelaras, model bucket dan nilai rata-rata akan ditampilkan. Tiga baris berikutnya mencantumkan data yang ditampilkan saat penyelaras ditetapkan ke ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95, dan ALIGN_PERCENTILE_99:

Statistik Contoh @ 15.06 Contoh @ 15.05 Contoh @ 15.04
rata-rata 25,889 33,7435 Tidak tersedia.
Persentil ke-50 24,79 34,71 24,79
Persentil ke-95 28,51 39,91 28,51
Persentil ke-99 28,84 40,37 28,84

Seperti yang diilustrasikan oleh dua contoh dengan data sintetis, nilai persentil bergantung pada cara sampel didistribusikan. Jika semua sampel berada di bucket sampel, persentil ke-50 adalah titik tengah bucket tersebut. Namun, jika sampel berada di bucket yang berbeda, distribusi tersebut akan memengaruhi estimasi.

Untuk menentukan apakah persentil ke-50 adalah perkiraan rata-rata yang wajar, Anda dapat membandingkan nilai rata-rata dengan persentil ke-50. Nilai rata-rata ditampilkan dengan detail bucket.

Langkah selanjutnya

Untuk mendapatkan informasi tentang cara memvisualisasikan metrik bernilai distribusi, lihat Tentang metrik nilai distribusi.