[rrd-users] Creating a XmR control chart.

John P. Rouillard rouilj at cs.umb.edu
Tue Jan 20 22:06:37 CET 2009

Hi folks:

I am trying to get rrdtool to produce an XmR control chart.
For example:


The data is throughput data measured in Kbits/sec that is gathered
once per hour. So given:


I need to calculate:

 the mean of the bw data (bw1+...+bwN)/N

 the mean of the absolute values of the pairwise differences:
       (|bw1-bw2|, |bw2-bw3|...,|bwN-1 - bwN|)/(N-1)

I was trying to use:

  rrdtool create test.rrd  --step 3600 \
   DS:bandwidth:GAUGE:7200:0:U \
   DS:mR:COMPUTE:PREV(bandwidth),bandwidth,-,DUP,0,LT,-1,1,IF,* \

to record the bandwidth, and the absolute value of the pairwise
differences in bandwidth. I am using rrdtool 1.2, so I don't have the
ABS function hence the '-1, 1, IF *'.  Then an "rrdtool update
N:bandwidth" would generate all the values so I can graph them using:

   rrdtool DEF=bandwidth=test.rrd:bandwidth:LAST \
           VDEF=centerline=bandwidth,AVERAGE \
           VDEF=mRbar=mR,AVERAGE \
           CDEF=UCL=centerline,2.66,mRbar,*,+ \
           CDEF=LCL=centerline,2.66,mRbar,*,- \
           LINE:UCL:UCL \
           LINE:LCL:LCL \

to get the bandwidth data points graphed between it's control limits.
(For the sticklers, LCL needs to be set to 0 if it is < 0 and that can
be done with a DUP,0,GT,1,0,if,*.)

But this method doesn't work because you can't use PREV() in a compute
DS 8-(.

So I was thinking of using:

  rrdtool create test.rrd  --step 3600 \
     DS:bandwidth:GAUGE:7200:0:U \
     DS:mR:DERIVE:7200:0:U \

and using 'rrdtool update N:bandwidth:bandwidth'. But this gives me
positive and negative values in mR, and I need only positive values.

So does anybody have a recipe for a standard XmR chart using rrdtool?

				-- rouilj
John Rouillard
My employers don't acknowledge my existence much less my opinions.

More information about the rrd-users mailing list