RRDTool dürfte den meisten Nagios-Administratoren ein Begriff sein, denn die meisten Nagios-Addons zur Visualisierung von zeitbezogenen Messwerten greifen zurück auf das „Schweizer“ Taschenmesser von Tobi Oetiker.
Viele dieser Addons lassen sich dank ihrer guten Dokumentation recht schnell installieren, legen sich wie eine „zweite Schicht“ um RRDtool, und kümmern sich sowohl um die Erstellung und Befüllung der Round-Robin-Datenbanken als auch die Generierung der Graphen. Der Weg zu einer schnell aufgesetzten Visualisierung von Nagios-Standardchecks mit Default-Templates führt also längst nicht mehr zwangsläufig über rrdtool-Manpages.
Kenntnis über die Datenhaltung in RRDtool ist dennoch unabdingbar, denn die Graphen geben nicht zwangsläufig die Ergebnisse von Nagios exakt wieder - warum sie trotzdem stimmen, werden wir besprechen:
- Strom- und Bestandsdaten: was RRDTool wirklich will
- Typfrage: COUNTER, DERIVE, ABSOLUTE, GAUGE: man nehme?
- „Was war - was wird?“: RRDTool lebt in der Vergangenheit
- Wert ist nicht gleich Wert: Transformierung, Normalisierung und Konsolidierung
2. Agenda
● Grundlagen: Bestands- und Stromdaten
● Unterscheidung von Kennzahlen
● Berechnung von Stromdaten
● Datenfluss in RRDTool
● Datentypen
● Schritt 1: Transformierung zu Stromdaten
● Schritt 2: Normalisierung zu PDPs
● Schritt 3: Konsolidierung zu CDPs
● RRDTool lebt in der Vergangenheit!
RRDTool Basis und Hintergrundwissen 2
3. Grundlagen: Bestands- und Stromdaten
Unterscheidung von Kennzahlen nach
● Bestandsdaten
– Kontostand
– Anzahl Bundesbürger
– Kilometerzähler im Auto
RRDTool Basis und Hintergrundwissen 3
4. Grundlagen: Bestands- und Stromdaten
Unterscheidung von Kennzahlen nach
● Bestandsdaten
– Kontostand
– Anzahl Bundesbürger
– Kilometerzähler im Auto
● Stromdaten (=Veränderungen von Bestandsdaten über einen Zeitraum)
– Geldbewegung pro Zeit
● Einkommen (+)
● Ausgaben (-)
– Demografische Entwicklung pro Zeit; Zahl der
● Geburten (+)
● Sterbefälle (-)
● Zuwanderungen (+)
● Abwanderungen (-)
– Gefahrene km pro Zeit (+)
RRDTool Basis und Hintergrundwissen 4
5. Grundlagen: Bestands- und Stromdaten
Wozu Stromgrößen erfassen?
Negativ-Beispiel für die Erfassung von Bestandsgrößen:
Nachteile:
● Graph skaliert schlecht
● „alles sieht gleich aus“
RRDTool Basis und Hintergrundwissen 5
6. Grundlagen: Bestands- und Stromdaten
Wozu Stromgrößen erfassen?
Negativ-Beispiel für die Erfassung von Bestandsgrößen:
Nachteile:
● Graph skaliert schlecht
● „alles sieht gleich aus“
● Interpretation nur anhand der Deltas möglich
RRDTool Basis und Hintergrundwissen 6
7. Grundlagen: Bestands- und Stromdaten
Berechnung von Stromdaten
= Veränderungen von Bestandsdaten (∆y) über Zeit (∆x):
∆y
∆x
t
RRDTool Basis und Hintergrundwissen 7
8. Grundlagen: Bestands- und Stromdaten
Berechnung von Stromdaten
= Veränderungen von Bestandsdaten (∆y) über Zeit (∆x):
Es seien:
●
∆y=50 Bytes in
● ∆x=10 Sekunden
übertragen worden.
∆y = 50
∆x = 10
t
RRDTool Basis und Hintergrundwissen 8
9. Grundlagen: Bestands- und Stromdaten
Berechnung von Stromdaten
= Veränderungen von Bestandsdaten (∆y) über Zeit (∆x):
Es seien:
●
∆y=50 Bytes in
● ∆x=10 Sekunden
übertragen worden.
50 Bytes Unbekannt:
Was geschah wirklich in ∆x?
… 2s nichts,
...in 5s 50 Bytes (=10 B/s) ,
∆y = 50 … 3s nichts ?
∆x = 10
t
RRDTool Basis und Hintergrundwissen 9
10. Grundlagen: Bestands- und Stromdaten
Berechnung von Stromdaten
= Veränderungen von Bestandsdaten (∆y) über Zeit (∆x):
Es seien:
●
∆y=50 Bytes in
● ∆x=10 Sekunden
übertragen worden.
50 Bytes
Unbekannt:
Was geschah wirklich in ∆x?
… 5s nichts,
...in 1s 50 Bytes (=50 B/s) ,
∆y = 50 … 4s nichts ?
∆x = 10
t
RRDTool Basis und Hintergrundwissen 10
11. Grundlagen: Bestands- und Stromdaten
Berechnung von Stromdaten
= Veränderungen von Bestandsdaten (∆y) über Zeit (∆x):
Es seien:
●
∆y=50 Bytes in
● ∆x=10 Sekunden
übertragen worden.
50 Bytes
Unbekannt:
Was geschah wirklich in ∆x?
… 1s nichts,
...in 2,5s 50 Bytes (=20 B/s) ,
∆y = 50 … 6,5s nichts ?
∆x = 10
t
RRDTool Basis und Hintergrundwissen 11
12. Grundlagen: Bestands- und Stromdaten
Berechnung von Stromdaten
= Veränderungen von Bestandsdaten (∆y) über Zeit (∆x):
EGAL!
Fakt ist:
50 Bytes in 10s übertragen!
Einzig berechenbare Bandbreite:
50 Bytes/10s = 5 Bytes/s
Die Bandbreite 5 Bytes/s über 10s
50 Bytes drückt die übertragene
∆y = 50 Datenmenge aus.
„Transformation“
∆x = 10
t
RRDTool Basis und Hintergrundwissen 12
13. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
DS:ds-name:DST:heartbeat:min:max
●
DS (Datasources): Jede RRD besitzt ein oder mehrere DS; diese liefern
die Datengrundlage für Primary Data Points (PDPs)
● ds-name: frei wählbarer Name der DS (1-19 Zeichen)
● DST (DataSourceType):
● COUNTER
● DERIVE
● ABSOLUTE
● GAUGE
● (COMPUTE: Verrechnung anderer DS, nicht in diesem Vortrag behandelt)
● heartbeat: maximaler Abstand zweier Updates mit Messwerten in Sek.
(= „PDP-timeout“, wird hinter t=now „hinterhergezogen“)
● min/max: Werte außerhalb dieser Extrema werden als UNKNOWN
gespeichert (= „Sanity-Check“, um z.b. „800°C“ zu vermeiden)
RRDTool Basis und Hintergrundwissen 13
14. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
DS:ds-name:DST:heartbeat:min:max
●
DS (Datasources): Jede RRD besitzt ein oder mehrere DS; diese liefern
die Datengrundlage für Primary Data Points (PDPs)
● ds-name: frei wählbarer Name der DS (1-19 Zeichen)
● DST (DataSourceType):
● COUNTER
● DERIVE
● ABSOLUTE
● GAUGE
● (COMPUTE: Verrechnung anderer DS, nicht in diesem Vortrag behandelt)
● heartbeat: maximaler Abstand zweier Updates mit Messwerten in Sek.
(= „PDP-timeout“, wird hinter t=now „hinterhergezogen“)
● min/max: Werte außerhalb dieser Extrema werden als UNKNOWN
gespeichert (= „Sanity-Check“, um z.b. „800°C“ zu vermeiden)
○/⬤: PNP: über Custom Templates pro Check justierbar (PNP 0.4 / 0.6)!
RRDTool Basis und Hintergrundwissen 14
15. Datenfluss in RRDTool
Wert,
timestamp
Data Type
Data Type
COUNTER
DERIVE
Transformation Data Type
ABSOLUT
(DS)
GAUGE
Normalisierung
(PDP)
Konsolidierung
RRA
(CDP)
RRDTool Basis und Hintergrundwissen 15
16. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
COUNTER DERIVE ABSOLUTE GAUGE
zunehmender wie COUNTER; wie COUNTER;
Wert
Counter-Wert zu-/abnehmend zählt immer ab 0
Input
gespeichert Wert wird
∆ wert / ∆ t ∆ wert / ∆ t wert / ∆ t
wird durchgereicht
Overflow-
Check
Bytecounter, Temperatur,
Bidirektionale COUNTER mit
Beispiele Wasseruhr, Füllstand, Km/h,
Pumpe vielen Overflows
Kilometerzähler KWh
Stromdaten Bestandsdaten
RRDTool Basis und Hintergrundwissen 16
17. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
COUNTER DERIVE ABSOLUTE GAUGE
zunehmender wie COUNTER; wie COUNTER;
Wert
Counter-Wert zu-/abnehmend zählt immer ab 0
Input
gespeichert Wert wird
∆ wert / ∆ t ∆ wert / ∆ t wert / ∆ t
wird durchgereicht
Overflow-
Check
Bytecounter, Temperatur,
Bidirektionale COUNTER mit
Beispiele Wasseruhr, Füllstand, Km/h,
Pumpe vielen Overflows
Kilometerzähler KWh
Beispiel-Werte (bei check_interval=60s)
60 1 1 1 60
120 1 1 2 120
180 1 1 3 180
300 2 2 5 300
60 -- -4 1 60
Stromdaten Bestandsdaten
RRDTool Basis und Hintergrundwissen 17
18. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
COUNTER DERIVE ABSOLUTE GAUGE
zunehmender wie COUNTER; wie COUNTER;
Wert
Counter-Wert zu-/abnehmend zählt immer ab 0
Input
gespeichert Wert wird
∆ wert / ∆ t ∆ wert / ∆ t wert / ∆ t
wird durchgereicht
Overflow-
Check
Bytecounter, Temperatur,
Bidirektionale COUNTER mit
Beispiele Wasseruhr, Füllstand, Km/h,
Pumpe vielen Overflows
Kilometerzähler KWh
Beispiel-Werte (bei check_interval=60s)
60 1 1 1
wert(aktuell) !> wert(letzter) 60
120 1 1 2 120
180 1 1 3 180
300 2 2 5 300
60 -- -4 1 60
Stromdaten Bestandsdaten
RRDTool Basis und Hintergrundwissen 18
19. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
COUNTER DERIVE ABSOLUTE GAUGE
zunehmender wie COUNTER; wie COUNTER;
Wert
Counter-Wert zu-/abnehmend zählt immer ab 0
Input
gespeichert Wert wird
∆ wert / ∆ t ∆ wert / ∆ t wert / ∆ t
wird durchgereicht
Overflow-
Check
Bytecounter, Temperatur,
Bidirektionale COUNTER mit
Beispiele Wasseruhr, Füllstand, Km/h,
Pumpe vielen Overflows
Kilometerzähler KWh
Beispiel-Werte (bei check_interval=60s)
60 1 1 1 60
∆wert = -240 !
120 1 1 2 120
180 1 1 3 180
300 2 2 5 300
60 -- -4 1 60
Stromdaten Bestandsdaten
RRDTool Basis und Hintergrundwissen 19
20. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
COUNTER DERIVE ABSOLUTE GAUGE
zunehmender wie COUNTER; wie COUNTER;
Wert
Counter-Wert zu-/abnehmend zählt immer ab 0
Input
gespeichert Wert wird
∆ wert / ∆ t ∆ wert / ∆ t wert / ∆ t
wird durchgereicht
Overflow-
Check
Bytecounter, Temperatur,
Bidirektionale COUNTER mit
Beispiele Wasseruhr, Füllstand, Km/h,
Pumpe vielen Overflows
Kilometerzähler KWh
Beispiel-Werte (bei check_interval=60s)
wert = 300 !
60 1 1 1 60
120 1 1 2 120
180 1 1 3 180
300 2 2 5 300
60 -- -4 1 60
Stromdaten Bestandsdaten
RRDTool Basis und Hintergrundwissen 20
21. Datenfluss in RRDTool
Schritt 1: Transformation / Datentypen
COUNTER DERIVE ABSOLUTE GAUGE
zunehmender wie COUNTER; wie COUNTER;
Wert
Counter-Wert zu-/abnehmend zählt immer ab 0
Input
gespeichert Wert wird
∆ wert / ∆ t ∆ wert / ∆ t wert / ∆ t
wird durchgereicht
Overflow-
Check
Bytecounter, Temperatur,
Bidirektionale COUNTER mit
Beispiele Wasseruhr, Füllstand, Km/h,
Pumpe vielen Overflows
Kilometerzähler KWh
Beispiel-Werte (bei check_interval=60s)
60 1 1 1 60
wert = 60 !
120 1 1 2 120
180 1 1 3 180
300 2 2 5 300
60 -- -4 1 60
Stromdaten Bestandsdaten
RRDTool Basis und Hintergrundwissen 21
22. Datenfluss in RRDTool
Wert,
timestamp
Data Type
Data Type
COUNTER
DERIVE
Transformation Data Type
ABSOLUT
(DS)
GAUGE
Normalisierung
(PDP)
Konsolidierung
RRA
(CDP)
RRDTool Basis und Hintergrundwissen 22
23. Datenfluss in RRDTool
Schritt 2: Normalisierung
Normalisierung = Ergebnisse mit unterschiedlicher Grundlage (hier: t)
vergleichbar machen
50
30
20
10 10 10
t
RRDTool Basis und Hintergrundwissen 23
24. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP1 =
60s
50
40
30
20
10
t
40
30
20
10
t
PDP1
RRDTool Basis und Hintergrundwissen 24
25. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP1 = 45s*10B/s
60s
50
40
30
20
10
t
40
30
20
10
t
PDP1
RRDTool Basis und Hintergrundwissen 25
26. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP1 = 45s*10B/s + 15s*20B/s
60s
50
40
30
20
10
t
40
30
20
10
t
PDP1
RRDTool Basis und Hintergrundwissen 26
27. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP1 = 45s*10B/s + 15s*20B/s
60s
60s
50
40
30
20
10
t
40
30
20
10
t
PDP1
RRDTool Basis und Hintergrundwissen 27
28. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP1 = 45s*10B/s + 15s*20B/s = 450B + 300B = 12,5 B/s
60s 60s
60s
50
40
30
20
10
t
40
30
20
10
t
PDP1
RRDTool Basis und Hintergrundwissen 28
29. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP2 = 30s*20B/s + 30s*10B/s = 600B + 300B = 15 B/s
60s 60s
60s 60s
50
40
30
20
10
t
40
30
20
10
t
PDP1 PDP2
RRDTool Basis und Hintergrundwissen 29
30. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP4 = 15s*50B/s + 45s*30B/s = 750B + 1350B = 35 B/s
60s 60s
60s 60s 60s 60s
50
40
30
20
10
t
40
30
20
10
t
PDP1 PDP2 PDP3 PDP4
RRDTool Basis und Hintergrundwissen 30
31. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP5 = 45s*10B/s + 15s*0B/s = 450B = 7,5 B/s
60s 60s
60s 60s
50
40
30
20
10
t
40
30
20
10
t
PDP4 PDP5
RRDTool Basis und Hintergrundwissen 31
32. Datenfluss in RRDTool
Schritt 2: Normalisierung zu PDPs = Primary Data Points
PDP 6 + 7= UNKNOWN
PDP 8 = KNOWN, da mehr als die Hälfte des Intervalls bekannt sind
60s 60s
50
40
30
20
10
Heartbeat = 120s t
40
30
20
10
t
PDP4 PDP5 PDP6 PDP7 PDP8
RRDTool Basis und Hintergrundwissen 32
33. Datenfluss in RRDTool
Wert,
timestamp
Data Type
Data Type
COUNTER
DERIVE
Transformation Data Type
ABSOLUT
(DS)
GAUGE
Normalisierung
(PDP)
Konsolidierung
RRA
(CDP)
RRDTool Basis und Hintergrundwissen 33
34. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:CF:xff:steps:rows
●
RRA: Round-Robin-Archive speichern die Werte in
Consolidated Data Points (CDPs) ( + Timestamp)
● steps: Anzahl der zu konsolidierenden PDPs
● CF: Konsolidierungsfunktionen bestimmen, wie PDPs in CDPs
verrechnet werden:
● AVERAGE: Mittelwert
● MIN: Kleinster Wert
● MAX: Höchster Wert
● LAST: Letzter Wert
● xff (XfilesFactor): maximaler Anteil PDPs, die in der Berechnung
eines CDP unknown sein dürfen; andernfalls CDP=unknown
(0..0.99999999)
● rows: Anzahl der CDPs, die das RRA speichern soll
RRDTool Basis und Hintergrundwissen 34
35. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:3:360
40
30
20
10
t
PDP1 PDP2 PDP3
40
30
20
10
t
CDP1
RRDTool Basis und Hintergrundwissen 35
36. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:3:360 RRA:MAX:0:3:360
40 40
30 30
20 20
10 10
t t
PDP1 PDP2 PDP3 PDP1 PDP2 PDP3
40 40
30 30
20 20
10 10
t t
CDP1 CDP1
RRDTool Basis und Hintergrundwissen 36
37. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:3:360 RRA:MAX:0:3:360 RRA:LAST:0:3:360
40 40 40
30 30 30
20 20 20
10 10 10
t t t
PDP1 PDP2 PDP3 PDP1 PDP2 PDP3 PDP1 PDP2 PDP3
40 40 40
30 30 30
20 20 20
10 10 10
t t t
CDP1 CDP1 CDP1
RRDTool Basis und Hintergrundwissen 37
38. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:1:400 # 6,6h (1 PDP á 60s * 400)
RRDTool Basis und Hintergrundwissen 38
39. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:1:400 # 6,6h (1 PDP á 60s * 400)
RRA:AVERAGE:0:3:400 # 20,0h (3 PDP á 60s * 400)
RRDTool Basis und Hintergrundwissen 39
40. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:1:400 # 6,6h (1 PDP á 60s * 400)
RRA:AVERAGE:0:3:400 # 20,0h (3 PDP á 60s * 400)
RRA:AVERAGE:0:7:400 # 46,6h (7 PDP á 60s * 400)
RRDTool Basis und Hintergrundwissen 40
41. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
RRA:AVERAGE:0:1:400 # 6,6h (1 PDP á 60s * 400)
RRA:AVERAGE:0:3:400 # 20,0h (3 PDP á 60s * 400)
RRA:AVERAGE:0:7:400 # 46,6h (7 PDP á 60s * 400)
RRA:AVERAGE:0:15:400 # 100,0h (15 PDP á 60s * 400)
RRDTool Basis und Hintergrundwissen 41
42. Datenfluss in RRDTool
Schritt 3: Konsolidierung zu CDPs
t
RRA:AVERAGE:0:1:400 # 6,6h (1 PDP á 60s * 400)
RRA:AVERAGE:0:3:400 # 20,0h (3 PDP á 60s * 400)
RRA:AVERAGE:0:7:400 # 46,6h (7 PDP á 60s * 400)
RRA:AVERAGE:0:15:400 # 100,0h (15 PDP á 60s * 400)
„now“
RRDTool Basis und Hintergrundwissen 42
43. RRDTool lebt in der Vergangenheit!
(nach http://www.vandenbogaerdt.nl/rrdtool/)
Aufgabe:
Monitoring meiner
Geldbörse
RRDTool Basis und Hintergrundwissen 43
44. RRDTool lebt in der Vergangenheit!
RRDTool Basis und Hintergrundwissen 44
45. RRDTool lebt in der Vergangenheit!
Anlegen einer neuen RRD:
rrdtool create wallet.rrd
start 1130799600 # 00:00 Uhr
RRDTool Basis und Hintergrundwissen 45
46. RRDTool lebt in der Vergangenheit!
Anlegen einer neuen RRD:
rrdtool create wallet.rrd
start 1130799600 # 00:00 Uhr
step 3600 # stepsize = 1h
RRDTool Basis und Hintergrundwissen 46
47. RRDTool lebt in der Vergangenheit!
Anlegen einer neuen RRD:
rrdtool create wallet.rrd
start 1130799600 # 00:00 Uhr
step 3600 # stepsize = 1h
DS:content:GAUGE:86400:0:U # hb=1 Tag, min=0, max=U
RRDTool Basis und Hintergrundwissen 47
48. RRDTool lebt in der Vergangenheit!
Anlegen einer neuen RRD:
rrdtool create wallet.rrd
start 1130799600 # 00:00 Uhr
step 3600 # stepsize = 1h
DS:content:GAUGE:86400:0:U # hb=1 Tag, min=0, max=U
RRA:AVERAGE:0:1:48 # xff=0, 1 step, 48 CDPs (48h)
RRDTool Basis und Hintergrundwissen 48
50. RRDTool lebt in der Vergangenheit!
Graph:
RRDTool Basis und Hintergrundwissen 50
51. RRDTool lebt in der Vergangenheit!
Problem:
Unsere Liste beschreibt die Zukunft,
= was wir haben...
RRDTool Basis und Hintergrundwissen 51
52. RRDTool lebt in der Vergangenheit!
Problem:
Unsere Liste beschreibt die Zukunft,
= was wir haben...
RRDTool beschreibt die Vergangenheit,
= was wir hatten!
RRDTool Basis und Hintergrundwissen 52
53. RRDTool lebt in der Vergangenheit!
Lösung:
Update der Datenbank, bevor sich der
Betrag in der Geldbörse ändert!
RRDTool Basis und Hintergrundwissen 53
54. RRDTool lebt in der Vergangenheit!
Lösung:
Update der Datenbank, bevor sich der
Betrag in der Geldbörse ändert!
rrdtool update wallet.rrd 1130828400:0.00 # 08:00 (75.00)
rrdtool update wallet.rrd 1130832000:75.00 # 09:00 (60.00)
rrdtool update wallet.rrd 1130835600:60.00 # 10:00 (55.00)
rrdtool update wallet.rrd 1130842800:55.00 # 12:00 (45.00)
rrdtool update wallet.rrd 1130864400:45.00 # 18:00 (25.00)
rrdtool update wallet.rrd 1130868000:25.00 # 19:00 (10.00)
rrdtool update wallet.rrd 1130886000:10.00 # 24:00 (00.00)
RRDTool Basis und Hintergrundwissen 54
55. RRDTool lebt in der Vergangenheit!
Lösung:
Update der Datenbank, bevor sich der
Betrag in der Geldbörse ändert!
RRDTool Basis und Hintergrundwissen 55