X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=doc%2Frrdgraph_rpn.pod;h=de44c0bde1dcd8cfd1c83e8b8cb974e4e4b340e3;hp=aabd7383e43979ae6396d0fc210aa3c879a55563;hb=22424d6b1c6a14c1d919482f991427c7e43853a8;hpb=2ebb9e5e4cd81f7f389600a475a6f3e4f8afc87f diff --git a/doc/rrdgraph_rpn.pod b/doc/rrdgraph_rpn.pod index aabd738..de44c0b 100644 --- a/doc/rrdgraph_rpn.pod +++ b/doc/rrdgraph_rpn.pod @@ -184,6 +184,78 @@ source value is NAN the complete sliding window is affected. The TRENDNAN operation ignores all NAN-values in a sliding window and computes the average of the remaining values. +B + +Create a "sliding window" average/sigma of another data series, that also +shifts the data series by given amounts of of time as well + +Usage - explicit stating shifts: +CDEF:predict=,...,,n,,x,PREDICT +CDEF:sigma=,...,,n,,x,PREDICTSIGMA + +Usage - shifts defined as a base shift and a number of time this is applied +CDEF:predict=,-n,,x,PREDICT +CDEF:sigma=,-n,,x,PREDICTSIGMA + +Example: +CDEF:predict=172800,86400,2,1800,x,PREDICT + +This will create a half-hour (1800 second) sliding window average/sigma of x, that +average is essentially computed as shown here: + + +---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---> + now + shift 1 t0 + <-----------------------> + window + <---------------> + shift 2 + <-----------------------------------------------> + window + <---------------> + shift 1 t1 + <-----------------------> + window + <---------------> + shift 2 + <-----------------------------------------------> + window + <---------------> + + Value at sample (t0) will be the average between (t0-shift1-window) and (t0-shift1) + and between (t0-shift2-window) and (t0-shift2) + Value at sample (t1) will be the average between (t1-shift1-window) and (t1-shift1) + and between (t1-shift2-window) and (t1-shift2) + + +The function is by design NAN-safe. +This also allows for extrapolation into the future (say a few days) +- you may need to define the data series whit the optional start= parameter, so that +the source data series has enough data to provide prediction also at the beginning of a graph... + +Here an example, that will create a 10 day graph that also shows the +prediction 3 days into the future with its uncertainty value (as defined by avg+-4*sigma) +This also shows if the prediction is exceeded at a certain point. + +rrdtool graph image.png --imgformat=PNG \ + --start=-7days --end=+3days --width=1000 --height=200 --alt-autoscale-max \ + DEF:value=value.rrd:value:AVERAGE:start=-14days \ + LINE1:value#ff0000:value \ + CDEF:predict=86400,-7,1800,value,PREDICT \ + CDEF:sigma=86400,-7,1800,value,PREDICTSIGMA \ + CDEF:upper=predict,sigma,3,*,+ \ + CDEF:lower=predict,sigma,3,*,- \ + LINE1:predict#00ff00:prediction \ + LINE1:upper#0000ff:upper\ certainty\ limit \ + LINE1:lower#0000ff:lower\ certainty\ limit \ + CDEF:exceeds=value,UN,0,value,lower,upper,LIMIT,UN,IF \ + TICK:exceeds#aa000080:1 + +Note: Experience has shown that a factor between 3 and 5 to scale sigma is a good +discriminator to detect abnormal behaviour. This obviously depends also on the type +of data and how "noisy" the data series is. + +This prediction can only be used for short term extrapolations - say a few days into the future- =item Special values @@ -285,12 +357,13 @@ the number of seconds. Example: C -=item PERCENT +=item PERCENT, PERCENTNAN This should follow a B or B I. The I is popped, another number is popped which is a certain percentage (0..100). The data set is then sorted and the value returned is chosen such that I percent of the values is lower or equal than the result. +For PERCENTNAN I values are ignored, but for PERCENT I values are considered lower than any finite number for this purpose so if this operator returns an I you have quite a lot of them in your data. Binite numbers are lesser, or more, than the @@ -298,6 +371,7 @@ finite numbers and are always more than the I numbers. (NaN E -INF E finite values E INF) Example: C + C =item LSLSLOPE, LSLINT, LSLCORREL