Common Query Patterns in PromQL
For day to day use, there’s only a handful of PromQL patterns you need to know for aggregation.
For gauges you'll usually sum(), avg(), min() or max() them:
sum without (instance)(my_gauge)
For counters, you'll take a rate() and then sum():
sum without (instance)(rate(my_counter_total[5m]))
A summary contains _sum and _count counters, from which we can calculate the average event size. This is often the average latency:
sum without (instance)(rate(my_summary_latency_seconds_sum[5m]))
/
sum without (instance)(rate(my_summary_latency_seconds_count[5m]))This query pattern works in other situations too, such as a failure ratio:
sum without (instance)(rate(my_events_failed_total[5m]))
/
sum without (instance)(rate(my_events_total[5m]))A histogram contains buckets, from which we can calculate say the 90th percentile latency:
histogram_quantile(
0.9,
sum without (instance)(rate(my_histogram_latency_seconds_bucket[5m])))
We take the rate of the bucket counters, aggregate up and then calculate the quantile.
A histogram also contains a _sum and _count, so the summary query from above will work here too.