(foo==1)[24h:1m]. I tried this query. But I am getting an error message " *bad_data: invalid expression type "range vector" for range query, must be Scalar or instant Vector* ".
foo[24h] == 1. Error message: "* bad_data: 1:1: parse error: binary expression must contain only scalar and instant vector types* " I am scraping at 1-minute intervals. *Brian: I also note that you're only sampling periodically whether something is in state 0, 1, or 2: you don't really know what happened in between those samples, so you're never going to get a truly accurate value for how long it was in each state. For example, it could flip from 1 to 2 and back to 1 between scrapes.* *Me: It's fine. *Even if it flips from 1 to 2 and back to 1 between scrapes. I only bother about the output samples. For example last 24 hours I will have 1440 samples. I want to find a number of 1's. It's fine even though it flips in between scrapes. On Wednesday, 22 March 2023 at 13:36:23 UTC+5:30 Brian Candler wrote: > It's not easy to do exactly. > > To get a rough answer, you can do a subquery > <https://prometheus.io/docs/prometheus/latest/querying/basics/#subquery>: > (foo == 1)[24h:1m] will resample the timeseries at 1 minute intervals, then > you can wrap that with count_over_time, giving: > count_over_time((foo == 1)[24h:1m]) > > But if you weren't scraping at exactly 1 minute intervals, the count may > not be accurate. Also if there are missed samples, the value of foo at time > T will look back for the previous value (up to 5 minutes by default), which > means in that situation some samples may be double-counted (in effect, > assuming the metric value remained constant over that time, when you don't > actually know what value it had). > > The only way I know to get an exact answer is to send the range vector > query "foo[24h]" to the *instant* query endpoint > <https://prometheus.io/docs/prometheus/latest/querying/api/#instant-queries>, > then filter and count the samples client-side. A range vector like that > gives the raw values with their raw timestamps as stored in the TSDB. > > For this use case it would be nice if Prometheus were to allow certain > operators to work directly on range vectors, so you could write > foo[24h] == 1 > But that would add quite a lot of complexity into the semantics of the > query language, which already has to consider argument combinations for > (scalar, scalar), (scalar, instant vector) and (instant vector, instant > vector). > > On Wednesday, 22 March 2023 at 05:19:01 UTC BHARATH KUMAR wrote: > >> Hello All, >> >> I have a Prometheus metric that will give output as 0 or 1 or 2. It can >> be anything(0 or 1 or 2). Could you tell me the number of 1's that occurred >> in the last 24 hours? >> >> I tried with count_over_time. but I am getting errors. I tried >> sum_over_time, but it is not working for a few test cases. >> >> Any lead? >> >> I really appreciate any help you can provide. >> >> Thanks & regards, >> Bharath Kumar >> > -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/prometheus-users/495d6c45-65ec-4f31-ade7-ff6a6e40fd51n%40googlegroups.com.

