Persentil dan metrik nilai 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 termasuk dalam setiap bucket. Metrik distribusi tidak melaporkan nilai pengukuran individual; metrik ini melaporkan histogram jumlah dalam bucket. Jenis nilai ini digunakan oleh layanan jika pengukuran individual terlalu banyak untuk dikumpulkan, tetapi informasi statistik, seperti rata-rata atau persentil, tentang pengukuran tersebut sangat berharga.

Saat memetakan metrik nilai distribusi pada peta panas, Anda dapat menggunakan opsi di toolbar diagram untuk menempatkan persentil ke-50, ke-95, dan ke-99. Untuk menampilkan metrik bernilai 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 di halaman ini menggunakan contoh sintetis untuk menunjukkan cara persentil ditentukan. Contoh ini menunjukkan bahwa nilai persentil bergantung pada jumlah bucket, lebar bucket, distribusi pengukuran, dan jumlah total sampel. Nilai persentil tidak bergantung pada nilai yang diukur 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 daripada bucket terbatas dengan indeks n.

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

Kasus 1: Jumlah total sampel adalah 1.

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

Misalnya, asumsikan histogram pengukuran seperti yang ditunjukkan dalam 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 estimasi 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 batas atas 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 jumlah didistribusikan di antara berbagai bucket.

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, dengan tepat satu sampel, persentilnya 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 pengukuran yang memadai agar persentil ke-95 dan ke-99 berada di bucket yang berbeda.

Misalnya, asumsikan histogram pengukuran seperti yang ditunjukkan dalam 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 berada di bucket nomor 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 Error maksimum
Ke-50 1 1,5 0,5
Ke-95 8 192 74
Ke-99 8 243,2 115,2

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

Contoh dengan data sebenarnya

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

Mengidentifikasi model bucket

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

Misalnya, untuk mengidentifikasi model bucket untuk metrik, lakukan hal berikut:

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

    Misalnya, untuk mendapatkan informasi tentang metrik yang menyimpan latensi permintaan API, masukkan hal 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 mengetahui 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 untuk interval waktu yang ditentukan, ada 3 pengukuran dan nilai rata-ratanya adalah 25,889. Kolom bucketOptions menunjukkan bahwa model eksponensial dikonfigurasi agar 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

Dalam ekspresi sebelumnya, N adalah jumlah total bucket.

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

Bucket 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 penghitungan persentil

Setelah konfigurasi bucket diketahui, untuk setiap kumpulan pengukuran, Anda dapat memprediksi nilai persentil ke-50, ke-95, dan ke-99. Misalnya, jika ada satu sampel dan berada di bucket nomor 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, dan menyertakan periode penyelarasan dan penyelaras. Dalam contoh ini, setelan berikut dipilih:

  • Aligner: ALIGN_PERCENTILE_50, ALIGN_PERCENTILE_95, atau ALIGN_PERCENTILE_99
  • Periode Penyelarasan: 60 s

Untuk pemilihan ALIGN_PERCENTILE_50, setiap nilai dalam deret waktu adalah persentil ke-50 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 berada di bucket 10, untuk sampel lainnya berada di bucket 11.

Tabel berikut menunjukkan hasil eksekusi metode projects.timeSeries/list dengan penyelaras 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 dalam bucket sampel, persentil ke-50 adalah titik tengah bucket tersebut. Namun, jika sampel berada dalam bucket yang berbeda, distribusi tersebut akan memengaruhi estimasi.

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

Langkah selanjutnya

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