_R_R_D_T_O_O_L(1)                           rrdtool                          _R_R_D_T_O_O_L(1)

NNAAMMEE
     rrdtool - Round Robin Database Tool

SSYYNNOOPPSSIISS
     rrrrddttooooll -- [workdir]| _f_u_n_c_t_i_o_n

DDEESSCCRRIIPPTTIIOONN
   OOVVEERRVVIIEEWW
     It  is  pretty  easy to gather status information from all sorts of things,
     ranging from the temperature in your office to the number of  octets  which
     have  passed  through  the  FDDI interface of your router. But it is not so
     trivial to store this data in an efficient and systematic manner.  This  is
     where  RRRRDDttooooll  comes  in  handy.  It lets you _l_o_g _a_n_d _a_n_a_l_y_z_e the data you
     gather from all kinds of data-sources (DDSS). The data analysis part of  RRD‐
     tool  is based on the ability to quickly generate graphical representations
     of the data values collected over a definable time period.

     In this man page you will find general information on the design and  func‐
     tionality  of  the Round Robin Database Tool (RRDtool). For a more detailed
     description of how to use the individual functions  of  RRRRDDttooooll  check  the
     corresponding man page.

     For  an introduction to the usage of RRDtool make sure you consult the rrd‐
     tutorial.

   FFUUNNCCTTIIOONNSS
     While the man pages talk of command line switches you have to set in  order
     to  make  RRRRDDttooooll work it is important to note that RRRRDDttooooll can be remotely
     controlled through a set of pipes. This  saves  a  considerable  amount  of
     startup  time  when  you  plan  to make RRRRDDttooooll do a lot of things quickly.
     Check the section on "REMOTE CONTROL" further down. There is also a  number
     of  language  bindings  for RRDtool which allow you to use it directly from
     Perl, python, Tcl, PHP, etc.

     ccrreeaattee  Set up a new Round Robin Database (RRD). Check rrdcreate.

     uuppddaattee  Store new data values into an RRD. Check rrdupdate.

     uuppddaatteevv Operationally equivalent to uuppddaattee except for output. Check  rrdup‐
             date.

     ggrraapphh   Create  a graph from data stored in one or several RRDs. Apart from
             generating graphs, data can also be extracted to stdout. Check rrd‐
             graph.

     ggrraapphhvv  Create a graph from data stored in one or  several  RRDs.  Same  as
             graph, but metadata are printed before the graph. Check rrdgraph.

     dduummpp    Dump  the contents of an RRD in plain ASCII. In connection with re‐
             store you can use this to move an RRD from one  computer  architec‐
             ture to another.  Check rrddump.

     rreessttoorree Restore an RRD in XML format to a binary RRD. Check rrdrestore

     ffeettcchh   Get  data  for a certain time period from a RRD. The graph function
             uses fetch to retrieve its data from an RRD. Check rrdfetch.

     ttuunnee    Alter setup and structure of an RRD. Check rrdtune.

     ffiirrsstt   Find the first update time of an RRD. Check rrdfirst.

     llaasstt    Find the last update time of an RRD. Check rrdlast.

     llaassttuuppddaattee
             Find the last update time of an RRD.  It  also  returns  the  value
             stored  for  each datum in the most recent update. Check rrdlastup‐
             date.

     iinnffoo    Get information about an RRD. Check rrdinfo.

     rreessiizzee  Change the size of individual RRAs. This is dangerous! Check rrdre‐
             size.

     xxppoorrtt   Export data retrieved from one or several RRDs. Check rrdxport.

     fflluusshhccaacchheedd
             Flush the values for a specific RRD file from  memory.  Check  rrd‐
             flushcached.

     lliisstt    List the directories and rrd databases remotely. Check rrdlist.

   HHOOWW DDOOEESS RRRRDDTTOOOOLL WWOORRKK??
     Data Acquisition
             When monitoring the state of a system, it is convenient to have the
             data  available at a constant time interval. Unfortunately, you may
             not always be able to fetch data at exactly the time you  want  to.
             Therefore  RRRRDDttooooll  lets  you  update  the log file at any time you
             want.  It  will  automatically  interpolate  the   value   of   the
             data-source  (DDSS)  at  the latest official time-slot (interval) and
             write this interpolated value to the log. The  original  value  you
             have supplied is stored as well and is also taken into account when
             interpolating the next log entry.

     Consolidation
             You  may log data at a 1 minute interval, but you might also be in‐
             terested to know the development of the data over  the  last  year.
             You  could do this by simply storing the data in 1 minute intervals
             for the whole year. While this would take considerable  disk  space
             it  would  also  take  a  lot  of time to analyze the data when you
             wanted to create a graph covering the whole year. RRRRDDttooooll offers  a
             solution  to  this  problem through its data consolidation feature.
             When setting up a Round Robin Database (RRRRDD),  you  can  define  at
             which interval this consolidation should occur, and what consolida‐
             tion function (CCFF) (average, minimum, maximum, last) should be used
             to  build  the  consolidated values (see rrdcreate). You can define
             any number of different consolidation setups within one  RRRRDD.  They
             will  all be maintained on the fly when new data is loaded into the
             RRRRDD.

     Round Robin Archives
             Data values of the same consolidation setup are stored  into  Round
             Robin Archives (RRRRAA). This is a very efficient manner to store data
             for  a  certain  amount  of  time, while using a known and constant
             amount of storage space.

             It works like this: If you want to store 1'000 values in  5  minute
             interval,  RRRRDDttooooll  will allocate space for 1'000 data values and a
             header area. In the header it will store a  pointer  telling  which
             slots  (value)  in the storage area was last written to. New values
             are written to the Round Robin Archive in, you guessed it, a  round
             robin  manner.  This  automatically  limits the history to the last
             1'000 values (in our example). Because you can define several  RRRRAAs
             within  a  single  RRRRDD,  you can setup another one, for storing 750
             data values at a 2 hour interval, for example, and thus keep a  log
             for the last two months at a lower resolution.

             The use of RRRRAAs guarantees that the RRRRDD does not grow over time and
             that  old data is automatically eliminated. By using the consolida‐
             tion feature, you can still keep data for a very long  time,  while
             gradually reducing the resolution of the data along the time axis.

             Using  different  consolidation  functions (CCFF) allows you to store
             exactly the type of information that actually  interests  you:  the
             maximum  one  minute traffic on the LAN, the minimum temperature of
             your wine cellar, ... etc.

     Unknown Data
             As mentioned earlier, the RRRRDD stores data at a  constant  interval.
             Sometimes  it may happen that no new data is available when a value
             has to be written to the RRRRDD. Data acquisition may not be  possible
             for  one  reason or other. With RRRRDDttooooll you can handle these situa‐
             tions by storing an _*_U_N_K_N_O_W_N_* value into the  database.  The  value
             '_*_U_N_K_N_O_W_N_*'  is  supported  through  all the functions of the tool.
             When consolidating a data set, the amount of _*_U_N_K_N_O_W_N_* data  values
             is  accounted  for and when a new consolidated value is ready to be
             written to its Round Robin Archive (RRRRAA), a validity check is  per‐
             formed  to  make  sure that the percentage of unknown values in the
             data point is above a configurable  level.  If  not,  an  _*_U_N_K_N_O_W_N_*
             value will be written to the RRRRAA.

     GraphingRRRRDDttooooll  allows  you to generate reports in numerical and graphical
             form based on the data stored in one or several RRRRDDs. The  graphing
             feature  is  fully  configurable.  Size,  color and contents of the
             graph can be defined freely. Check rrdgraph for more information on
             this.

     Aberrant Behavior Detection
             by Jake Brutlag

             RRRRDDttooooll provides the building blocks for  near  real-time  aberrant
             behavior detection. These components include:

             •   An algorithm for predicting the value of a time series one time
                 step into the future.

             •   A measure of deviation between predicted and observed values.

             •   A mechanism to decide if and when an observed value or sequence
                 of observed values is _t_o_o _d_e_v_i_a_n_t from the predicted value(s).

             Here is a brief explanation of these components:

             The  Holt-Winters  time  series forecasting algorithm is an on-line
             (or incremental) algorithm that adaptively predicts future observa‐
             tions in a time series. Its forecast is the  sum  of  three  compo‐
             nents:  a  baseline  (or  intercept),  a linear trend over time (or
             slope), and a seasonal coefficient (a periodic effect,  such  as  a
             daily cycle). There is one seasonal coefficient for each time point
             in  the  period  (cycle).  After a value is observed, each of these
             components is updated via exponential smoothing.  This  means  that
             the  algorithm  "learns"  from past values and uses them to predict
             the future. The rate of adaptation is governed by 3 parameters, al‐
             pha (intercept), beta (slope), and gamma (seasonal). The prediction
             can also be viewed as a smoothed value for the time series.

             The measure of deviation is a seasonal weighted absolute deviation.
             The term _s_e_a_s_o_n_a_l means deviation is measured separately  for  each
             time point in the seasonal cycle. As with Holt-Winters forecasting,
             deviation  is predicted using the measure computed from past values
             (but only at that point in the seasonal cycle). After the value  is
             observed, the algorithm learns from the observed value via exponen‐
             tial  smoothing.  Confidence bands for the observed time series are
             generated by scaling the sequence of predicted deviation values (we
             usually think of the sequence as a continuous line  rather  than  a
             set of discrete points).

             Aberrant  behavior  (a  potential failure) is reported whenever the
             number of times the observed value violates  the  confidence  bands
             meets  or exceeds a specified threshold within a specified temporal
             window (e.g. 5 violations during the past 45 minutes with  a  value
             observed every 5 minutes).

             This functionality is embedded in a set of related RRRRAAss. In partic‐
             ular,  a  FAILURES RRRRAA logs potential failures. With these data you
             could, for example, use a front-end application to RRRRDDttooooll to  ini‐
             tiate real-time alerts.

             For a detailed description on how to set this up, see rrdcreate.

   RREEMMOOTTEE CCOONNTTRROOLL
     When  you start RRRRDDttooooll with the command line option '--' it waits for input
     via standard input (STDIN). With this feature you can  improve  performance
     by attaching RRRRDDttooooll to another process (MRTG is one example) through a set
     of  pipes.  Over  these  pipes RRRRDDttooooll accepts the same arguments as on the
     command line and some special commands like ccdd,, mmkkddiirr,, ppwwdd,,  llss  and  qquuiitt.
     For detailed help on the server commands type:

        rrdtool help cd

     When  a  command  is completed, RRDtool will print the string  '"OK"', fol‐
     lowed by timing information of the form  uu::_u_s_e_r_t_i_m_e  ss::_s_y_s_t_e_m_t_i_m_err::_r_u_n_t_i_m_e.
     The  _u_s_e_r_t_i_m_e and _s_y_s_t_e_m_t_i_m_e values are the running totals of seconds since
     RRDtool was started.  _r_u_n_t_i_m_e is the total amount of seconds  that  RRDtool
     has  been  running.   If  an error occurs, a line of the form '"ERROR:" _D_e_‐
     _s_c_r_i_p_t_i_o_n _o_f _e_r_r_o_r' will be printed instead. RRRRDDttooooll will not abort, unless
     something really serious happens. If a wwoorrkkddiirr is specified and the UID  is
     0,  RRDtool  will do a chroot to that workdir. If the UID is not 0, RRDtool
     only changes the current directory to wwoorrkkddiirr.

   RRRRDD SSeerrvveerr
     If you want to create a RRD-Server, you must choose a TCP/IP Service number
     and add them to _/_e_t_c_/_s_e_r_v_i_c_e_s like this:

      rrdsrv      13900/tcp                       # RRD server

     Attention: the TCP port 13900 isn't officially registered for  rrdsrv.  You
     can  use  any  unused  port  in  your services file, but the server and the
     client system must use the same port, of course.

     With this configuration you can add  RRDtool  as  meta-server  to  _/_e_t_c_/_i_n_‐
     _e_t_d_._c_o_n_f. For example:

      rrdsrv stream tcp nowait root /opt/rrd/bin/rrdtool rrdtool - /var/rrd

     Don't  forget  to  create  the database directory /var/rrd and reinitialize
     your inetd.

     If all was setup correctly, you can access the server  with  Perl  sockets,
     tools  like  netcat, or in a quick interactive test by using 'telnet local‐
     host rrdsrv'.

     NNOOTTEE:: that there is no authentication with this feature! Do not setup  such
     a port unless you are sure what you are doing.

