[rrd-users] Graph NaN Values

Simon Hobson linux at thehobsons.co.uk
Mon Nov 23 17:13:14 CET 2015

"Manzke, Udo" <Udo.Manzke at gkvi.de> wrote:

> Result is an Error: “RPN Stack Underflow”. Do anyone know what’s wrong?

DEF:rtMills=/icmp.rrd:icmp:AVERAGE \
CDEF:rt=rtMills,1000,/ \
CDEF:unknownpos=rt,UN,INF,UNKN,IF,/ \

OK, lets break that down.

rt -> puts rt on the stack

UN -> take rt off the stack and leaves true or false depending on whether it's unknown or not

INF, UNKN -> puts INF and UNKN values on the stack. Stack now holds [true|false],INF,UNKN

IF -> takes 3 items off the stack, sees the true or false left by the UN operator, and selects either INF or UNKN which it puts on the stack. Stack now holds [INF|UNKN] - if rt was unknown then the stack holds INF, else it holds UNKN. I assume you actually wanted rt here so your line needs to have "INF,rt,IF"

/ -> takes two items off the stack. Oh dear, there was only one item there -> stack underflow. So either remove the "/" or add something to divide by. Perhaps you intended to combine the two lines, in which case you'd have had "rtMills,UN,INF,rtMills,IF,1000,/" or "rtMills,UN,INF,rtMills,1000,/,IF" - the two are equivalent as long as INF divided by 1000 is still INF (which I'd expect it to be).

I don't think INF is likely to be what you want, (according to the docs) it draws a line along the top of the graph which (depending on the data) may or may not be readily distinguishable from steady data - it wouldn't be how I'd want to draw it anyway. Personally I'd just accept the gaps in the graph which (IMO) is more meaningful - for ping, no response is indistinguishable from "response outside the timeout window".

More information about the rrd-users mailing list