_R_R_D_G_R_A_P_H___E_X_A_M_P_L_E_S(1)                 rrdtool                _R_R_D_G_R_A_P_H___E_X_A_M_P_L_E_S(1)

NNAAMMEE
     rrdgraph_examples - Examples for rrdtool graph

SSYYNNOOPPSSIISS
     rrrrddttooooll ggrraapphh //hhoommee//hhttttppdd//hhttmmll//tteesstt..ppnngg ----iimmggffoorrmmaatt PPNNGG

     followed by any of the examples below

DDEESSCCRRIIPPTTIIOONN
     For  your  convenience some of the commands are explained here by using de‐
     tailed examples. They are not always cut-and-paste ready  because  comments
     are intermixed with the examples.

EEXXAAMMPPLLEESS
   DDaattaa wwiitthh mmuullttiippllee rreessoolluuttiioonnss
         --end now --start end-120000s --width 400
         DEF:ds0a=/home/rrdtool/data/router1.rrd:ds0:AVERAGE
         DEF:ds0b=/home/rrdtool/data/router1.rrd:ds0:AVERAGE:step=1800
         DEF:ds0c=/home/rrdtool/data/router1.rrd:ds0:AVERAGE:step=7200
         LINE1:ds0a#0000FF:"default resolution\l"
         LINE1:ds0b#00CCFF:"resolution 1800 seconds per interval\l"
         LINE1:ds0c#FF00FF:"resolution 7200 seconds per interval\l"

   NNiicceellyy ffoorrmmaatttteedd lleeggeenndd sseeccttiioonn
         DEF:ds0=/home/rrdtool/data/router1.rrd:ds0:AVERAGE
         DEF:ds1=/home/rrdtool/data/router1.rrd:ds1:AVERAGE
         VDEF:ds0max=ds0,MAXIMUM
         VDEF:ds0avg=ds0,AVERAGE
         VDEF:ds0min=ds0,MINIMUM
         VDEF:ds0pct=ds0,95,PERCENT
         VDEF:ds1max=ds1,MAXIMUM
         VDEF:ds1avg=ds1,AVERAGE
         VDEF:ds1min=ds1,MINIMUM
         VDEF:ds1pct=ds1,95,PERCENT

     Note: consolidation occurs here.

         CDEF:ds0bits=ds0,8,*
         CDEF:ds1bits=ds1,8,*

     Note: 10 spaces to move text to the right

         COMMENT:"          "

     Note: the column titles have to be as wide as the columns

         COMMENT:"Maximum    "
         COMMENT:"Average    "
         COMMENT:"Minimum    "

         COMMENT:"95th percentile\l"
         AREA:ds0bits#00C000:"Inbound "
         GPRINT:ds0max:"%6.2lf %Sbps"
         GPRINT:ds0avg:"%6.2lf %Sbps"
         GPRINT:ds0min:"%6.2lf %Sbps"
         GPRINT:ds0pct:"%6.2lf %Sbps\l"
         LINE1:ds1bits#0000FF:"Outbound"
         GPRINT:ds1max:"%6.2lf %Sbps"
         GPRINT:ds1avg:"%6.2lf %Sbps"
         GPRINT:ds1min:"%6.2lf %Sbps"
         GPRINT:ds1pct:"%6.2lf %Sbps\l"

   OOffffsseettttiinngg aa lliinnee oonn tthhee yy--aaxxiiss
     Depending on your needs you can do this in two ways:

     •   Offset the data, then graph this

             DEF:mydata=my.rrd:ds:AVERAGE

         Note: this will also influence any other command that uses "data"

             CDEF:data=mydata,100,+
             LINE1:data#FF0000:"Data with offset"

     •   Graph the original data, with an offset

             DEF:mydata=my.rrd:ds:AVERAGE

         Note: no color in the first line so it is not visible

             LINE1:100

         Note: the second line gets stacked on top of the first one

             LINE1:mydata#FF0000:"Data with offset":STACK

   DDrraawwiinngg ddaasshheedd lliinneess
     Also works for HRULE and VRULE

     •   default style: -- -- -- -- --

             LINE1:data#FF0000:"dashed line":dashes

     •   more fancy style with offset: -- --  ------ --  ------ --

             LINE1:data#FF0000:"another dashed line":dashes=15,5,5,10:dash-offset=10

   TTiimmee rraannggeess
         Last four weeks: --start end-4w --end 00:00
         January 2001:    --start 20010101 --end start+31d
         January 2001:    --start 20010101 --end 20010201
         Last hour:       --start end-1h
         Last 24 hours:   <nothing at all>
         Yesterday:       --end 00:00

   VViieewwiinngg tthhee ccuurrrreenntt aanndd pprreevviioouuss wweeeekk ttooggeetthheerr
         --end now --start end-1w
         DEF:thisweek=router.rrd:ds0:AVERAGE
         DEF:lastweek=router.rrd:ds0:AVERAGE:end=now-1w:start=end-1w

     Shift the data forward by one week (604800 seconds)

         SHIFT:lastweek:604800
         [ more of the usual VDEF and CDEF stuff if you like ]
         AREA:lastweek#0000FF:Last\ week
         LINE1:thisweek#FF0000:This\ week

   AAbbeerrrraanntt BBeehhaavviioouurr DDeetteeccttiioonn
     If  the  specialized  function  RRRRAAss exist for aberrant behavior detection,
     they can be used to generate the graph of a  time  series  with  confidence
     bands and failures.

        rrdtool graph example.png \
               DEF:obs=monitor.rrd:ifOutOctets:AVERAGE \
               DEF:pred=monitor.rrd:ifOutOctets:HWPREDICT \
               DEF:dev=monitor.rrd:ifOutOctets:DEVPREDICT \
               DEF:fail=monitor.rrd:ifOutOctets:FAILURES \
               TICK:fail#ffffa0:1.0:"Failures\: Average bits out" \
               CDEF:scaledobs=obs,8,* \
               CDEF:upper=pred,dev,2,*,+ \
               CDEF:lower=pred,dev,2,*,- \
               CDEF:scaledupper=upper,8,* \
               CDEF:scaledlower=lower,8,* \
               LINE2:scaledobs#0000ff:"Average bits out" \
               LINE1:scaledupper#ff0000:"Upper Confidence Bound: Average bits out" \
               LINE1:scaledlower#ff0000:"Lower Confidence Bound: Average bits out"

     This  example  generates a graph of the data series in blue (LINE2 with the
     scaledobs virtual data source), confidence bounds in red  (scaledupper  and
     scaledlower  virtual  data sources), and potential failures (i.e. potential
     aberrant behavior) marked by vertical yellow lines (the fail data source).

     The raw data comes from an AVERAGE RRRRAA, the finest resolution  of  the  ob‐
     served  time  series  (one consolidated data point per primary data point).
     The predicted (or smoothed) values are stored in  the  HWPREDICT  RRRRAA.  The
     predicted  deviations  (think  standard deviation) values are stored in the
     DEVPREDICT RRRRAA. Finally, the FAILURES RRRRAA contains indicators, with  1  de‐
     noting a potential failure.

     All  of  the data is rescaled to bits (instead of Octets) by multiplying by
     8.  The confidence bounds are computed by an offset of  2  deviations  both
     above  and below the predicted values (the CDEFs upper and lower). Vertical
     lines indicated potential failures are graphed via the TICK graph  element,
     which  converts  non-zero  values  in  an  RRRRAA  into  tick  marks.  Here an
     axis-fraction argument of 1.0 means the tick marks span the entire  y-axis,
     and hence become vertical lines on the graph.

     The  choice of 2 deviations (a scaling factor) matches the default used in‐
     ternally by the FAILURES RRRRAA. If the internal value is  changed  (see  rrd‐
     tune), this graphing command should be changed to be consistent.

     _A _n_o_t_e _o_n _d_a_t_a _r_e_d_u_c_t_i_o_n_:

     The  rrrrddttooooll _g_r_a_p_h command is designed to plot data at a specified temporal
     resolution, regardless of the actually resolution of the data  in  the  RRD
     file.   This  can present a problem for the specialized consolidation func‐
     tions which maintain a one-to-one mapping between primary data  points  and
     consolidated  data  points.  If  a graph insists on viewing the contents of
     these RRRRAAss on a coarser temporal scale, the _g_r_a_p_h command tries to do some‐
     thing intelligent, but the confidence bands and failures no longer have the
     same meaning and may be misleading.

SSEEEE AALLSSOO
     rrdgraph gives an overview of how rrrrddttooooll ggrraapphh works.   rrdgraph_data  de‐
     scribes  DDEEFF,CCDDEEFF  and VVDDEEFF in detail.  rrdgraph_rpn describes the RRPPNN lan‐
     guage used in the xxDDEEFF statements.  rrdgraph_graph page describes  all  the
     graph and print functions.

AAUUTTHHOORR
     Program by Tobias Oetiker <tobi@oetiker.ch>

     This  manual  page  by  Alex van den Bogaerdt <alex@vandenbogaerdt.nl> with
     corrections and/or additions by several people

1.10.0                             2026-05-23               _R_R_D_G_R_A_P_H___E_X_A_M_P_L_E_S(1)
