Series Selection
Learn about Prometheus time series, vectors, instant vectors, range vectors, ranges, and filters.
Last updated
Learn about Prometheus time series, vectors, instant vectors, range vectors, ranges, and filters.
Last updated
A set of related time series is called a vector.
Instant Vector - a set of time series where every timestamp maps to a single data point at that “instant”.
Imagine evaluating the expression http_requests_total
at a given timestamp. http_requests_total is an instant vector selector that selects the "latest sample" for any time series with the metric name http_requests_total
. More specifically, "latest" means "at most 5 minutes old and not stale", relative to the evaluation timestamp. So this selector will only yield a result for series that have a sample at most 5 minutes before the evaluation timestamp and where the last sample before the evaluation timestamp is not a stale marker (an explicit way of marking a series as terminating at a certain time in the Prometheus TSDB).
Range vector - a set of time series in which every timestamp maps to a “range” of data points recorded some duration into the past.
A range query works exactly like many completely independent instant queries that are evaluated at subsequent time steps over a given range of time. Of course, this is highly optimized under the hood, and Prometheus doesn't actually run many independent instant queries.
For example, http_requests_total[5m]
would return all the data points falling in a 5-minute window at the evaluation timestamp.
Instant vectors can be graphed, but range vectors cannot.
Instant vectors can be compared, and arithmetic operations can be performed on them, but range vectors cannot.
You can change any instant vector selector into a range vector selector by appending a duration specifier [<number><unit>]
. For example, [5m]
for a 5-minute range.
Valid duration units:
ms
- milliseconds
s
- seconds
m
- minutes
h
- hours
d
- days
y
- years
Matcher Types:
=
: Equals
!=
: Not Equals
=~
: Regular Expression Match
!~
: Regular Expression Not Match
The following example would select all the metrics with the name "http_requests_total" that have a job
label matching exactly demo
and a path
label starting with /api
.
Regular expression matches are fully anchored. A match of path=~"/api"
is treated as env=~"^/api$"
. You can test your regex matches here using the Golang flavor.
Did you know that the metric names in Prometheus are actually stored as labels? The __name__
label actually stores the metric name. This can be useful when trying to dynamically match metric names.