PromQL adalah bahasa query untuk membaca metrik dari Mimir. Episode ini membahas instant vector dan range vector, operator dan agregasi, pola query umum seperti rate dan histogram_quantile, fungsi-fungsi penting, serta best practices untuk performa query.

Semua metrik di Mimir tidak ada artinya tanpa bahasa untuk membacanya. PromQL (Prometheus Query Language) adalah bahasa query yang memungkinkan kalian memilih deret waktu, menghitung rate, mengagregasi lintas label, dan menghitung persentil latency.
Episode ini membangun pemahaman PromQL dari nol: konsep vector, selector label, operator, pola query umum, fungsi-fungsi penting, dan best practices performa. Ini adalah skill yang paling sering kalian pakai di Grafana, dashboard, dan alert rule.
PromQL bekerja dengan dua tipe data utama:
http_requests_total.http_requests_total[5m].Fungsi seperti rate dan increase membutuhkan range vector sebagai input, sedangkan query pada dashboard membutuhkan instant vector sebagai output.
Selector memilih deret berdasarkan nama dan label:
http_requests_total{status="500"}
http_requests_total{status=~"5.."}
http_requests_total{job!="cron"}Operator di PromQL terbagi tiga jenis:
+, -, *, /, %.==, !=, >, <, >=, <=.and, or, unless.sum | avg | max | min | countAgregator seperti sum menggabungkan beberapa deret menjadi satu berdasarkan label.
rate menghitung rata-rata kenaikan counter per detik — output paling umum untuk metrik RED. Sedangkan increase menghitung total kenaikan selama rentang waktu.
rate(http_requests_total[5m])
increase(http_requests_total[5m])Query rate(http_requests_total[5m]) memberi tahu berapa request per detik rata-rata dalam 5 menit terakhir. Ini adalah pola dasar dashboard RED method.
Histogram menyimpan distribusi latency dalam bucket. Untuk menghitung persentil ke-95:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))Fungsi histogram_quantile(0.95, ...) menginterpolasi nilai persentil dari bucket histogram. Konsep ini wajib dipahami karena hampir semua SLO latency di episode 20 memakai persentil.
predict_linear(http_requests_total[1h], 3600): memprediksi nilai 1 jam ke depan untuk capacity planning.irate(http_requests_total[5m]): rate instan yang sensitif terhadap lonjakan.delta(counter[5m]): perubahan nilai gauge.avg_over_time(metric[5m]): rata-rata nilai selama rentang waktu.Subquery memungkinkan query berisi rentang waktu yang dihitung dari hasil query lain, berguna untuk agregasi berlapis. Contoh menghitung rata-rata rate per menit:
avg_over_time(rate(http_requests_total[1m])[15m:1m])Recording rules menyimpan hasil query yang mahal menjadi metrik baru bernama, sehingga dashboard tinggal membaca hasil yang sudah jadi. Aturan ditulis dalam bentuk YAML:
groups:
- name: checkout.rules
rules:
- record: job:http_requests:rate5m
expr: sum(rate(http_requests_total[5m])) by (job)Aturan job:http_requests:rate5m akan menghasilkan metrik turunan yang bisa langsung diquery tanpa menghitung rate setiap kali. Metrik hasil recording rule biasanya mengikuti konvensi level:metric:operation.
Alerting rules adalah aturan yang mengevaluasi kondisi tertentu dan menghasilkan alert — detail lengkap di episode 19. Untuk manipulasi label, PromQL menyediakan fungsi label_replace dan label_join untuk menulis ulang atau menggabungkan label.
for dan kondisi yang stabil agar alert tidak flapping — dibahas detail di episode 19.Tip
Di Grafana, gunakan Query inspector untuk melihat durasi setiap query. Jika satu query memakan waktu lama, pertimbangkan memecahnya atau memindahkan ke recording rule.
Di episode 7 ini kalian menguasai dasar-dasar PromQL: perbedaan instant vector dan range vector, operator dan agregasi, pola umum rate, increase, dan histogram_quantile, fungsi-fungsi lanjutan seperti predict_linear, serta best practices untuk performa query.
Inti yang harus dibawa pulang:
rate adalah pola utama untuk metrik RED.histogram_quantile menghitung persentil dari bucket histogram.Di episode 8 selanjutnya kita akan membahas instrumenting applications untuk metrics — memakai library Prometheus dan OpenTelemetry SDK untuk membuat counter, gauge, dan histogram, pola manual dan auto-instrumentation, serta mengekspos metrik lewat endpoint metrics dan OTLP. Waktunya membuat aplikasi kalian sendiri berbicara.