Rounding timestamps of subqueries

10 views
Skip to first unread message

Brian Candler

unread,
Nov 2, 2025, 12:05:04 PM (8 days ago) Nov 2
to Prometheus Users
Something that's not clear from the documentation of subquery is how the time is handled.

For example, take foo[5d:1d]. Are the queries done at
- now
- now - 1 day
- now - 2 day ... etc

Or are the query times quantized to utime 1d multiples, e.g.
- midnight just gone
- midnight yesterday
- midnight the day before ... etc

I've been doing some testing with prometheus-2.53.5. Today is 2nd November.

max_over_time(vector(time())[5d:1d])  # 1762041600 = 2025-11-02 00:00:00 +0000
min_over_time(vector(time())[5d:1d])  # 1761696000 = 2025-10-29 00:00:00 +0000

max_over_time(vector(time())[1d:1d])  # 1762041600
min_over_time(vector(time())[1d:1d])  # 1762041600

The latter seems particularly useful, as it gives a way to say "give me the value of this metric as it was midnight (UTC) just gone", which is something I've been trying to do.

My question: is this behaviour intentional, and can be depended on going forward? (e.g. are their unit tests which guarantee it?)

Alternatively, is there a better way to get the value of a metric at the start of a particular time interval?

The above approach works OK for me in the UK, where UTC 00:00 is either midnight or one hour later. But it won't work for "start of the month", and for "start of the week" it gives you a Thursday.

min_over_time(vector(time())[1w:1w])  # 2025-10-30 00:00:00 +0000

Cheers,

Brian.
Reply all
Reply to author
Forward
0 new messages