Aberrant Behavior Detection support. A brief overview added to rrdtool.pod.
[rrdtool.git] / doc / rrdcreate.pod
1 =head1 NAME
2
3 rrdtool create - Set up a new Round Robin Database
4
5 =for html <div align="right"><a href="rrdcreate.pdf">PDF</a> version.</div>
6
7 =head1 SYNOPSIS
8
9 B<rrdtool> B<create> I<filename> 
10 S<[B<--start>|B<-b> I<start time>]> 
11 S<[B<--step>|B<-s> I<step>]> 
12 S<[B<DS:>I<ds-name>B<:>I<DST>B<:>I<heartbeat>B<:>I<min>B<:>I<max>]>
13 S<[B<RRA:>I<CF>B<:>I<cf arguments>]>
14
15 =head1 DESCRIPTION
16
17 The create function of the RRDtool lets you set up new
18 Round Robin Database (B<RRD>) files. 
19 The file is created at its final, full size and filled
20 with I<*UNKNOWN*> data.
21
22 =over 8
23
24 =item I<filename>
25
26 The name of the B<RRD> you want to create. B<RRD> files should end
27 with the extension F<.rrd>. However, B<rrdtool> will accept any
28 filename.
29
30 =item B<--start>|B<-b> I<start time> (default: now - 10s)
31
32 Specifies the time in seconds since 1970-01-01 UTC when the first
33 value should be added to the B<RRD>. B<rrdtool> will not accept
34 any data timed before or at the time specified.
35
36 See also AT-STYLE TIME SPECIFICATION section in the
37 I<rrdfetch> documentation for more ways to specify time.
38
39 =item B<--step>|B<-s> I<step> (default: 300 seconds)
40
41 Specifies the base interval in seconds with which data will be fed
42 into the B<RRD>.
43
44 =item B<DS:>I<ds-name>B<:>I<DST>B<:>I<heartbeat>B<:>I<min>B<:>I<max>
45
46 A single B<RRD> can accept input from several data sources (B<DS>).
47 (e.g. Incoming and Outgoing traffic on a specific communication
48 line). With the B<DS> configuration option you must define some basic
49 properties of each data source you want to use to feed the B<RRD>.
50
51 I<ds-name> is the name you will use to reference this particular data
52 source from an B<RRD>. A I<ds-name> must be 1 to 19 characters long in
53 the characters [a-zA-Z0-9_].
54
55 I<DST> defines the Data Source Type. See the section on "How to Measure" below for further insight.
56 The Datasource Type must be onw of the following:
57
58 =over 4
59
60 =item B<GAUGE> 
61
62 is for things like temperatures or number of people in a
63 room or value of a RedHat share.
64
65 =item B<COUNTER>
66
67 is for continuous incrementing counters like the
68 InOctets counter in a router. The B<COUNTER> data source assumes that
69 the counter never decreases, except when a counter overflows.  The update
70 function takes the overflow into account.  The counter is stored as a
71 per-second rate. When the counter overflows, RRDtool checks if the overflow happened at
72 the 32bit or 64bit border and acts accordingly by adding an appropriate value to the result.
73
74 =item B<DERIVE>
75
76 will store the derivative of the line going from the last to the
77 current value of the data source. This can be useful for gauges, for
78 example, to measure the rate of people entering or leaving a
79 room. Internally, derive works exaclty like COUNTER but without
80 overflow checks. So if your counter does not reset at 32 or 64 bit you
81 might want to use DERIVE and combine it with a MIN value of 0.
82
83 =item B<ABSOLUTE> 
84
85 is for counters which get reset upon reading. This is used for fast counters
86 which tend to overflow. So instead of reading them normally you reset them
87 after every read to make sure you have a maximal time available before the
88 next overflow. Another usage is for things you count like number of messages
89 since the last update.
90
91 =back
92
93 I<heartbeat> defines the maximum number of seconds that may pass
94 between two updates of this data source before the value of the 
95 data source is assumed to be I<*UNKNOWN*>.
96
97 I<min> and I<max> are optional entries defining the expected range of
98 the data supplied by this data source. If I<min> and/or I<max> are
99 defined, any value outside the defined range will be regarded as
100 I<*UNKNOWN*>. If you do not know or care about min and max, set them
101 to U for unknown. Note that min and max always refer to the processed values
102 of the DS. For a traffic-B<COUNTER> type DS this would be the max and min
103 data-rate expected from the device.
104
105 I<If information on minimal/maximal expected values is available,
106 always set the min and/or max properties. This will help RRDtool in
107 doing a simple sanity check on the data supplied when running update.>
108
109 =item B<RRA:>I<CF>B<:>I<cf arguments>
110   
111 The purpose of an B<RRD> is to store data in the round robin archives
112 (B<RRA>). An archive consists of a number of data values or statistics for 
113 each of the defined data-sources (B<DS>) and is defined with an B<RRA> line.
114
115 When data is entered into an B<RRD>, it is first fit into time slots of
116 the length defined with the B<-s> option becoming a I<primary data point>.
117
118 The data is also processed with the consolidation function (I<CF>)
119 of the archive. There are several consolidation functions that consolidate
120 primary data points via an aggregate function: B<AVERAGE>, B<MIN>, B<MAX>, B<LAST>.
121 The format of B<RRA> line for these consolidation function is:
122
123 B<RRA:>I<AVERAGE | MIN | MAX | LAST>B<:>I<xff>B<:>I<steps>B<:>I<rows>
124
125 I<xff> The xfiles factor defines what part of a consolidation interval may
126 be made up from I<*UNKNOWN*> data while the consolidated value is still
127 regarded as known.
128
129 I<steps> defines how many of these I<primary data points> are used to build
130 a I<consolidated data point> which then goes into the archive.
131
132 I<rows> defines how many generations of data values are kept in an B<RRA>.
133
134 =back
135
136 =head1 Aberrant Behaviour detection with Holt-Winters forecasting
137
138 by Jake Brutlag E<lt>jakeb@corp.webtv.netE<gt>
139
140 In addition to the aggregate functions, there are a set of specialized
141 functions that enable B<RRDtool> to provide data smoothing (via the
142 Holt-Winters forecasting algorithm), confidence bands, and the flagging
143 aberrant behavior in the data source time series:
144
145 =over 4
146
147 =item B<RRA:>I<HWPREDICT>B<:>I<rows>B<:>I<alpha>B<:>I<beta>B<:>I<seasonal period>B<:>I<rra num>
148
149 =item B<RRA:>I<SEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra num>
150
151 =item B<RRA:>I<DEVSEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra num>
152
153 =item B<RRA:>I<DEVPREDICT>B<:>I<rows>B<:>I<rra num>
154
155 =item B<RRA:>I<FAILURES>B<:>I<rows>B<:>I<threshold>B<:>I<window length>B<:>I<rra num>
156
157 =back
158
159 These B<RRAs> differ from the true consolidation functions in several ways.
160 First, each of the B<RRA>s is updated once for every primary data point.
161 Second, these B<RRAs> are interdependent. To generate real-time confidence
162 bounds, then a matched set of HWPREDICT, SEASONAL, DEVSEASONAL, and
163 DEVPREDICT must exist. Generating smoothed values of the primary data points
164 requires both a HWPREDICT B<RRA> and SEASONAL B<RRA>. Aberrant behavior
165 detection requires FAILURES, HWPREDICT, DEVSEASONAL, and SEASONAL.
166
167 The actual predicted, or smoothed, values are stored in the HWPREDICT
168 B<RRA>. The predicted deviations are store in DEVPREDICT (think a standard
169 deviation which can be scaled to yield a confidence band). The FAILURES
170 B<RRA> stores binary indicators. A 1 marks the indexed observation a
171 failure; that is, the number of confidence bounds violations in the
172 preceding window of observations met or exceeded a specified threshold. An
173 example of using these B<RRAs> to graph confidence bounds and failures
174 appears in L<rrdgraph>.
175
176 The SEASONAL and DEVSEASONAL B<RRAs> store the seasonal coefficients for the
177 Holt-Winters Forecasting algorithm and the seasonal deviations respectively.
178 There is one entry per observation time point in the seasonal cycle. For
179 example, if primary data points are generated every five minutes, and the
180 seasonal cycle is 1 day, both SEASONAL and DEVSEASONAL with have 288 rows.
181
182 In order to simplify the creation for the novice user, in addition to
183 supporting explicit creation the HWPREDICT, SEASONAL, DEVPREDICT,
184 DEVSEASONAL, and FAILURES B<RRAs>, the B<rrdtool> create command supports
185 implicit creation of the other four when HWPREDICT is specified alone and
186 the final argument I<rra num> is omitted.
187
188 I<rows> specifies the length of the B<RRA> prior to wrap around. Remember
189 that there is a one-to-one correspondence between primary data points and
190 entries in these RRAs. For the HWPREDICT CF, I<rows> should be larger than
191 the I<seasonal period>. If the DEVPREDICT B<RRA> is implicity created, the
192 default number of rows is the same as the HWPREDICT I<rows> argument. If the
193 FAILURES B<RRA> is implicitly created, I<rows> will be set to the I<seasonal
194 period> argument of the HWPREDICT B<RRA>. Of course, the B<rrdtool>
195 I<resize> command is available if these defaults are not sufficient and the
196 create wishes to avoid explicit creations of the other specialized function
197 B<RRAs>.
198
199 I<seasonal period> specifies the number of primary data points in a seasonal
200 cycle. If SEASONAL and DEVSEASONAL are implicitly created, this argument for
201 those B<RRAs> is set automatically to the value specified by HWPREDICT. If
202 they are explicity created, the creator should verify that all three
203 I<seasonal period> arguments agree.
204
205 I<alpha> is the adaptation parameter of the intercept (or baseline)
206 coefficient in the Holt-Winters Forecasting algorithm. See L<rrdtool> for a
207 description of this algorithm. I<alpha> must lie between 0 and 1. A value
208 closer to 1 means that more recent observations carry greater weight in
209 predicting the baseline component of the forecast. A value closer to 0 mean
210 that past history carries greater weight in predicted the baseline
211 component.
212
213 I<beta> is the adaption parameter of the slope (or linear trend) coefficient
214 in the Holt-Winters Forecating algorihtm. I<beta> must lie between 0 and 1
215 and plays the same role as I<alpha> with respect to the predicted linear
216 trend.
217
218 I<gamma> is the adaption parameter of the seasonal coefficients in the
219 Holt-Winters Forecasting algorithm (HWPREDICT) or the adaption parameter in
220 the exponential smoothing update of the seasonal deviations. It must lie
221 between 0 and 1. If the SEASONAL and DEVSEASONAL B<RRAs> are created
222 implicitly, they will both have the same value for I<gamma>: the value
223 specified for the HWPREDICT I<alpha> argument. Note that because there is
224 one seasonal coefficient (or deviation) for each time point during the
225 seasonal cycle, the adaption rate is much slower than the baseline. Each
226 seasonal coefficient is only updated (or adapts) when the observed value
227 occurs at the offset in the seasonal cycle corresponding to that
228 coefficient.
229
230 If SEASONAL and DEVSEASONAL B<RRAs> are created explicity, I<gamma> need not
231 be the same for both. Note that I<gamma> can also be changed via the
232 B<rrdtool> I<tune> command.
233
234 I<rra num> provides the links between related B<RRAs>. If HWPREDICT is
235 specified alone and the other B<RRAs> created implicitly, then there is no
236 need to worry about this argument. If B<RRAs> are created explicitly, then
237 pay careful attention to this argument. For each B<RRA> which includes this
238 argument, there is a dependency between that B<RRA> and another B<RRA>. The
239 I<rra num> argument is the 1-based index in the order of B<RRA> creation
240 (that is, the order they appear in the I<create> command). The dependent
241 B<RRA> for each B<RRA> requiring the I<rra num> argument is listed here:
242
243 =over 4
244
245 =item *
246
247 HWPREDICT I<rra num> is the index of the SEASONAL B<RRA>.
248
249 =item * 
250
251 SEASONAL I<rra num> is the index of the HWPREDICT B<RRA>.
252
253 =item * 
254
255 DEVPREDICT I<rra num> is the index of the DEVSEASONAL B<RRA>.
256
257 =item *
258
259 DEVSEASONAL I<rra num> is the index of the HWPREDICT B<RRA>.
260
261 =item * 
262
263 FAILURES I<rra num> is the index of the DEVSEASONAL B<RRA>.
264
265 =back
266
267 I<threshold> is the minimum number of violations (observed values outside
268 the confidence bounds) within a window that constitutes a failure. If the
269 FAILURES B<RRA> is implicitly created, the default value is 7.
270
271 I<window length> is the number of time points in the window. Specify an
272 integer greater than or equal to the threshold and less than or equal to 28.
273 The time interval this window represents depends on the interval between
274 primary data points. If the FAILURES B<RRA> is implicity created, the
275 default value is 9.
276
277 =head1 The HEARTBEAT and the STEP
278
279 Here is an explanation by Don Baarda on the inner workings of rrdtool.
280 It may help you to sort out why all this *UNKNOWN* data is popping
281 up in your databases:
282
283 RRD gets fed samples at arbitrary times. From these it builds Primary
284 Data Points (PDPs) at exact times every "step" interval. The PDPs are
285 then accumulated into RRAs.
286
287 The "heartbeat" defines the maximum acceptable interval between
288 samples. If the interval between samples is less than "heartbeat",
289 then an average rate is calculated and applied for that interval. If
290 the interval between samples is longer than "heartbeat", then that
291 entire interval is considered "unknown". Note that there are other
292 things that can make a sample interval "unknown", such as the rate
293 exceeding limits, or even an "unknown" input sample.
294
295 The known rates during a PDP's "step" interval are used to calculate
296 an average rate for that PDP. Also, if the total "unknown" time during
297 the "step" interval exceeds the "heartbeat", the entire PDP is marked
298 as "unknown". This means that a mixture of known and "unknown" sample
299 time in a single PDP "step" may or may not add up to enough "unknown"
300 time to exceed "heartbeat" and hence mark the whole PDP "unknown". So
301 "heartbeat" is not only the maximum acceptable interval between
302 samples, but also the maximum acceptable amount of "unknown" time per
303 PDP (obviously this is only significant if you have "heartbeat" less
304 than "step").
305
306 The "heartbeat" can be short (unusual) or long (typical) relative to
307 the "step" interval between PDPs. A short "heartbeat" means you
308 require multiple samples per PDP, and if you don't get them mark the
309 PDP unknown. A long heartbeat can span multiple "steps", which means
310 it is acceptable to have multiple PDPs calculated from a single
311 sample. An extreme example of this might be a "step" of 5mins and a
312 "heartbeat" of one day, in which case a single sample every day will
313 result in all the PDPs for that entire day period being set to the
314 same average rate. I<-- Don Baarda E<lt>don.baarda@baesystems.comE<gt>>
315
316
317 =head1 HOW TO MEASURE
318
319 Here are a few hints on how to measure:
320
321 =over
322
323
324 =item Temperature
325
326 Normally you have some type of meter you can read to get the temperature.
327 The temperature is not realy connected with a time. The only connection is
328 that the temperature reading happened at a certain time. You can use the
329 B<GAUGE> data source type for this. RRRtool will the record your reading
330 together with the time.
331
332 =item Mail Messages
333
334 Assume you have a methode to count the number of messages transported by
335 your mailserver in a certain amount of time, this give you data like '5
336 messages in the last 65 seconds'. If you look at the count of 5 like and
337 B<ABSOLUTE> datatype you can simply update the rrd with the number 5 and the
338 end time of your monitoring period. RRDtool will then record the number of
339 messages per second. If at some later stage you want to know the number of
340 messages transported in a day, you can get the average messages per second
341 from RRDtool for the day in question and multiply this number with the
342 number of seconds in a day. Because all math is run with Doubles, the
343 precision should be acceptable.
344
345 =item It's always a Rate
346
347 RRDtool stores rates in amount/second for COUNTER, DERIVE and ABSOLUTE data.
348 When you plot the data, you will get on the y axis amount/second which you
349 might be tempted to convert to absolute amount volume by multiplying by the
350 delta-time between the points. RRDtool plots continuous data, and as such is
351 not appropriate for plotting absolute volumes as for example "total bytes"
352 sent and received in a router. What you probably want is plot rates that you
353 can scale to for example bytes/hour or plot volumes with another tool that
354 draws bar-plots, where the delta-time is clear on the plot for each point
355 (such that when you read the graph you see for example GB on the y axis,
356 days on the x axis and one bar for each day).
357
358 =back
359
360
361 =head1 EXAMPLE
362
363 C<rrdtool create temperature.rrd --step 300 DS:temp:GAUGE:600:-273:5000
364 RRA:AVERAGE:0.5:1:1200 RRA:MIN:0.5:12:2400 RRA:MAX:0.5:12:2400
365 RRA:AVERAGE:0.5:12:2400>
366
367 This sets up an B<RRD> called F<temperature.rrd> which accepts one
368 temperature value every 300 seconds. If no new data is supplied for
369 more than 600 seconds, the temperature becomes I<*UNKNOWN*>.  The
370 minimum acceptable value is -273 and the maximum is 5000.
371
372 A few archives areas are also defined. The first stores the
373 temperatures supplied for 100 hours (1200 * 300 seconds = 100
374 hours). The second RRA stores the minimum temperature recorded over
375 every hour (12 * 300 seconds = 1 hour), for 100 days (2400 hours). The
376 third and the fourth RRA's do the same with the for the maximum and
377 average temperature, respectively.
378
379 =head1 EXAMPLE 2
380
381 C<rrdtool create monitor.rrd --step 300 
382 DS:ifOutOctets:COUNTER:1800:0:4294967295
383 RRA:AVERAGE:0.5:1:2016
384 RRA:HWPREDICT:1440:0.1:0.0035:288>
385
386 This example is a monitor of a router interface. The first B<RRA> tracks the
387 traffic flow in octects; the second B<RRA> generates the specialized
388 functions B<RRAs> for aberrant behavior detection. Note that the I<rra num>
389 argument of HWPREDICT is missing, so the other B<RRAs> will be implicitly be
390 created with default parameter values. In this example, the forecasting
391 algorithm baseline adapts quickly; in fact the most recent one hour of
392 observations (each at 5 minute intervals) account for 75% of the baseline
393 prediction. The linear trend forecast adapts much more slowly. Observations
394 made in during the last day (at 288 observations per day) account for only
395 65% of the predicted linear trend. Note: these computations rely on an
396 exponential smoothing formula described in a forthcoming LISA 2000 paper.
397
398 The seasonal cycle is one day (288 data points at 300 second intervals), and
399 the seasonal adaption paramter will be set to 0.1. The RRD file will store 5
400 days (1440 data points) of forecasts and deviation predictions before wrap
401 around. The file will store 1 day (a seasonal cycle) of 0-1 indicators in
402 the FAILURES B<RRA>.
403
404 The same RRD file and B<RRAs> are created with the following command, which explicitly
405 creates all specialized function B<RRAs>.
406
407 C<rrdtool create monitor.rrd --step 300 
408 DS:ifOutOctets:COUNTER:1800:0:4294967295
409 RRA:AVERAGE:0.5:1:2016
410 RRA:HWPREDICT:1440:0.1:0.0035:288:3
411 RRA:SEASONAL:288:0.1:2
412 RRA:DEVPREDICT:1440:5
413 RRA:DEVSEASONAL:288:0.1:2
414 RRA:FAILURES:288:7:9:5>
415
416 Of course, explicit creation need not replicate implicit create, a number of arguments 
417 could be changed.
418
419 =head1 AUTHOR
420
421 Tobias Oetiker E<lt>oetiker@ee.ethz.chE<gt>