EENNVVIIRROONNMMEENNTT VVAARRIIAABBLLEESS
     The  following  environment variables may be used to change the behavior of
     most of the utilities.

     RRRRDD__LLOOCCKKIINNGG
         If this environment variable is set, the RRRRDD  file  is  locked  in  the
         given mode:

         -   ttrryy fails, when the file is locked by another process.  This is the
             default.

         -   bblloocckk waits until the lock is released.

         -   nnoonnee  skips  locking at all.  Caller has to ensure a proper locking
             which should be compatible with "fcntl(fd, F_SETLK, ...)".

         Some utilities have command line  options  (----lloocckkiinngg)  which  override
         this variable.

RRRRDDCCAACCHHEEDD,, TTHHEE CCAACCHHIINNGG DDAAEEMMOONN
     For  very big setups, updating thousands of RRD files often becomes a seri‐
     ous IO problem. If you run into such problems, you might  want  to  take  a
     look  at  rrdcached, a caching daemon for RRDtool which may help you lessen
     the stress on your disks.

SSEEEE AALLSSOO
     rrdcreate, rrdupdate, rrdgraph, rrddump, rrdfetch, rrdtune, rrdlast,  rrdx‐
     port, rrdflushcached, rrdcached

BBUUGGSS
     Bugs? Features!

AAUUTTHHOORR
     Tobias Oetiker <tobi@oetiker.ch>

1.10.0                             2026-05-23                         _R_R_D_T_O_O_L(1)
