(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.

Reply via email to