rrdcreate (1)
Leading comments
Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) Standard preamble: ========================================================================
NAME
rrdcreate - Set up a new Round Robin DatabaseSYNOPSIS
rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DESCRIPTION
The create function of RRDtool lets you set up new Round Robin Database (filename
The name of the--start|-b start time (default: now - 10s)
Specifies the time in seconds since 1970-01-01See also AT-STYLE
If one or more source files is used to pre-fill the new
--step|-s step (default: 300 seconds)
Specifies the base interval in seconds with which data will be fed into the--no-overwrite|-O
Do not clobber an existing file of the same name.--daemon|-d address
Address of the rrdcached daemon. For a list of accepted formats, see the -l option in the rrdcached manual.
rrdtool create --daemon unix:/var/run/rrdcached.sock /var/lib/rrd/foo.rrd I<other options>
[--template|-t template-file]
Specifies a templateAdditional
--source|-r source-file
One or more sourcePrefilling is done by matching up
In other words: A best effort is made to preserve data during prefilling. Also, pre-filling of RRAs may only be possible for certain kinds of
When ``pre-filling'' a
If this automatic data selection is not desired, the
Prefilling currently only works reliably for RRAs using one of the classic consolidation functions, that is one of:
Note that the act of prefilling during create is similar to a lot of the operations available via the tune command, but using create syntax.
DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments
A single ds-name is the name you will use to reference this particular data source from an
For
In order to decide which data source type to use, review the definitions that follow. Also consult the section on ``
- GAUGE
- is for things like temperatures or number of people in a room or the value of a RedHat share.
- COUNTER
-
is for continuous incrementing counters like the ifInOctets counter in
a router. The COUNTERdata 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 the 32bit or 64bit border and acts accordingly by adding an appropriate value to the result.
- DCOUNTER
-
the same as COUNTER, but for quantities expressed as double-precision floating point number. Could be used to track quantities that increment by non-integer numbers, i.e. number of seconds that some routine has taken to run, total weight processed by some technology equipment etc. The only substantial difference is thatDCOUNTERcan either be upward counting or downward counting, but not both at the same time. The current direction is detected automatically on the second non-undefined counter update and any further change in the direction is considered a reset. The new direction is determined and locked in by the second update after reset and its difference to the value at reset.
- DERIVE
-
will store the derivative of the line going from the last to the
current value of the data source. This can be useful for gauges, for
example, to measure the rate of people entering or leaving a
room. Internally, derive works exactly like COUNTERbut without overflow checks. So if your counter does not reset at 32 or 64 bit you might want to useDERIVEand combine it with aMINvalue of 0.
- DDERIVE
-
the same as DERIVE, but for quantities expressed as double-precision floating point number.NOTEonCOUNTERvsDERIVE
by Don Baarda <don.baarda@baesystems.com>
If you cannot tolerate ever mistaking the occasional counter reset for a legitimate counter wrap, and would prefer ``Unknowns'' for all legitimate counter wraps and resets, always use
DERIVEwith min=0. Otherwise, usingCOUNTERwith a suitable max will return correct values for all legitimate counter wraps, mark some counter resets as ``Unknown'', but can mistake some counter resets for a legitimate counter wrap.For a 5 minute step and 32-bit counter, the probability of mistaking a counter reset for a legitimate wrap is arguably about 0.8% per 1Mbps of maximum bandwidth. Note that this equates to 80% for 100Mbps interfaces, so for high bandwidth interfaces and a 32bit counter,
DERIVEwith min=0 is probably preferable. If you are using a 64bit counter, just about any max setting will eliminate the possibility of mistaking a reset for a counter wrap. - ABSOLUTE
- is for counters which get reset upon reading. This is used for fast counters which tend to overflow. So instead of reading them normally you reset them after every read to make sure you have a maximum time available before the next overflow. Another usage is for things you count like number of messages since the last update.
- COMPUTE
-
is for storing the result of a formula applied to other data sources
in the RRD. This data source is not supplied a value on update, but rather its Primary Data Points (PDPs) are computed from the PDPs of the data sources according to the rpn-expression that defines the formula. Consolidation functions are then applied normally to the PDPs of theCOMPUTEdata source (that is the rpn-expression is only applied to generate PDPs). In database software, such data sets are referred to as ``virtual'' or ``computed'' columns.
heartbeat defines the maximum number of seconds that may pass between two updates of this data source before the value of the data source is assumed to be *UNKNOWN*.
min and max define the expected range values for data supplied by a data source. If min and/or max are specified any value outside the defined range will be regarded as *UNKNOWN*. If you do not know or care about min and max, set them to U for unknown. Note that min and max always refer to the processed values of the
If information on minimal/maximal expected values is available, always set the min and/or max properties. This will help RRDtool in doing a simple sanity check on the data supplied when running update.
rpn-expression defines the formula used to compute the PDPs of a
When pre-filling the new
For example, the
DS:a=b[2]:GAUGE:120:0:U
specifies that the
RRA:CF:cf arguments
The purpose of an When data is entered into an
The data is also processed with the consolidation function (
- AVERAGE
- the average of the data points is stored.
- MIN
- the smallest of the data points is stored.
- MAX
- the largest of the data points is stored.
- LAST
- the last data points is used.
Note that data aggregation inevitably leads to loss of precision and information. The trick is to pick the aggregate function such that the interesting properties of your data is kept across the aggregation process.
The format of
xff The xfiles factor defines what part of a consolidation interval may be made up from *UNKNOWN* data while the consolidated value is still regarded as known. It is given as the ratio of allowed *UNKNOWN* PDPs to the number of PDPs in the interval. Thus, it ranges from 0 to 1 (exclusive).
steps defines how many of these primary data points are used to build a consolidated data point which then goes into the archive. See also ``
rows defines how many generations of data values are kept in an
Aberrant Behavior Detection with Holt-Winters Forecasting
In addition to the aggregate functions, there are a set of specialized functions that enable RRDtool to provide data smoothing (via the Holt-Winters forecasting algorithm), confidence bands, and the flagging aberrant behavior in the data source time series:- *
-
RRA:HWPREDICT:rows:alpha:beta:seasonal period[:rra-num]
- *
-
RRA:MHWPREDICT:rows:alpha:beta:seasonal period[:rra-num]
- *
-
RRA:SEASONAL:seasonal period:gamma:rra-num[:smoothing-window=fraction]
- *
-
RRA:DEVSEASONAL:seasonal period:gamma:rra-num[:smoothing-window=fraction]
- *
-
RRA:DEVPREDICT:rows:rra-num
- *
-
RRA:FAILURES:rows:threshold:window length:rra-num
These RRAs differ from the true consolidation functions in several ways. First, each of the
The predicted, or smoothed, values are stored in the
The predicted deviations are stored in
The
In order to simplify the creation for the novice user, in addition to supporting explicit creation of the
rows specifies the length of the
seasonal period specifies the number of primary data points in a seasonal cycle. If
alpha is the adaption parameter of the intercept (or baseline) coefficient in the Holt-Winters forecasting algorithm. See rrdtool for a description of this algorithm. 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 means that past history carries greater weight in predicting the baseline component.
beta is the adaption parameter of the slope (or linear trend) coefficient in the Holt-Winters forecasting algorithm. beta must lie between 0 and 1 and plays the same role as alpha with respect to the predicted linear trend.
gamma is the adaption parameter of the seasonal coefficients in the Holt-Winters forecasting algorithm (
If
smoothing-window specifies the fraction of a season that should be averaged around each point. By default, the value of smoothing-window is 0.05, which means each value in
rra-num provides the links between related RRAs. If
- *
-
HWPREDICTrra-num is the index of theSEASONALRRA.
- *
-
SEASONALrra-num is the index of theHWPREDICTRRA.
- *
-
DEVPREDICTrra-num is the index of theDEVSEASONALRRA.
- *
-
DEVSEASONALrra-num is the index of theHWPREDICTRRA.
- *
-
FAILURESrra-num is the index of theDEVSEASONALRRA.
threshold is the minimum number of violations (observed values outside the confidence bounds) within a window that constitutes a failure. If the
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
STEP, HEARTBEAT, and Rows As Durations
Traditionally RRDtool specified
rrdtool create power.rrd \ --start now-2h --step 1 \ DS:watts:GAUGE:300:0:24000 \ RRA:AVERAGE:0.5:1:864000 \ RRA:AVERAGE:0.5:60:129600 \ RRA:AVERAGE:0.5:3600:13392 \ RRA:AVERAGE:0.5:86400:3660
creates a database of power values collected once per second, with a five minute (300 second) heartbeat, and four
Step, heartbeat, and
Scaled step and heartbeat values (which are natively durations in seconds) are used directly, while consolidation function row arguments are divided by their step to produce the number of rows.
With this feature the same specification as above can be written as:
rrdtool create power.rrd \ --start now-2h --step 1s \ DS:watts:GAUGE:5m:0:24000 \ RRA:AVERAGE:0.5:1s:10d \ RRA:AVERAGE:0.5:1m:90d \ RRA:AVERAGE:0.5:1h:18M \ RRA:AVERAGE:0.5:1d:10y
The HEARTBEAT and the STEP
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:RRDtool gets fed samples/updates at arbitrary times. From these it builds Primary Data Points (PDPs) on every ``step'' interval. The PDPs are then accumulated into the RRAs.
The ``heartbeat'' defines the maximum acceptable interval between samples/updates. If the interval between samples is less than ``heartbeat'', then an average rate is calculated and applied for that interval. If the interval between samples is longer than ``heartbeat'', then that entire interval is considered ``unknown''. Note that there are other things that can make a sample interval ``unknown'', such as the rate exceeding limits, or a sample that was explicitly marked as unknown.
The known rates during a
The ``heartbeat'' can be short (unusual) or long (typical) relative to the ``step'' interval between PDPs. A short ``heartbeat'' means you require multiple samples per
time| axis| begin__|00| |01| u|02|----* sample1, restart "hb"-timer u|03| / u|04| / u|05| / u|06|/ "hbt" expired u|07| |08|----* sample2, restart "hb" |09| / |10| / u|11|----* sample3, restart "hb" u|12| / u|13| / step1_u|14| / u|15|/ "swt" expired u|16| |17|----* sample4, restart "hb", create "pdp" for step1 = |18| / = unknown due to 10 "u" labled secs > 0.5 * step |19| / |20| / |21|----* sample5, restart "hb" |22| / |23| / |24|----* sample6, restart "hb" |25| / |26| / |27|----* sample7, restart "hb" step2__|28| / |22| / |23|----* sample8, restart "hb", create "pdp" for step1, create "cdp" |24| / |25| /
graphics by vladimir.lavrov@desy.de.
HOW TO MEASURE
Here are a few hints on how to measure:- Temperature
-
Usually you have some type of meter you can read to get the temperature.
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
GAUGEdata source type for this. RRDtool will then record your reading together with the time.
- Mail Messages
-
Assume you have a method to count the number of messages transported by
your mail server in a certain amount of time, giving you data like '5
messages in the last 65 seconds'. If you look at the count of 5 like an
ABSOLUTEdata type you can simply update theRRDwith 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 from RRDtool for the day in question and multiply this number with the number of seconds in a day. Because all math is run with Doubles, the precision should be acceptable.
- It's always a Rate
-
RRDtool stores rates in amount/second for COUNTER, DERIVE, DCOUNTER, DDERIVEandABSOLUTEdata. When you plot the data, you will get on the y axis amount/second which you might be tempted to convert to an absolute amount by multiplying by the delta-time between the points. RRDtool plots continuous data, and as such is not appropriate for plotting absolute amounts as for example ``total bytes'' sent and received in a router. What you probably want is plot rates that you can scale to bytes/hour, for example, or plot absolute amounts with another tool that draws bar-plots, where the delta-time is clear on the plot for each point (such that when you read the graph you see for exampleGBon the y axis, days on the x axis and one bar for each day).
EXAMPLE
rrdtool create temperature.rrd --step 300 \ DS:temp:GAUGE:600:-273:5000 \ RRA:AVERAGE:0.5:1:1200 \ RRA:MIN:0.5:12:2400 \ RRA:MAX:0.5:12:2400 \ RRA:AVERAGE:0.5:12:2400
This sets up an
A few archive areas are also defined. The first stores the temperatures supplied for 100 hours (1'200 * 300 seconds = 100 hours). The second
EXAMPLE 2
rrdtool create monitor.rrd --step 300 \ DS:ifOutOctets:COUNTER:1800:0:4294967295 \ RRA:AVERAGE:0.5:1:2016 \ RRA:HWPREDICT:1440:0.1:0.0035:288
This example is a monitor of a router interface. The first
The seasonal cycle is one day (288 data points at 300 second intervals), and the seasonal adaption parameter will be set to 0.1. The
The same
rrdtool create monitor.rrd --step 5m \ DS:ifOutOctets:COUNTER:30m:0:4294967295 \ RRA:AVERAGE:0.5:1:2016 \ RRA:HWPREDICT:5d:0.1:0.0035:1d:3 \ RRA:SEASONAL:1d:0.1:2 \ RRA:DEVSEASONAL:1d:0.1:2 \ RRA:DEVPREDICT:5d:5 \ RRA:FAILURES:1d:7:9:5
Of course, explicit creation need not replicate implicit create, a number of arguments could be changed.
EXAMPLE 3
rrdtool create proxy.rrd --step 300 \ DS:Requests:DERIVE:1800:0:U \ DS:Duration:DERIVE:1800:0:U \ DS:AvgReqDur:COMPUTE:Duration,Requests,0,EQ,1,Requests,IF,/ \ RRA:AVERAGE:0.5:1:2016
This example is monitoring the average request duration during each 300 sec interval for requests processed by a web proxy during the interval. In this case, the proxy exposes two counters, the number of requests processed since boot and the total cumulative duration of all processed requests. Clearly these counters both have some rollover point, but using the
In the