I would like to thank to following people for helping to
-bring RRDTool into existence.
+bring RRDtool into existence.
Planning and Inspiration
and DNS:NET Internet Services (www.dns-net.de)
for http://rrdtool.org
-Further I would like to note, that rrdtool would not exist without
+Further I would like to note, that RRDtool would not exist without
the following free software products:
Perl by Larry Wall
I would also like to thank the Department of Electrical Engineering
at the Swiss Federal Institute of Technology who allow me to
-use their network resources to publish rrdtool ...
+use their network resources to publish RRDtool ...
During Summer 1999 CAIDA (www.caida.org) has supported me in working full
time on RRDtool ... A big thank you to them as well.
============
-In this file I am noting the Major changes to rrdtool
+In this file I am noting the major changes to RRDtool
for details check the cvs ChangeLog
2004/01/20 Tobi Oetiker <tobi@oetiker.ch>
* Updated zlib and libpng
* rrd_gfx.c intrduced as libart wrapper
* LINE takes now a float as argument
- * rrdtool uses truetype for fonts
+ * RRDtool uses truetype for fonts
* thanks to libart there is now full alpha transparenc
and antialiasing.
* the new option --font lets customize the font
2001/03/02 Tobias Oetiker <oetiker@ee.ethz.ch>
Added Aberrant Patch from Jake Brutlag <jakeb@microsoft.com>
From now one, new rrd files use version tag 0002. They can
- NOT be read by the old 1.0.x rrdtools.
+ NOT be read by the old 1.0.x RRDtools.
Jake:
Aberrant Behavior Detection support. A brief overview added to
modules. Doing this reliefs you from using 'use lib' in your scripts.
Configure will also look for an TCL installation on your system. If it finds
-one it will build a TCL interface for rrdtool. If you keep tcl in a non
+one it will build a TCL interface for RRDtool. If you keep tcl in a non
standard location you can use
sh configure --with-tcllib=/sw/tcl-8.3/lib
allow sub second presition for step definition
-modularise consolidation and aquisition functions
+modularise consolidation and acquisition functions
Allow the user to define vertical scaling of graphs in a more flexible way.
some thing like --inner-range 0-1000 and --outer-range 0-10000 which means
-This is a Perl module for using rrdtool process via a set of pipes.
+This is a Perl module for using RRDtool process via a set of pipes.
perl Makefile.PL
make test
=head1 NAME
-RRDp - Attach rrdtool from within a perl script via a set of pipes;
+RRDp - Attach RRDtool from within a perl script via a set of pipes;
=head1 SYNOPSIS
use B<RRDp>
-B<RRDp::start> I<path to rrdtool executable>
+B<RRDp::start> I<path to RRDtool executable>
B<RRDp::cmd> I<rrdtool commandline>
=head1 DESCRIPTION
-With this module you can safely communicate with the rrdtool.
+With this module you can safely communicate with the RRDtool.
After every B<RRDp::cmd> you have to issue an B<RRDp::read> command to get
-B<rrdtool>s answer to your command. The answer is returned as a pointer,
+B<RRDtool>s answer to your command. The answer is returned as a pointer,
in order to speed things up. If the last command did not return any
data, B<RRDp::read> will return an undefined variable.
If you import the PERFORMANCE variables into your namespace,
-you can access rrdtools internal performance measurements.
+you can access RRDtool's internal performance measurements.
=over 8
Load the RRDp::pipe module.
-=item B<RRDp::start> I<path to rrdtool executable>
+=item B<RRDp::start> I<path to RRDtool executable>
-start rrdtool. The argument must be the path to the rrdtool executable
+start RRDtool. The argument must be the path to the RRDtool executable
=item B<RRDp::cmd> I<rrdtool commandline>
-pass commands on to rrdtool. check the rrdtool documentation for
-more info on the rrdtool commands.
+pass commands on to RRDtool. check the RRDtool documentation for
+more info on the RRDtool commands.
=item $answer = B<RRDp::read>
-read rrdtools response to your command. Note that the $answer variable will
+read RRDtool's response to your command. Note that the $answer variable will
only contain a pointer to the returned data. The reason for this is, that
-rrdtool can potentially return quite excessive amounts of data
+RRDtool can potentially return quite excessive amounts of data
and we don't want to copy this around in memory. So when you want to
access the contents of $answer you have to use $$answer which dereferences
the variable.
=item $status = B<RRDp::end>
-terminates rrdtool and returns rrdtools status ...
+terminates RRDtool and returns RRDtool's status ...
=item B<$RRDp::user>, B<$RRDp::sys>, B<$RRDp::real>
these variables will contain totals of the user time, system time and
-real time as seen by rrdtool. User time is the time rrdtool is
+real time as seen by RRDtool. User time is the time RRDtool is
running, System time is the time spend in system calls and real time
-is the total time rrdtool has been running.
+is the total time RRDtool has been running.
The difference between user + system and real is the time spent
waiting for things like the hard disk and new input from the perl
=head1 SEE ALSO
-For more information on how to use rrdtool, check the manpages.
+For more information on how to use RRDtool, check the manpages.
=head1 AUTHOR
#! /usr/bin/perl
-# this exercises just the perl module .. not rrdtool as such ...
+# this exercises just the perl module .. not RRDtool as such ...
BEGIN { $| = 1; print "1..5\n"; }
END {
=head1 NAME
-RRDs - Access rrdtool as a shared module
+RRDs - Access RRDtool as a shared module
=head1 SYNOPSIS
=head2 Calling Sequence
-This module accesses rrdtool functionality directly from within perl. The
+This module accesses RRDtool functionality directly from within perl. The
arguments to the functions listed in the SYNOPSIS are explained in the regular
-rrdtool documentation. The commandline call
+RRDtool documentation. The commandline call
rrdtool update mydemo.rrd --template in:out N:12:13
The RRDs::times function takes two parameters: a "start" and "end" time.
These should be specified in the B<AT-STYLE TIME SPECIFICATION> format
-used by rrdtool. See the B<rrdfetch> documentation for a detailed
+used by RRDtool. See the B<rrdfetch> documentation for a detailed
explanation on how to specify time.
=head2 Error Handling
print "Averages: ", (join ", ", @$averages);
B<RRDs::info> returns a pointer to a hash. The keys of the hash
-represent the property names of the rrd and the values of the hash are
+represent the property names of the RRD and the values of the hash are
the values of the properties.
$hash = RRDs::info "example.rrd";
to access all RRD functions as of RRDtool 1.0.13. All command names
and arguments are equal to those of RRDtool. They are assigned to the
namespace `Rrd', e.g. `Rrd::create'. Return values are a bit
-different from plain rrdtool behavior to enable more native Tcl
+different from plain RRDtool behavior to enable more native Tcl
usage. Errors are mapped to the TCL_ERROR return code together with
the RRD error strings.
digit 0 is only shown if it is the only symbol in the sequence, or if
it is not the first one.
-If this sounds as crypto to you, this is what I've said in numbers:
+If this sounds cryptic to you, this is what I've said in numbers:
0
1
(things-to-do) on the stack and this stack is then processed. The result
will be placed on the stack. At the end, there should be exactly one
number left: the outcome of the series of operations. If there is not
-exactly one number left, rrdtool will complain loudly.
+exactly one number left, RRDtool will complain loudly.
Above multiplication by eight will look like:
-------------------- +
(outcome of the sum)
-As a mathmatical function, this could be written:
+As a mathematical function, this could be written:
C<add(router1.rrd:link1in , router1.rrd:link2in , router2.rrd:link1in , router3.rrd:link1in , router3.rrd:link2.in)>
not matter if you add a to b and then add c to the result or first
add b to c and then add a to the result. This makes it possible to
rewrite the RPN into C<CDEF:result=a,b,c,d,e,+,+,+,+> which is
-evaluatated differently:
+evaluated differently:
push value of variable a on the stack: a
push value of variable b on the stack: a b
similar to one of the expressions in the previous paragraph, only the
multiplication and the addition changed places.
-When you have problems with RPN or when rrdtool is complaining, it's
+When you have problems with RPN or when RRDtool is complaining, it's
usually a Good Thing to write down the stack on a piece of paper
-and see what happens. Have the manual ready and pretend to be rrdtool.
+and see what happens. Have the manual ready and pretend to be RRDtool.
Just do all the math by hand to see what happens, I'm sure this will
solve most, if not all, problems you encounter.
at its current maximum (for positive infinity) or minimum (for negative
infinity) without knowing this maximum (minimum).
-Infinity in rrdtool is mostly used to draw an AREA without knowing its
+Infinity in RRDtool is mostly used to draw an AREA without knowing its
vertical dimensions. You can think of it as drawing an AREA with an
infinite height and displaying only the part that is visible in the
current graph. This is probably a good way to approximate infinity
on purpose. Implementing the second method is described next:
What we want is: "if the value is unknown, replace it with zero". This
-could be writte in pseudo-code as: if (value is unknown) then (zero)
-else (value). When reading the rrdgraph manual you notice the "UN"
+could be written in pseudo-code as: if (value is unknown) then (zero)
+else (value). When reading the L<rrdgraph> manual you notice the "UN"
function that returns zero or one. You also notice the "IF" function
that takes zero or one as input.
C<CDEF:result=value,UN,0,value,IF>
-You may want to read Steve Raders RPN guide if you have difficulties
+You may want to read Steve Rader's RPN guide if you have difficulties
with the way I explained this last example.
-If you want to check this RPN expression, just mimic rrdtools behavior:
+If you want to check this RPN expression, just mimic RRDtool behavior:
For any known value, the expression evaluates as follows:
CDEF:result=value,UN,0,value,IF (value,UN) is not true so it becomes 0
and this is good input to "IF". We want "if (time > 937521357) then
(return a) else (return b)".
-This process was already described toroughly in the previous chapter
+This process was already described thoroughly in the previous chapter
so lets do it quick:
if (x) then a else b
Pseudo code: if (number > 100) then 100 else number.
The second "problem" may also be solved by using the rigid option of
-rrdtool graph, however this has not the same result. In this example
+RRDtool graph, however this has not the same result. In this example
you can end up with a graph that does autoscaling. Also, if you use
the numbers to display maxima they will be set to 100kb/s.
These two parts of the CDEF produce either 0 for false or 1 for true.
We can now check if they are both 0 (or 1) using a few IF statements
but, as Wataru Satoh pointed out, we can use the "*" or "+" functions
-as locical AND and locical OR.
+as logical AND and logical OR.
For "*", the result will be zero (false) if either one of the two
operators is zero. For "+", the result will only be false (0) when
it will effectively overwrite the STACKed parts.
You could combine the two CDEF lines into one (we don't use "allusers")
-if you like. But there are good reasons for writting two CDEFS:
+if you like. But there are good reasons for writing two CDEFS:
=over 4
GPRINT:allusers:AVERAGE:"Average: %6.0lf"
GPRINT:allusers:LAST:"Current: %6.0lf\n"
-=head1 The examples from the rrd graph manual page
+=head1 The examples from the RRD graph manual page
-=head2 Degrees Celcius vs. Degrees Fahrenheit
+=head2 Degrees Celsius vs. Degrees Fahrenheit
rrdtool graph demo.png --title="Demo Graph" \
DEF:cel=demo.rrd:exhaust:AVERAGE \
5. push function "multiply" and process it
6. the resulting value is now "(cel-32)*0.55555"
-Note that if you take the celcius to fahrenheit function you should
+Note that if you take the Celsius to Fahrenheit function you should
be doing "5/9*(cel-32)" so 0.55555 is not exactly correct. It is close
enough for this purpose and it saves a calculation.
"IF" function that returns either "INF" or "UNKN" depending on the
time. This is returned to variable "background".
-The second CDEF has been discussed earlyer in this document so we
+The second CDEF has been discussed earlier in this document so we
won't do that here.
Now you can draw the different layers. Start with the background
LINE3:derivate#000077:derivate
LINE1:var#007700:'raw data'
+
=head1 Out of ideas for now
This document was created from questions asked by either myself or
=head1 NAME
-rpntutorial - Reading RRDTtool RPN Expressions by Steve Rader
+rpntutorial - Reading RRDtool RPN Expressions by Steve Rader
=for html <div align="right"><a href="rpntutorial.pdf">PDF</a> version.</div>
=head1 DESCRIPTION
-This tutorial should help you get to grips with rrdtool RPN expressions
-as seen in CDEF arguments of rrdtool graph.
+This tutorial should help you get to grips with RRDtool RPN expressions
+as seen in CDEF arguments of RRDtool graph.
=head1 Reading Comparison Operators
("Z") branch. Read the RPN expression "X,Y,Z,IF" from left to
right like so: "if X then Y else Z".
-For example, consider "1,10,100,IF". It looks bizzare to me.
+For example, consider "1,10,100,IF". It looks bizarre to me.
But when I read "if 1 then 10 else 100" it's crystal clear: 1 is true
so the answer is 10. Note that only zero is false; all other values
are true. "2,20,200,IF" ("if 2 then 20 else 200") evaluates to 20.
2) 1,5,+ eval is 1,5,+ = 6 result is 6
3) 6
-Let's use that notation to conviently solve some complex RPN expressions
+Let's use that notation to conveniently solve some complex RPN expressions
with multiple logic operators:
1) 20,10,GT,10,20,IF eval is 20,10,GT = 1 result is 1,10,20,IF
Traditional mathematic expressions are evaluated by
doing multiplication and division first, then addition and
- subtraction. Perentences are used to force the evaluation of
+ subtraction. Parentheses are used to force the evaluation of
addition before multiplication (etc). RPN does not require
parentheses because the ordering of objects on the stack
can force the evaluation of addition before multiplication.
=head1 AUTHOR
-steve rader E<lt>rader@wiscnet.netE<gt>
+Steve Rader E<lt>rader@wiscnet.netE<gt>
=item RRD::TIME::LAST I<rrd-file> I<strftime-format>
This gets replaced by the last modification time of the selected RRD. The
-time is I<strftime>-formated with the string specified in the second argument.
+time is I<strftime>-formatted with the string specified in the second argument.
=item RRD::TIME::NOW I<strftime-format>
This gets replaced by the current time of day. The
-time is I<strftime>-formated with the string specified in the argument.
+time is I<strftime>-formatted with the string specified in the argument.
=item RRD::TIME::STRFTIME I<START|END> I<start-spec> I<end-spec> I<strftime-format>
I<strftime-format> on either I<start-spec> or I<end-spec> depending on
whether I<START> or I<END> is specified. Both I<start-spec> and I<end-spec>
must be supplied as either could be relative to the other. This is intended
-to allow pretty titles on graphs with times that are easier for non rrdtool
+to allow pretty titles on graphs with times that are easier for non RRDtool
folks to figure out than "-2weeks".
=item RRD::GRAPH I<rrdgraph arguments>
=item I<filename>
The name of the B<RRD> you want to create. B<RRD> files should end
-with the extension F<.rrd>. However, B<rrdtool> will accept any
+with the extension F<.rrd>. However, B<RRDtool> will accept any
filename.
=item B<--start>|B<-b> I<start time> (default: now - 10s)
Specifies the time in seconds since 1970-01-01 UTC when the first
-value should be added to the B<RRD>. B<rrdtool> will not accept
+value should be added to the B<RRD>. B<RRDtool> will not accept
any data timed before or at the time specified.
See also AT-STYLE TIME SPECIFICATION section in the
=item B<COUNTER>
is for continuous incrementing counters like the
-InOctets counter in a router. The B<COUNTER> data source assumes that
+ifInOctets counter in a router. The B<COUNTER> data source assumes that
the counter never decreases, except when a counter overflows. The update
function takes the overflow into account. The counter is stored as a
per-second rate. When the counter overflows, RRDtool checks if the overflow happened at
=over 4
-=item B<RRA:>I<HWPREDICT>B<:>I<rows>B<:>I<alpha>B<:>I<beta>B<:>I<seasonal period>B<:>I<rra num>
+=item B<RRA:>I<HWPREDICT>B<:>I<rows>B<:>I<alpha>B<:>I<beta>B<:>I<seasonal period>B<:>I<rra-num>
-=item B<RRA:>I<SEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra num>
+=item B<RRA:>I<SEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra-num>
-=item B<RRA:>I<DEVSEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra num>
+=item B<RRA:>I<DEVSEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra-num>
-=item B<RRA:>I<DEVPREDICT>B<:>I<rows>B<:>I<rra num>
+=item B<RRA:>I<DEVPREDICT>B<:>I<rows>B<:>I<rra-num>
-=item B<RRA:>I<FAILURES>B<:>I<rows>B<:>I<threshold>B<:>I<window length>B<:>I<rra num>
+=item B<RRA:>I<FAILURES>B<:>I<rows>B<:>I<threshold>B<:>I<window length>B<:>I<rra-num>
=back
appears in L<rrdgraph>.
The SEASONAL and DEVSEASONAL B<RRAs> store the seasonal coefficients for the
-Holt-Winters Forecasting algorithm and the seasonal deviations respectively.
+Holt-Winters forecasting algorithm and the seasonal deviations respectively.
There is one entry per observation time point in the seasonal cycle. For
example, if primary data points are generated every five minutes, and the
seasonal cycle is 1 day, both SEASONAL and DEVSEASONAL with have 288 rows.
In order to simplify the creation for the novice user, in addition to
supporting explicit creation the HWPREDICT, SEASONAL, DEVPREDICT,
-DEVSEASONAL, and FAILURES B<RRAs>, the B<rrdtool> create command supports
+DEVSEASONAL, and FAILURES B<RRAs>, the B<RRDtool> create command supports
implicit creation of the other four when HWPREDICT is specified alone and
-the final argument I<rra num> is omitted.
+the final argument I<rra-num> is omitted.
I<rows> specifies the length of the B<RRA> prior to wrap around. Remember
that there is a one-to-one correspondence between primary data points and
entries in these RRAs. For the HWPREDICT CF, I<rows> should be larger than
-the I<seasonal period>. If the DEVPREDICT B<RRA> is implicity created, the
+the I<seasonal period>. If the DEVPREDICT B<RRA> is implicitly created, the
default number of rows is the same as the HWPREDICT I<rows> argument. If the
FAILURES B<RRA> is implicitly created, I<rows> will be set to the I<seasonal
-period> argument of the HWPREDICT B<RRA>. Of course, the B<rrdtool>
+period> argument of the HWPREDICT B<RRA>. Of course, the B<RRDtool>
I<resize> command is available if these defaults are not sufficient and the
create wishes to avoid explicit creations of the other specialized function
B<RRAs>.
I<seasonal period> specifies the number of primary data points in a seasonal
cycle. If SEASONAL and DEVSEASONAL are implicitly created, this argument for
those B<RRAs> is set automatically to the value specified by HWPREDICT. If
-they are explicity created, the creator should verify that all three
+they are explicitly created, the creator should verify that all three
I<seasonal period> arguments agree.
-I<alpha> is the adaptation parameter of the intercept (or baseline)
-coefficient in the Holt-Winters Forecasting algorithm. See L<rrdtool> for a
+I<alpha> is the adaption parameter of the intercept (or baseline)
+coefficient in the Holt-Winters forecasting algorithm. See L<RRDtool> for a
description of this algorithm. I<alpha> must lie between 0 and 1. A value
closer to 1 means that more recent observations carry greater weight in
predicting the baseline component of the forecast. A value closer to 0 mean
component.
I<beta> is the adaption parameter of the slope (or linear trend) coefficient
-in the Holt-Winters Forecating algorihtm. I<beta> must lie between 0 and 1
+in the Holt-Winters forecasting algorithm. I<beta> must lie between 0 and 1
and plays the same role as I<alpha> with respect to the predicted linear
trend.
I<gamma> is the adaption parameter of the seasonal coefficients in the
-Holt-Winters Forecasting algorithm (HWPREDICT) or the adaption parameter in
+Holt-Winters forecasting algorithm (HWPREDICT) or the adaption parameter in
the exponential smoothing update of the seasonal deviations. It must lie
between 0 and 1. If the SEASONAL and DEVSEASONAL B<RRAs> are created
implicitly, they will both have the same value for I<gamma>: the value
specified for the HWPREDICT I<alpha> argument. Note that because there is
one seasonal coefficient (or deviation) for each time point during the
-seasonal cycle, the adaption rate is much slower than the baseline. Each
+seasonal cycle, the adaptation rate is much slower than the baseline. Each
seasonal coefficient is only updated (or adapts) when the observed value
occurs at the offset in the seasonal cycle corresponding to that
coefficient.
-If SEASONAL and DEVSEASONAL B<RRAs> are created explicity, I<gamma> need not
+If SEASONAL and DEVSEASONAL B<RRAs> are created explicitly, I<gamma> need not
be the same for both. Note that I<gamma> can also be changed via the
-B<rrdtool> I<tune> command.
+B<RRDtool> I<tune> command.
-I<rra num> provides the links between related B<RRAs>. If HWPREDICT is
+I<rra-num> provides the links between related B<RRAs>. If HWPREDICT is
specified alone and the other B<RRAs> created implicitly, then there is no
need to worry about this argument. If B<RRAs> are created explicitly, then
pay careful attention to this argument. For each B<RRA> which includes this
argument, there is a dependency between that B<RRA> and another B<RRA>. The
-I<rra num> argument is the 1-based index in the order of B<RRA> creation
+I<rra-num> argument is the 1-based index in the order of B<RRA> creation
(that is, the order they appear in the I<create> command). The dependent
-B<RRA> for each B<RRA> requiring the I<rra num> argument is listed here:
+B<RRA> for each B<RRA> requiring the I<rra-num> argument is listed here:
=over 4
=item *
-HWPREDICT I<rra num> is the index of the SEASONAL B<RRA>.
+HWPREDICT I<rra-num> is the index of the SEASONAL B<RRA>.
=item *
-SEASONAL I<rra num> is the index of the HWPREDICT B<RRA>.
+SEASONAL I<rra-num> is the index of the HWPREDICT B<RRA>.
=item *
-DEVPREDICT I<rra num> is the index of the DEVSEASONAL B<RRA>.
+DEVPREDICT I<rra-num> is the index of the DEVSEASONAL B<RRA>.
=item *
-DEVSEASONAL I<rra num> is the index of the HWPREDICT B<RRA>.
+DEVSEASONAL I<rra-num> is the index of the HWPREDICT B<RRA>.
=item *
-FAILURES I<rra num> is the index of the DEVSEASONAL B<RRA>.
+FAILURES I<rra-num> is the index of the DEVSEASONAL B<RRA>.
=back
I<window length> is the number of time points in the window. Specify an
integer greater than or equal to the threshold and less than or equal to 28.
The time interval this window represents depends on the interval between
-primary data points. If the FAILURES B<RRA> is implicity created, the
+primary data points. If the FAILURES B<RRA> is implicitly created, the
default value is 9.
=head1 The HEARTBEAT and the STEP
-Here is an explanation by Don Baarda on the inner workings of rrdtool.
+Here is an explanation by Don Baarda on the inner workings of RRDtool.
It may help you to sort out why all this *UNKNOWN* data is popping
up in your databases:
-RRD gets fed samples at arbitrary times. From these it builds Primary
+RRDtool gets fed samples at arbitrary times. From these it builds Primary
Data Points (PDPs) at exact times every "step" interval. The PDPs are
then accumulated into RRAs.
require multiple samples per PDP, and if you don't get them mark the
PDP unknown. A long heartbeat can span multiple "steps", which means
it is acceptable to have multiple PDPs calculated from a single
-sample. An extreme example of this might be a "step" of 5mins and a
+sample. An extreme example of this might be a "step" of 5 minutes and a
"heartbeat" of one day, in which case a single sample every day will
result in all the PDPs for that entire day period being set to the
same average rate. I<-- Don Baarda E<lt>don.baarda@baesystems.comE<gt>>
=item Temperature
Normally you have some type of meter you can read to get the temperature.
-The temperature is not realy connected with a time. The only connection is
+The temperature is not really connected with a time. The only connection is
that the temperature reading happened at a certain time. You can use the
-B<GAUGE> data source type for this. RRRtool will the record your reading
+B<GAUGE> data source type for this. RRDtool will the record your reading
together with the time.
=item Mail Messages
Assume you have a method to count the number of messages transported by
your mailserver in a certain amount of time, this give you data like '5
messages in the last 65 seconds'. If you look at the count of 5 like and
-B<ABSOLUTE> datatype you can simply update the rrd with the number 5 and the
+B<ABSOLUTE> data type you can simply update the RRD with the number 5 and the
end time of your monitoring period. RRDtool will then record the number of
messages per second. If at some later stage you want to know the number of
messages transported in a day, you can get the average messages per second
RRA:HWPREDICT:1440:0.1:0.0035:288>
This example is a monitor of a router interface. The first B<RRA> tracks the
-traffic flow in octects; the second B<RRA> generates the specialized
-functions B<RRAs> for aberrant behavior detection. Note that the I<rra num>
+traffic flow in octets; the second B<RRA> generates the specialized
+functions B<RRAs> for aberrant behavior detection. Note that the I<rra-num>
argument of HWPREDICT is missing, so the other B<RRAs> will be implicitly be
created with default parameter values. In this example, the forecasting
algorithm baseline adapts quickly; in fact the most recent one hour of
exponential smoothing formula described in a forthcoming LISA 2000 paper.
The seasonal cycle is one day (288 data points at 300 second intervals), and
-the seasonal adaption paramter will be set to 0.1. The RRD file will store 5
+the seasonal adaption parameter will be set to 0.1. The RRD file will store 5
days (1440 data points) of forecasts and deviation predictions before wrap
around. The file will store 1 day (a seasonal cycle) of 0-1 indicators in
the FAILURES B<RRA>.
=back
+=head1 EXAMPLES
+
+To transfer an RRD between architectures, follow these steps:
+
+=over 4
+
+=item 1.
+
+On the same system where the RRD was created, use B<rrdtool> B<dump>
+to export the data to XML format.
+
+=item 2.
+
+Transfer the XML dump to the target system
+
+=item 3.
+
+Run B<rrdtool> B<restore> to create a new RRD from the XML dump. See
+B<rrdrestore> for details.
+
+=back
+
=head1 AUTHOR
Tobias Oetiker E<lt>oetiker@ee.ethz.chE<gt>
=head1 NAME
-rrdtool fetch - fetch data from an rrd.
+rrdtool fetch - fetch data from an RRD.
=for html <div align="right"><a href="rrdfetch.pdf">PDF</a> version.</div>
to get data from B<RRD>s. B<fetch> will analyze the B<RRD> and
will try to retrieve the data in the resolution requested.
The data fetched is printed to stdout. I<*UNKNOWN*> data is often
-represented by the string "NaN" depending on your OSs printf
+represented by the string "NaN" depending on your OS's printf
function.
=over 8
=head2 RESOLUTION INTERVAL
-In order to get rrdtool to fetch anything other than the finest resolution RRA
+In order to get RRDtool to fetch anything other than the finest resolution RRA
B<both> the start and end time must be specified on boundaries that are
multiples of the wanted resolution. Consider the following example:
TIME=$(date +%s); RRDRES=900; rrdtool fetch subdata.rrd AVERAGE -r $RRDRES \
-e $(echo $(($TIME/$RRDRES*$RRDRES))) -s e-1h
-Or in perl:
+Or in Perl:
perl -e '$ctime = time; $rrdres = 900; system "rrdtool fetch subdata.rrd AVERAGE \
-r $rrdres -e @{[int($ctime/$rrdres)*$rrdres]} -s e-1h"'
=head2 AT-STYLE TIME SPECIFICATION
-Apart from the traditional I<Seconds since epoch>, rrdtool does also
+Apart from the traditional I<Seconds since epoch>, RRDtool does also
understand at-style time specification. The specification is called
"at-style" after Unix command at(1) that has moderately complex ways
to specify time to run your job at. The at-style specification
reference. B<Now> refers to the current moment (and is also a default
time reference). B<Start> (B<end>) can be used to specify time
relative to the start (end) time for those tools that use these
-categories (rrdfetch, rrdgraph).
+categories (B<rrdfetch>, L<rrdgraph>).
Month and weekday names can be used in their naturally abbreviated form
(e.g., Dec for December, Sun for Sunday, etc.). The words B<now>,
I<19970703 12:45> -- 12:45 July 3th, 1997
(my favorite, and its even got an ISO number (8601))
-
=head1 AUTHOR
Tobias Oetiker <oetiker@ee.ethz.ch>
=item I<filename>
-The name of the graph to generate. Since B<rrdtool> outputs
+The name of the graph to generate. Since B<RRDtool> outputs
SVGs and PNGs, it's recommended that the filename end in either
-F<.svg> or F<.png>. B<rrdtool> does not enforce this, however.
+F<.svg> or F<.png>. B<RRDtool> does not enforce this, however.
If the I<filename> is set to '-' the image file will be written
to standard out. All other output will get suppressed.
=item B<-a>|B<--imgformat> B<SVG>|B<PNG> (default: PNG)
-Allows you to produce PNG output from rrdtool.
+Allows you to produce PNG output from RRDtool.
=item B<-z>|B<--lazy> (default: false)
Defines the value normally located at the upper border of the
graph. If the graph contains higher values, the upper border will
-move upwards to accomodate these values as well.
+move upward to accommodate these values as well.
If you want to define an upper-limit which will not move in any
event you have to set the B<--rigid> option as well.
=item B<--step> I<value> (default automatic)
-By default rrdgraph calculates the width of one pixle in the time domain and
+By default rrdgraph calculates the width of one pixel in the time domain and
tries to get data at that resolution from the RRD. With this switch you can
override this behaviour. If you want rrdgraph to get data at 1 hour
resolution from the RRD, then you can set the step to 3600 seconds. Note,
-that a step smaller than 1 pixle will be silently ignored.
+that a step smaller than 1 pixel will be silently ignored.
=item B<DEF:>I<vname>B<=>I<rrd>B<:>I<ds-name>B<:>I<CF>
hours ahead of UTC.
Note that the timezone offset is always calculated for the time the
-current sample was taken at. It has nuthing todo with the time you are
+current sample was taken at. It has nothing to do with the time you are
doing the calculation.
=back
B<AREA> or B<LINE?> -- you need something to stack something onto in
the first place ;)
-Note, that when you STACK onto *UNKNOWN* data, rrdtool will not draw
+Note, that when you STACK onto *UNKNOWN* data, RRDtool will not draw
any graphics ... *UNKNOWN* is not zero ... if you want it to be zero
then you might want to use a CDEF argument with IF and UN functions to
turn *UNKNOWN* into zero ...
Normally there are two space characters inserted between every two items
printed into the graph. The space following a string can be suppressed by
-putting a B<\g> at the end of the string. The B<\g> also squshes any space
+putting a B<\g> at the end of the string. The B<\g> also ignores any space
inside the string if it is at the very end of the string. This can be used
-in connection with B<%s> to supress empty unit strings.
+in connection with B<%s> to suppress empty unit strings.
GPRINT:a:MAX:%lf%s\g
=head1 NOTE on Return Values
Whenever rrd_graph gets called, it prints a line telling the size of
-the image it has just created to STDOUT. This line looks like this: XSIZExYSIZE.
+the image it has just created to stdout. This line looks like this: XSIZExYSIZE.
=head1 EXAMPLE 1
to signal any unknown data.
Note that this example assumes that your data is in the positive half of the y-axis
-otherwhise you would would have to add NEGINF in order to extend the coverage
-of the rea to whole graph.
+otherwise you would would have to add NEGINF in order to extend the coverage
+of the area to whole graph.
=head1 EXAMPLE 4
=include name
-=head1 SYNOPSYS
+=head1 SYNOPSIS
B<rrdtool graph> I<filename>
[E<lt>B<L<option|rrdgraph/OPTIONS>>E<gt> ...]
=item filename
The name and path of the graph to generate. It is recommended to
-end this in C<.png>, C<.svg> or C<.eps> but B<rrdtool> does not enforce this.
+end this in C<.png>, C<.svg> or C<.eps> but B<RRDtool> does not enforce this.
I<filename> can be 'C<->' to send the image to C<stdout>. In
that case, no other output is generated.
=item Size
B<[-w|--width E<lt>pixelsE<gt>]>
-B<[-h|--heigth E<lt>pixelsE<gt>]>
+B<[-h|--height E<lt>pixelsE<gt>]>
B<[-j|--only-graph]>
The width and height of the B<canvas> (the part of the graph with
the actual lines and such). Defaults are 400 pixels by 100 pixels.
-If you sepcify the B<--only-graph> and set the hight < 32 pixels you will
+If you specify the B<--only-graph> and set the height < 32 pixels you will
get a tiny graph image to use as an icon in a potential overview. All
labeling will be stripped off the graph.
portion of the y-axis that is actually used. You can change this
behaviour by setting the limits. The displayed y-axis will show
at most B<maximum-upper-limit> and at least B<minimum-upper-limit>
-at the top, and similarily at least B<maximum-lower-limit> and
+at the top, and similarly at least B<maximum-lower-limit> and
at most B<minimum-lower-limit> at the bottom. The default is to
display at most B<infinity> (so: no limit) and at least
B<negative infinity> (no minimal value) at the top. The bottom of
B<[-N|--no-gridfit]>
-To avoid antialiasing effects gridlines are placed on
+To avoid anti-aliasing effects gridlines are placed on
integer pixel values. This is by default done by extending
-the scale so gridlines happends to be spaced using an
+the scale so gridlines happens to be spaced using an
integer number of pixels, and starts on integer pixel value.
This might extend the scale too much for some logarithmic scales
and for linear scales where --alt-autoscale is needed.
where each label will be placed. If it is zero, the label will be
placed right under the corresponding line (useful for hours, dates
etcetera). If you specify a number of seconds here the label is
-centered in this interval (useful for monday, januari etcetera).
+centered in this interval (useful for Monday, January etcetera).
Example: C<--x-grid MINUTE:10:HOUR:1:HOUR:4:0:%X>
C<MGRID> for the major grid, C<FONT>, C<FRAME> and axis, C<ARROW>.
Each color is composed out of three hexadecimal numbers specifying
its color component (00 is off, FF is maximum) of red, green and blue.
-Optionally you may add another hexademimal number specifying the
+Optionally you may add another hexadecimal number specifying the
transparency (FF is solid).
You may set this option several times to alter multiple defaults.
B<[-n|--font I<FONTTAG>B<:>I<size>B<:>I<font>]>
Lets you customize which font to use for the various text elements on the
-rrd graphs. C<DEFAULT> sets the default value for all elements C<TITLE>,
+RRD graphs. C<DEFAULT> sets the default value for all elements C<TITLE>,
C<AXIS> for the axis labels, C<UNIT> for the vertical unit label, C<LEGEND>
for the graph legend.
=include name
-=head1 SYNOPSYS
+=head1 SYNOPSIS
B<DEF:>I<E<lt>vnameE<gt>>=I<E<lt>rrdfileE<gt>>:I<E<lt>ds-nameE<gt>>:I<E<lt>CFE<gt>>[:step=I<E<lt>stepE<gt>>][:start=I<E<lt>timeE<gt>>][:end=I<E<lt>timeE<gt>>]
These three instructions collect the data out of the B<RRD> files,
optionally altering it (think of a bytes to bits conversion) and
if desired you can define variables containing useful information
-such as maximum, mininimum etcetera. Two of the instructions use
+such as maximum, minimum etcetera. Two of the instructions use
a language called B<RPN> which is described in its own manual page.
=head1 DEF
I<vname> can then be used throughout the rest of the script. By
default, an B<RRA> which contains the correct consolidated data
at an appropriate resolution will be chosen. The resolution can
-be overriden with the L<--step|rrdgraph/item_Time> option.
-The resolution can again be overriden by specifying the B<step size>.
+be overridden with the L<--step|rrdgraph/item_Time> option.
+The resolution can again be overridden by specifying the B<step size>.
The time span of this data is the same as for the graph by default,
you can override this by specifying B<start and end>. Remember to
escape colons in the time specification!
=include name
-=head1 SYNOPSYS
+=head1 SYNOPSIS
B<rrdtool graph /home/httpd/html/test.png --img-format PNG \>
=include name
-=head1 SYNOPSYS
+=head1 SYNOPSIS
=over 4
=item *
-B<%U, %W> week number of the current year with either the first sunday or
-the first monday determining the first week
+B<%U, %W> week number of the current year with either the first Sunday or
+the first Monday determining the first week
=item *
week. Make sure to notify the viewer you did so...
The offset will be valid until the next B<SHIFT> command, which
can have an offset of zero to restore normal graphing.
-As with the other grapher elements, you can specify a number or
+As with the other graphing elements, you can specify a number or
a variable here.
=back
=include name
-=head1 SYNOPSYS
+=head1 SYNOPSIS
I<E<lt>RPN expressionE<gt>> :=
I<E<lt>vnameE<gt>>|I<E<lt>operatorE<gt>>|I<E<lt>valueE<gt>>
=item MAXIMUM, MINIMUM, AVERAGE
Return the corresponding value, MAXIMUM and MINIMUM also return
-the first occurance of that value in the time component.
+the first occurrence of that value in the time component.
Example: C<VDEF:avg=mydata,AVERAGE>
Return the last,first value including its time. The time for
FIRST is actually the start of the corresponding interval, where
-LASTs time component returns the end of the corresponding interval.
+the LAST time component returns the end of the corresponding interval.
Example: C<VDEF:first=mydata,FIRST>
=item TOTAL
-Returns the rate from each defined timeslot multiplied with the
+Returns the rate from each defined time slot multiplied with the
step size. This can for instance return total bytes transfered
when you have logged bytes per second. The time component returns
the amount of seconds
=head1 NAME
-rrdtool info - extract header information from an rrd
+rrdtool info - extract header information from an RRD
=for html <div align="right"><a href="rrdinfo.pdf">PDF</a> version.</div>
=head1 DESCRIPTION
-The B<info> function prints the header information from an rrd in
+The B<info> function prints the header information from an RRD in
a parsing friendly format.
Check L<rrdcreate> if you are uncertain about the meaning of the
individual keys.
-The B<info> function will always report the true version of the B<RRD>;
-unlike B<dump> which will generate a current version (0002) xml dump for
-older version (0001) files (although the version of the B<RRD> is unchanged).
-
=head1 EXAMPLE
-This is the output generated by running B<info> on a simple rrd which
-contains two datasources and one rra. Note that the number after the
+This is the output generated by running B<info> on a simple RRD which
+contains two data sources and one RRA. Note that the number after the
I<last_update> keyword is in seconds since 1970. The string B<NaN>
-stands for I<*UNKNOWN*> data. In the example it means that this rrd
+stands for I<*UNKNOWN*> data. In the example it means that this RRD
has neither minimum not maximum values defined for either of its
-datasources.
+data sources.
- filename = "randome.rrd"
+ filename = "random.rrd"
rrd_version = "0001"
step = 300
last_update = 955892996
=head1 NOTES
-The new .rrd file, with the modified RRAm, is written to the file
+The new .rrd file, with the modified RRAs, is written to the file
B<resize.rrd> in the current directory. The original .rrd file is not
modified.
=item B<--range-check>|B<-r>
Make sure the values in the RRAs do not exceed the limits defined for
-the different datasources.
+the different data sources.
=item B<--force-overwrite>|B<-f>
-Allows B<rrdtool> to overwrite the destination B<RRD>.
+Allows B<RRDtool> to overwrite the destination B<RRD>.
=back
Do not use C<getopt> or C<getopt_long> in *C<_r> (directly or
indirectly)
-C<getopt> uses global variables and behaves badly in a multithreaded
+C<getopt> uses global variables and behaves badly in a multi-threaded
application when called concurrently. Instead provide a *_r function
taking all options as function parameters. You may provide argc and
**argv arguments for variable length argument lists. See
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 a efficient and
-systematic manner. This is where B<rrdtool> kicks in. It lets you
+systematic manner. This is where B<RRDtool> kicks in. It lets you
I<log and analyze> the data you gather from all kinds of data-sources
-(B<DS>). The data analysis part of rrdtool is based on the ability to
+(B<DS>). The data analysis part of RRDtool 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
-functionality of the Round Robin Database Tool (rrdtool). For a more
+functionality of the Round Robin Database Tool (RRDtool). For a more
detailed description of how to use the individual functions of the
-B<rrdtool> check the corresponding man page.
+B<RRDtool> check the corresponding man page.
-For an introduction to the usage of rrdtool make sure you check L<rrdtutorial>.
+For an introduction to the usage of RRDtool make sure you check L<rrdtutorial>.
=head2 FUNCTIONS
While the man pages talk of command line switches you have to set in
-order to make B<rrdtool> work it is important to note that the
-B<rrdtool> can be 'remote controlled' through a set of pipes. This
+order to make B<RRDtool> work it is important to note that the
+B<RRDtool> can be remotely controlled through a set of pipes. This
saves a considerable amount of startup time when you plan to make
-B<rrdtool> do a lot of things quickly. Check the section on L<"Remote
+B<RRDtool> do a lot of things quickly. Check the section on L<"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,
+for RRDtool which allow you to use it directly from perl, python, tcl,
php, ...
=over 8
=item B<dump>
Dump the contents of an RRD in plain ASCII. In connection with
-restore you can use it to transport an rrd from one architecture to another.
+restore you can use it to transport an RRD from one architecture to another.
Check L<rrddump>.
=item B<restore>
-Restore an RRD in XML format to a binary rrd ... Check L<rrdrestore>
+Restore an RRD in XML format to a binary RRD ... Check L<rrdrestore>
=item B<fetch>
Get data for a certain time period from a RRD. The graph function
-uses fetch to retrieve its data from an rrd. Check L<rrdfetch>.
+uses fetch to retrieve its data from an RRD. Check L<rrdfetch>.
=item B<tune>
=item B<rrdcgi>
-This is a standalone tool for producing rrd graphs on the fly. Check
+This is a standalone tool for producing RRD graphs on the fly. Check
L<rrdcgi>.
=back
When monitoring the state of a system, it is convenient to have the
data available at a constant interval. Unfortunately you may not
always be able to fetch data at exactly the time you want
-to. Therefore B<rrdtool> lets you update the logfile at any time you
+to. Therefore B<RRDtool> lets you update the logfile at any time you
want. It will automatically interpolate the value of the data-source
(B<DS>) at the latest official time-slot and write this value to the
log. The value you have supplied is stored as well and is also taken
could do this by simply storing the data in 1 minute interval, for one
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. B<rrdtool> offers a solution to this of this
+covering the whole year. B<RRDtool> offers a solution to this of this
problem through its data consolidation feature. When setting up
an Round Robin Database (B<RRD>), you can define at which interval
this consolidation should occur, and what consolidation function
space.
It works like this: If you want to store 1000 values in 5 minute
-interval, B<rrdtool> will allocate space for 1000 data values and a
+interval, B<RRDtool> will allocate space for 1000 data values and a
header area. In the header it will store a pointer telling
which one of the values in the storage area was last written to. New
values are written to the Round Robin Archive in a ... you guess it
As mentioned earlier, the B<RRD> stores data at a constant
interval. Now it may happen that no new data is available when a
value has to be written to the B<RRD>. Data acquisition may not be
-possible for one reason or an other. The B<rrdtool> handles these
+possible for one reason or an other. The B<RRDtool> handles these
situations by storing an I<*UNKNOWN*> value into the database. The
value 'I<*UNKNOWN*>' is supported through all the functions of the
database. When consolidating the amount of I<*UNKNOWN*> data is
=item Graphing
-The B<rrdtool> also allows one to generate reports in numerical and
+The B<RRDtool> also allows one to generate reports in numerical and
graphical form based on the data stored in one or several
B<RRD>s. The graphing feature is fully configurable. Size, color and
contents of the graph can be defined freely. Check L<rrdgraph>
by Jake Brutlag E<lt>jakeb@corp.webtv.netE<gt>
-The B<rrdtool> also provides the building blocks for near real-time
+The B<RRDtool> also provides the building blocks for near real-time
aberrant behavior detection. These components include:
=over 12
Each of these components is briefly described:
-Holt-Winters Time Series Forecasting Algorithm is an online, or incremental,
+Holt-Winters Time Series forecasting algorithm is an on-line, or incremental,
algorithm that adaptively predicts future observations in a time series. It's
forecast is the sum of three components: a baseline (or intercept), a linear
trend over time (or slope), and a seasonal coefficient (a periodic effect,
The measure of deviation is a seasonal weighted absolute deviation. The term
I<seasonal> means deviation is measured separately for each time point in the
-seasonal cycle. As with Holt-Winters Forecasting, deviation is predicted using
+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
exponential smoothing. Confidence bands for the observed time series are generated
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 (i.e. 5 violations
-during the past 45 minutes with a value observed every 5 mintues).
+during the past 45 minutes with a value observed every 5 minutes).
This functionality is embedded in a set of related B<RRAs>. In particular, a FAILURES
-B<RRA> logs potential failures. Presumably a front-end application to B<rrdtool> can
+B<RRA> logs potential failures. Presumably a front-end application to B<RRDtool> can
utilize this B<RRA> to initiate real-time alerts if that is desired.
You can find a detailed description of how to set this up in L<rrdcreate>.
=head2 REMOTE CONTROL
-When you start B<rrdtool> with the command line option 'B<->', it waits
+When you start B<RRDtool> with the command line option 'B<->', it waits
for input via standard in. With this feature you can improve
-performance by attaching B<rrdtool> to another process (mrtg is one
-example) through a set of pipes. Over the pipes B<rrdtool> accepts the
-same arguments as on the command line and some spezial commands like
+performance by attaching B<RRDtool> to another process (MRTG is one
+example) through a set of pipes. Over the pipes B<RRDtool> accepts the
+same arguments as on the command line and some special commands like
B<quit, cd, mkdir> and B<ls>. For detail helps about the server commands
type :
rrdtool help cd|mkdir|ls|quit
-When a command is completed, rrdtool will print the string 'C<OK>',
+When a command is completed, RRDtool will print the string 'C<OK>',
followed by timing information of the form B<u:>I<usertime>
B<s:>I<systemtime> both values are running totals of seconds
-since rrdtool was started. If an error occurs, a line of the
-form 'C<ERROR:> I<Description of error>' will be printed. B<rrdtool>
+since RRDtool was started. If an error occurs, a line of the
+form 'C<ERROR:> I<Description of error>' will be printed. B<RRDtool>
will not abort if possible, but follow the ERROR line with an OK line.
-If a B<workdir> is spezified and the UID is 0, rrdtool will do a
-chroot to the workdir. If the UID is not 0, rrdtool only changes the
+If a B<workdir> is specified and the UID is 0, RRDtool will do a
+chroot to the workdir. If the UID is not 0, RRDtool only changes the
current directory to B<workdir>.
=head2 RRD Server
If you want to create a RRD-Server, you must choose a TCP/IP Service
number and add them to I</etc/services> like this:
- rrdsrv 13900/tcp # rrd server
+ rrdsrv 13900/tcp # RRD server
-Attention: the tcp port 13900 isn't official registered for rrdsrv. You
+Attention: the TCP port 13900 isn't official registered for rrdsrv. You
can use any unused port in your services, but the server an the client
system must use the same port of curse.
-After this you can add the rrdtool as meta-server to I</etc/inetd.conf>
+After this you can add the RRDtool as meta-server to I</etc/inetd.conf>
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 correct, you can access the server with perl sockets, tools
-like netcat or a quickhack test 'telnet localhost rrdsrv'.
+like netcat or a quick test 'telnet localhost rrdsrv'.
=item S<B<--heartbeat>|B<-h> I<ds-name>:I<heartbeat>>
modify the I<heartbeat> of a data source. By setting this to a high
-value the rrd will accept things like one value per day ...
+value the RRD will accept things like one value per day ...
=item S<B<--minimum>|B<-i> I<ds-name>:I<min>>
for the specified data source; that is, forget all it is has learn.
Specifically, for the HWPREDICT B<RRA>, it sets the intercept and slope
coefficients to unknown. For the SEASONAL B<RRA>, it sets all seasonal
-coefficients to unknown. For the DEVSEASONL B<RRA>, it sets all seasonal
+coefficients to unknown. For the DEVSEASONAL B<RRA>, it sets all seasonal
deviation coefficients to unknown. For the FAILURES B<RRA>, it erases
the violation history. Note that reset does not erase past predictions
(the values of the HWPREDICT B<RRA>), predicted deviations (the values of the
of smoothing is not data source specific. This means that utilizing
reset for one data source will delay running the smoothing algorithm
for all data sources in the file. This is unlikely to have serious
-consequences, unless the data being collected for the non-reset data soures
+consequences, unless the data being collected for the non-reset data sources
is unusually volatile during the reinitialization period of the reset
data source.
Set the minimum required heartbeat for data sources 'in', 'out'
and 'through' to 10000 seconds which is a little over one day in data.rrd.
-This would allow to feed old data from mrtg-2.0 right into
-rrdtool without generating *UNKNOWN* entries.
+This would allow to feed old data from MRTG-2.0 right into
+RRDtool without generating *UNKNOWN* entries.
=head1 EXAMPLE 2
C<rrdtool tune monitor.rrd --window-length 5 --failure-threshold 3>
If the FAILURES B<RRA> is implicitly created, the default window-length is 9 and
-the default failure-thresold is 7. This command now defines a failure as 3 or more
+the default failure-threshold is 7. This command now defines a failure as 3 or more
violations in a temporal window of 5 time points.
=head1 AUTHOR
=for html <div align="right">Versión <a href="rrdtutorial.es.pdf">PDF</a></div>
-=for html <div align="right"><a href="rrdtutorial.html">Enlish</a></div>
+=for html <div align="right"><a href="rrdtutorial.html">English</a></div>
=head1 DESCRIPTION / DESCRIPCIÓN
element. As we are on a circle there is no beginning nor an end, you can
go on and on. After a while, all the available places will be used and
the process automatically reuses old locations. This way, the database
-will not grow in size and therefore requires no mainenance.
+will not grow in size and therefore requires no maintenance.
RRDtool works with with Round Robin Databases (RRDs). It stores and retrieves
data from them.
and it tells you that the car has moved 12345 KM until that moment.
At 12:10 you look again, it reads 12357 KM. This means you have
traveled 12 KM in five minutes. A scientist would translate that
-into meters per second and this makes a nice comparison towards the
+into meters per second and this makes a nice comparison toward the
problem of (bytes per five minutes) versus (bits per second).
We traveled 12 kilometers which is 12000 meters. We did that in five
get a totally different picture. You would see the same values on the
average and maximum graphs (provided I measured every 300 seconds).
You would be able to see when I stopped, when I was in top gear, when
-I drove over fast hiways etc. The granularity of the data is much
+I drove over fast highways etc. The granularity of the data is much
higher, so you can see more. However, this takes 12 samples per hour,
or 288 values per day, so it would be too much to keep for a long
period of time. Therefore we average it, eventually to one value per
so called hot-spot and the exhaust. These values are not counters.
If I take the difference of the two samples and divide that by
300 seconds I would be asking for the temperature change per second.
-Hopefully this is zero! If not, the computerroom is on fire :)
+Hopefully this is zero! If not, the computer room is on fire :)
So, what can we do ? We can tell RRDtool to store the values we measure
directly as they are (this is not entirely true but close enough). The
=item *
-Line B is of type gauge. These are "real" values so they should match
+Line B is of type GAUGE. These are "real" values so they should match
what we put in: a sort of a wave.
=item *
=head1 NAME
-rrdtool update - Store a new set of values into the rrd
+rrdtool update - Store a new set of values into the RRD
=for html <div align="right"><a href="rrdupdate.pdf">PDF</a> version.</div>
The template switch allows you to specify which data sources you are
going to update and in which order. If the data sources specified in
-the template are not available in the rrd file, the update process
+the template are not available in the RRD file, the update process
will abort with an error message.
While it appears possible with the template switch to update data sources
from the template the I<*UNKNOWN*> value.
Do not specify a value for a COMPUTE B<DST> in the B<update> function. If
-this is done accidently (and this can only be done using the template switch),
+this is done accidentally (and this can only be done using the template switch),
B<RRDtool> will ignore the value specified for the COMPUTE B<DST>.
=item B<N>|I<timestamp>B<:>I<value>[B<:>I<value>...]
B<DERIVE> or B<ABSOLUTE>.
The remaining elements of the argument are DS updates. The order of this list is
-the same as the order the data sources were defined in the rra.
+the same as the order the data sources were defined in the RRA.
If there is no data for a certain data-source, the letter
B<U> (eg. N:0.1:U:1) can be defined.
* parsetime.c - parse time for at(1)
* Copyright (C) 1993, 1994 Thomas Koenig
*
- * modifications for english-language times
+ * modifications for English-language times
* Copyright (C) 1993 David Parsons
*
* A lot of modifications and extensions
/* File scope variables */
-/* context dependant list of specials for parser to recognize,
+/* context dependent list of specials for parser to recognize,
* required for us to be able distinguish between 'mon' as 'month'
* and 'mon' as 'monday'
*/
static int need; /* scanner - need to advance to next argument */
static char *sc_token=NULL; /* scanner - token buffer */
-static size_t sc_len; /* scanner - lenght of token buffer */
+static size_t sc_len; /* scanner - length of token buffer */
static int sc_tokid; /* scanner - token id */
static int need_to_free = 0; /* means that we need deallocating memory */
* should return TIME_OK (aka NULL) or pointer to the error message,
* and should be called like this: try(func(args));
*
- * if the try is not successfull it will reset the token pointer ...
+ * if the try is not successful it will reset the token pointer ...
*
* [NOTE: when try(...) is used as the only statement in the "if-true"
* part of the if statement that also has an "else" part it should be
* either enclosed in the curly braces (despite the fact that it looks
- * like a single statement) or NOT follwed by the ";"]
+ * like a single statement) or NOT followed by the ";"]
*/
#define try(b) { \
char *_e; \
/*
* ve() and e() are used to set the return error,
- * the most aprropriate use for these is inside panic(...)
+ * the most appropriate use for these is inside panic(...)
*/
#define MAX_ERR_MSG_LEN 1024
static char errmsg[ MAX_ERR_MSG_LEN ];
}
/* Compare S1 and S2, ignoring case, returning less than, equal to or
- greater than zero if S1 is lexiographically less than,
+ greater than zero if S1 is lexicographically less than,
equal to or greater than S2. -- copied from GNU libc*/
static int
mystrcasecmp (s1, s2)
/*
- * expect2() gets a token and complins if it's not the token we want
+ * expect2() gets a token and complains if it's not the token we want
*/
static char *
expect2(int desired, char *complain_fmt, ...)
/*
* plus_minus() is used to parse a single NUMBER TIME-UNIT pair
* for the OFFSET-SPEC.
- * It allso applies those m-guessing euristics.
+ * It also applies those m-guessing heuristics.
*/
static char *
plus_minus(struct rrd_time_value *ptv, int doop)
token();
}
- /* flip months and days for european timing
+ /* flip months and days for European timing
*/
if (sep == DOT) {
long x = mday;
try(tod(ptv))
break;
- /* evil coding for TEATIME|NOON|MIDNIGHT - we've initialised
+ /* evil coding for TEATIME|NOON|MIDNIGHT - we've initialized
* hr to zero up above, then fall into this case in such a
* way so we add +12 +4 hours to it for teatime, +12 hours
* to it for noon, and nothing at all for midnight, then
*****************************************************************************
* $Id$
* $Log$
+ * Revision 1.8 2004/05/18 18:53:03 oetiker
+ * big spell checking patch -- slif@bellsouth.net
+ *
* Revision 1.7 2003/11/11 19:46:21 oetiker
* replaced time_value with rrd_time_value as MacOS X introduced a struct of that name in their standard headers
*
if(rrd_open(filename,&in_file,&rrd, RRD_READONLY)==-1)
return(-1);
- /* when was the realy last update of this file ? */
+ /* when was the really last update of this file ? */
if (((*ds_namv) = (char **) malloc(rrd.stat_head->ds_cnt * sizeof(char*)))==NULL){
rrd_set_error("malloc fetch ds_namv array");
*****************************************************************************
* $Id$
* $Log$
+ * Revision 1.5 2004/05/18 18:53:03 oetiker
+ * big spell checking patch -- slif@bellsouth.net
+ *
* Revision 1.4 2003/02/13 07:05:27 oetiker
* Find attached the patch I promised to send to you. Please note that there
* are three new source files (src/rrd_is_thread_safe.h, src/rrd_thread_safe.c
converter(GAUGE,DST_GAUGE)
converter(DERIVE,DST_DERIVE)
converter(COMPUTE,DST_CDEF)
- rrd_set_error("unknown data aquisition function '%s'",string);
+ rrd_set_error("unknown data acquisition function '%s'",string);
return(-1);
}
"%!PS-Adobe-3.0 EPSF-3.0\n"
"%%Creator: RRDtool 1.1.x, Tobias Oetiker, http://tobi.oetiker.ch\n"
/* can't like weird chars here */
- "%%Title: (RRDTool output)\n"
+ "%%Title: (RRDtool output)\n"
"%%DocumentData: Clean7Bit\n"
"", state->fp);
fprintf(state->fp, "%%%%BoundingBox: 0 0 %d %d\n",
}
}
- /* lets see if the required data source is realy there */
+ /* lets see if the required data source is really there */
for(ii=0;ii<im->gdes[i].ds_cnt;ii++){
if(strcmp(im->gdes[i].ds_namv[ii],im->gdes[i].ds_nam) == 0){
im->gdes[i].ds=ii; }