What is PromQL?
PromQL (Prometheus Query Language) is the query language for retrieving and aggregating data in Prometheus.
Data types
Prometheus supports four data types (see Expression language data types):
| Instant vector | A set of time series at a single timestamp |
| Range vector | A set of time series over a time range |
| Scalar | A single numeric value |
| String | A string value |
Label matchers
Prometheus stores time series with labels. By specifying labels you can select specific series.
For example, to select only those with job="prometheus" for metric http_requests_total:
http_requests_total{job="prometheus"}
Available operators:
| = | equals |
| != | not equals |
| =~ | regex match |
| !~ | regex not match |
Metric types
Prometheus metrics come in four types:
| Gauge | Gauge |
| Counter | Counter |
| Histogram | Histogram |
| Summary | Summary |
For differences between Histogram and Summary, see HISTOGRAMS AND SUMMARIES. For latency calculation details, see this post (Japanese).
Aggregation
Use aggregation operators to aggregate vectors, e.g.:
- sum
- min
- max
- avg
Example: total HTTP requests
sum(http_requests_total)
Reference: Aggregation operators
Functions
PromQL provides many functions over time series. Functions accept either an instant vector or a range vector; the docs specify the type.
Examples:
absent(v instant-vector)checks for the absence of elements.absent_over_time(v range-vector)checks absence over a range.exp(v instant-vector)computes the exponential.
See the official docs for more: functions.
rate / irate
rate and irate compute the per‑second increase of counter metrics.
rate(v range-vector)
Average increase rate for slowly changing counters.
irate(v range-vector)
Instantaneous rate for fast‑changing counters. Use this when spikes make rate hard to observe.
Counter reset
Counters may reset on restart. When using rate or irate, resets are handled automatically. When aggregating, build on rate~/~irate to avoid reset artifacts. Example with sum:
sum(rate(http_request_total[5m]))
overtime aggregation functions
Functions of the form <aggregation>_over_time(range-vector) aggregate over time and return an instant vector.
avg_over_time(range-vector) | Average over the range |
min_over_time(range-vector) | Minimum over the range |
max_over_time(range-vector) | Maximum over the range |
sum_over_time(range-vector) | Sum over the range |