Kodeloka
  1. Kodeloka
  2. Kelas Prometheus
  3. Materi

Modul 3 · Modul 3 dari 15

Empat Tipe Metrik: Counter, Gauge, Histogram, Summary

Memilih tipe metrik yang tepat, memahami cara kerja histogram, dan menghindari kesalahan yang membuat data tidak bisa dianalisis.

Salah Pilih Tipe = Data Tidak Bisa Diselamatkan

Tipe metrik menentukan operasi PromQL apa yang masuk akal. Memilih Gauge padahal seharusnya Counter berarti Anda kehilangan kemampuan menghitung laju — selamanya, untuk data yang sudah terlanjur tersimpan.

1. Counter — Angka yang Hanya Naik

Untuk menghitung kejadian: jumlah request, jumlah error, jumlah byte terkirim, jumlah pesanan.

counterpromql
http_requests_total{status="200"}  1523 → 1547 → 1571 → 0 → 24
                                                            ↑ restart aplikasi
⚠️ Nilai mentah Counter hampir tidak pernah berguna

Grafik http_requests_total hanya akan menampilkan garis naik terus. Yang bermakna adalah lajunya:

promql
rate(http_requests_total[5m])    # request per detik, rata-rata 5 menit terakhir

Fungsi rate() juga otomatis menangani counter reset saat aplikasi restart — inilah alasan kenapa memakai tipe Counter itu penting.

2. Gauge — Angka yang Bisa Naik dan Turun

Untuk keadaan saat ini: penggunaan memori, jumlah koneksi aktif, suhu, panjang antrean, jumlah pod berjalan.

gaugepromql
node_memory_MemAvailable_bytes  3.2e9 → 2.8e9 → 3.5e9 → 1.1e9

# Operasi yang masuk akal untuk gauge:
avg_over_time(node_memory_MemAvailable_bytes[1h])
max_over_time(node_memory_MemAvailable_bytes[24h])
delta(node_memory_MemAvailable_bytes[1h])       # perubahan dalam 1 jam
predict_linear(node_filesystem_avail_bytes[6h], 4*3600)   # prediksi 4 jam ke depan

3. Histogram — Distribusi Nilai

Untuk mengukur sebaran: durasi request, ukuran payload. Histogram adalah cara Prometheus menjawab "berapa p95 latency?".

Satu histogram menghasilkan tiga jenis time series:

/metricstext
http_request_duration_seconds_bucket{le="0.1"}   1892   ← kumulatif: ≤ 0,1 detik
http_request_duration_seconds_bucket{le="0.5"}   2401   ← kumulatif: ≤ 0,5 detik
http_request_duration_seconds_bucket{le="+Inf"}  2451   ← semua
http_request_duration_seconds_sum                412.83 ← total detik
http_request_duration_seconds_count              2451   ← jumlah observasi
menghitung persentilpromql
# p95 latency dari histogram
histogram_quantile(0.95,
  sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)

# rata-rata latency (sum dibagi count)
rate(http_request_duration_seconds_sum[5m])
  /
rate(http_request_duration_seconds_count[5m])
⛔ Bucket histogram menentukan akurasi — dan tidak bisa diubah surut

Bucket default klien Prometheus (.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10) dirancang untuk API web yang cepat. Bila layanan Anda umumnya membalas dalam 3–8 detik, hampir semua observasi jatuh di bucket 5 dan 10, sehingga histogram_quantile hanya bisa menebak kasar di antara keduanya.

Sesuaikan bucket dengan SLO Anda. Bila SLO adalah p95 < 500 ms, pastikan ada bucket rapat di sekitar 0,5 detik. Data lama tidak bisa dihitung ulang dengan bucket baru.

4. Summary — Persentil Dihitung di Sisi Klien

/metricstext
rpc_duration_seconds{quantile="0.5"}   0.032
rpc_duration_seconds{quantile="0.9"}   0.121
rpc_duration_seconds{quantile="0.99"}  0.483
rpc_duration_seconds_sum               8231.4
rpc_duration_seconds_count             24193
AspekHistogramSummary
Persentil dihitung diServer (saat query)Klien (saat observasi)
Bisa diagregasi antar-instanceYATIDAK
Beban CPU di aplikasiSangat ringanLebih berat
Fleksibilitas persentilBebas, kapan sajaTerkunci saat kompilasi
AkurasiTergantung bucketLebih akurat per instance
⛔ Persentil dari Summary TIDAK BOLEH dijumlahkan atau dirata-rata

Rata-rata dari p95 sepuluh instance bukan p95 keseluruhan sistem. Secara matematis itu tidak bermakna. Bila Anda punya lebih dari satu instance dan butuh persentil global — dan itu hampir selalu terjadi — gunakan Histogram.

💡 Aturan memilih dalam 10 detik
  • Menghitung kejadian yang tidak pernah berkurang → Counter (akhiri dengan _total).
  • Nilai saat ini yang bisa naik-turun → Gauge.
  • Butuh persentil atau distribusi → Histogram.
  • Summary → hanya bila satu instance dan butuh akurasi tinggi. Umumnya, pilih Histogram.