FYI, we have work in progress to start supporting the OpenMetrics "created
timestamp" feature. This will allow Prometheus to know when a counter
started at 0 so it can do appropriate rate/increase calculations for newly
created series.

On Tue, Jul 4, 2023 at 6:19 PM Brian Candler <[email protected]> wrote:

> It's working as designed.
>
> Firstly, note that increase() is actually the same as rate() multiplied by
> the time window size.  It can give you non-integer results.  For example,
> consider that rate(foo[5m]) takes the rate between the first and last data
> points within that window; if you are scraping at 1 minute intervals then
> you will have first and last points which are 4 minutes apart, so it
> calculates a per-second rate over that 4 minute period. If you use
> increase() instead of rate() then this rate is multiplied by 300 to
> estimate the amount it would have increased over 5 minutes.
>
> To get an exact difference between the value now and the value 5 minutes
> ago, then you can use "foo - foo offset 5m".  But if the counter ever
> resets, then you will get nonsense values (huge negative spikes).  rate()
> and increase() skip over those counter drops and calculate a rate using the
> remaining data points.
>
> Also, "foo - foo offset 5m" will give you no results if the time series
> did not exist 5 minutes ago (or it had existed, but there's a gap of more
> than 5 minutes to the previous data point: this is the default "lookback
> delta" window)
>
> You could do something like this:
>
>     (foo - foo offset 5m) or foo
>
> which will give you the current value of foo if there's no previous value
> to take a difference against. This takes care of the case where the counter
> doesn't have an initial zero value.  But again: it will give you nonsense
> results if there's ever a gap in the timeseries, or if the counter resets.
>
> You can guard against negative spikes with a filter:
>
>     ((foo - foo offset 5m) > 0) or foo
>
> This might be good enough for what you need. It will still give you
> nonsense values if there are *gaps* in the timeseries, e.g. due to scrape
> failures.  But more seriously, it will fail if the counter didn't start at
> zero.
>
> In general, you can't assume that counters start at zero. The counter may
> have been running and incrementing for a long time, before Prometheus
> starts scraping it; the first value you see could represent days or years
> of accumulation.  That's why rate() and increase() only give a value if
> there are two or more adjacent data points. It's the only way to be sure
> that the value has actually increased over that time period.  And if you
> don't generate an initial timeseries value of zero, then it can only use
> the next two values to calculate a rate between those two values.
>
> On Tuesday, 4 July 2023 at 16:39:21 UTC+1 Johan Jourdan wrote:
>
>> Hello,
>>
>> I have different prometheus counter per Objects.
>> I want to create a Stacked Bar Chart over the time, an “Acitvity per Day
>> Panel”.
>> A counter is incremented each time an object is used on the back end side.
>>
>> My data looks like :
>> object_usage_count_total{object="tc1"} 2.0 object_usage_count_total{
>> object="tc5"} 3.0
>>
>> I'm using the following query :
>>
>> increase(object_usage_count_total[5m])
>> (I’m using 5m for test purpose even if my goal is 1d)
>>
>> I have the following result for the moment :
>> [image: image]
>>
>> Which is pretty nice, it looks like what I want, except that the first
>> usage of an object is never shown.
>> For this example I used 3 time TC5 and 2 time TC1. And as we can see
>> there’s a total of 2 activity for TC5 and 1 activity for TC1.
>>
>> [image: image]
>> I thought of initializing the counter to 0 before, but the problem is
>> that a new object can be created at any moment, and when it’s created, it
>> is automatically used once. The state “used 0 time” doesn’t really exist.
>>
>> I have 2 questions:
>>
>> Is it considered as a bug or is the behavior of “increase” like this on
>> purpose ?
>>
>> Do you have a solution that might work in my case ?
>>
>> Thanks
>>
>>
>>
>>
>> --
> 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/f13f9992-f3d8-47d6-9562-a8de595fc0b3n%40googlegroups.com
> <https://groups.google.com/d/msgid/prometheus-users/f13f9992-f3d8-47d6-9562-a8de595fc0b3n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CABbyFmpDr60ncZ-yQGoTG3Y1EWMZ8yiU4iX%3D%3DyoxoOEaQhgjvQ%40mail.gmail.com.

Reply via email to