> I have seen a bunch of examples for predicting when a disk will fill, but these all seem to rely on the assumption that a gauge is trending downwards, and we are predicting when it meets zero.
Here is a better recipe as a starting point, using predict_linear(): https://groups.google.com/g/prometheus-users/c/PCT4MJjFFgI/m/kVfOW069BQAJ > How can we write an expression that will tell us the time in seconds until progress_current meets *progress_goal*? In principle, I think you should just be able to replace the metric in that expression with (progress_goal - progress_current) and see when that hits zero. Something like this: expr: | (*(progress_goal - progress_current) > 0)* / (*(progress_goal - progress_current)* - ((*progress_goal -* predict_linear(*progress_current*{fstype!~"fuse.*|nfs.*"}[12h], 604800)) < 0)) * 604800 (That's syntactically valid, but otherwise untested. Obviously you should remove or change the label selectors on progress_current to suit the metric in question). I see +progress_goal and -progress_goal in the denominator so it should be possible to simplify it further, I think to this: expr: | (*(progress_goal - progress_current) > 0)* / (( predict_linear(*progress_current*{fstype!~"fuse.*|nfs.*"}[12h], 604800) *- progress_current*) > *progress_goal*) * 604800 The value of this expression is intended to return *the time until the goal is reached*, using linear interpolation over the past 12 hours, to predict where it will be in 7 days. If the goal isn't expected to be reached in 7 days then it will return no value. I can attempt to justify that expression graphically: | C2 ^ | / | | / | G +.^......x.....|.... | | / D | N / | | | / | | v C1 v | +---0d------7d----> time G is the progress_goal, which I'm assuming is constant C1 is the value of progress_current now (time = 0d), which is less than G C2 is the future predicted value of progress_current (at time = 7d), which is greater than G N (numerator) is G - C1 D (denominator) is C2 - C1 And geometrically, I think the ratio of the crossover time (0d...x) to the full time (0d...7d) is the same as the ratio of N to D. Hence (N/D)*7d gives the time to crossover. Give it a go. Note that if progress_goal is a metric, rather than a constant, then it will need to have exactly the same label set as progress_current; or you will need to add some on(...) or ignoring(...) clauses as appropriate. -- 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/1aa53b61-d37a-4ac3-85c5-10636bbb75acn%40googlegroups.com.

