In which dimension are you trying to do the "max" - the maximum across 
timeseries, or the maximum over time?

http_requests_total could be several timeseries each with their own 
labels.  Think of it in two dimensions:

http_requests_total{instance="A"}  a1 a2 a3 a4 a5
http_requests_total{instance="B"}  b1 b2 b3 b4 b5 
http_requests_total{instance="C"}  c1 c2 c3 c4 c5
                                   ---------------> time

If you want the maximum over time, see 
https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time

    max_over_time(http_requests_total[5m])

This will return the same set of timeseries as you had before, but for each 
one giving the maximum over the 5 minute window.

http_requests_total{instance="A"}  max(a1,a2,a3,a4,a5)
http_requests_total{instance="B"}  max(b1,b2,b3,b4,b5) 
http_requests_total{instance="C"}  max(c1,c2,c3,c4,c5)

Aside: this is probably *not* what you want to do with a counter - you 
might want to use rate() on it first.  But it makes sense with a gauge.

In the other dimension:

    max(http_requests_total)

gives you a single value which is the maximum across all the available 
timeseries: see 
https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators

As an instant query, you'll get just the most recent time:

http_requests_total   max(a5,b5,c5)

but if you graph this, the instant time will be swept over the graph 
window, so you'll see the max across timeseries at each point in time.  
Again, this probably doesn't make sense with counters as they have 
arbitrary offsets, but maximum across gauges makes sense (e.g. show me the 
maximum temperature).

If you want to do aggregation over time on this expression, you can turn it 
back into a range vector using a subquery 
<https://prometheus.io/docs/prometheus/latest/querying/basics/#subquery>: 
e.g.

(max(http_requests_total))[5m:1m]

That calculates the max(http_requests_total) at the current time and at 1 
minute intervals over the previous 5 minutes.  You then have a range vector 
that you can aggregate over time.

This is more useful with expressions like:

max_over_time (rate(http_requests_total[5m])[60m:1m])

i.e. calculate the 5-minute average rate at 1 minute intervals, and give me 
the maximum rate seen over the last 60 minutes.

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to prometheus-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/28053f6d-f57e-4048-95d8-603d48323a86%40googlegroups.com.

Reply via email to