Home   Profil   Fun
#75 Linux  02.05.2009

Cacti Tipps


Cacti verwendet rrdtool, um Daten über bestimmte Zeiträume graphisch darzustellen. Um sich in Cacti zurechtzufinden sollte man rrdtool und snmp kennen.

Auf dieser Seite habe ich Erklärungen zu all den Dingen in Cacti zusammengestellt, die mir anfangs lange Zeit rätselhaft blieben und sich erst nach längerer Forschungsarbeit geklärt haben. Zur Veranschaulichung findest du weiter unten ein Diagramm mit einer kompletten Übersicht der Cacti-Objekte mit ihren Beziehungen untereinander und zu RRDtool. Außerdem gibt es noch Video-Tutorials.
Ich hoffe, dass die Informationen hier zum Verständnis von Cacti beitragen und die Lernzeit drastisch reduzieren. Viel Spaß ...


Inoffizielles Handbuch für Cacti

Cacti Video-Tutorials
Unterschied zwischen Data Queries und Data Input Methods
Weitergabe von Änderungen an Templates zu den konkreten Instanzen
Erklärungen zu den einzelnen Abschnitten auf dem Tab "console"
---
Create
New Graphs
Management
Graph Management
Graph Trees
Data Sources
Devices
Collection Methods
Data Queries
Data Input Methods
Templates
Graph Templates
Host Templates
Data Templates
---
Darstellung eines Beispiels, wie der Weg der Daten vom überwachten Host bis zum Graph in Cacti aussehen kann


Diagramm zur Übersicht über Cacti und dessen Beziehung zu RRDtool:
Auf der linken Seite stehen die Objekte von Cacti und auf der rechten Seite die zugehörigen rrdtool-Kommandos und Dateien. Zum Beispiel entspricht ein Graph in Cacti einem "rrdtool graph"-Kommando in rrdtool. Eine Data Source in Cacti entspricht einer rrd-Datei. So kann man sehen, dass ein Host Template einem Device seine Graph Templates und Data Queries zuweist und daraus die Graphen gebildet werden. Trotzdem kann man natürlich auch ohne Host Template arbeiten und direkt Graph Templates oder Data Queries einem Device zuordnen. Die Begriffe Device und Host sind synonym zu betrachten. Je nachdem wo man sich in Cacti befindet wird einmal von Device und ein anderes mal von Host gesprochen. Beides meint aber das gleiche.

Diagramm Cacti RRDtool




Cacti Video-Tutorials

Cacti Video-Tutorial   * Einrichtung eines Hosts in Cacti
  * Zuweisung des Host Templates "Local Linux Machine" zu diesem Host
  * Generierung der Graphen auf Basis dieses Host Templates
  * Betrachten der Graphen entsprechend den 4 RRAs


Unterschied zwischen Data Queries und Data Input Methods


Data Queries werden verwendet, um index-basierte Informationen über ein Device abzufragen, z.B. welche gemounteten Partitionen es gibt. Dies bedeutet, dass die Daten die man mit Data Queries holt, wie z.B. eine Tabelle via SNMP immer eine Spalte haben, die den Zeilenindex enthält. Data Queries verwenden selbst Data Input Methods um Daten zu holen:
Get Script Data (indexed)
Get Script Server Data (indexed)
Get SNMP Data (indexed)

Nicht-indexbasierte Werte werden mit Data Input Methods geholt. Es gibt sechs mögliche TYPEN von Data Input Methods.
(Siehe "Data Input Methods" -> Add)
SNMP
SNMP Query
Script/Command
Script Query
Script - Script Server (PHP)
Script Query - Script Server

Die Data Input Methods, die man in einem Data Template auswählen kann sind die vier fest eingebauten Data Input Methods:
Get Script Data (indexed)
Get Script Server Data (indexed)
Get SNMP Data
Get SNMP Data (indexed)
sowie die, die man im Bereich "Data Input Methods" aufgelistet findet.

Unter "Data Input Methods" sieht man nur die Data Input Methods, die zusätzlich erstellt wurden. Die vier festeingebauten sieht man nicht.



Weitergabe von Änderungen an Templates zu den konkreten Instanzen


Graph Template -> Graph
Änderungen werden automatisch weitergegeben

Data Template -> Data Source (rrd-Datei)
KEINE Änderungen werden übernommen! Man muss manuell mit rrdtool tune die rrd-Dateien ändern.
Es dürfen keine Data Source Items zu bestehenden Data Sources (rrd-Dateien) nachträglich hinzugefügt werden, da es dafür kein entsprechendes rrdtool-Kommando gibt.

Host Template -> Device
KEINE Änderungen werden übernommen.



Erklärungen zu den einzelnen Abschnitten auf dem Tab "console"


New Graphs


Hier kann kann man zu einem Device einzelne oder mehrere Graphen erstellen.
(Nach dem Erstellen der Graphen braucht es in der Regel zwei Pollingzyklen bis die Graphen sichtbar werden, das sind ca. 10 Minuten standardmäßig.)

Erklärung zur Drop-down-Liste "Graph Types":
Über der Liste sieht man in Grau das dem Device zugeordnete Host Template. In der Liste selbst kann man nun auswählen welche Graphtypen zur Auswahl dargestellt werden. Der Inhalt dieser Liste basiert auf den Graphen und Data Queries des DEVICES, nicht auf denen des Host Templates, wie man vermuten könnte. Dies bedeutet, hat man dem Device individuell Graph Templates oder Data Queries hinzugefügt oder entfernt so erscheinen diese entsprechend auch hier, was nicht der Fall wäre, wenn nur die des Host Templates dargestellt würden.
All:
Zeigt alle dem Device zugeordneten Graph Templates und Data Queries an.

Graph Template Based:
Zeigt nur die Graph Templates an.

Restliche Einträge:
Die dem Device zugeordneten Data Queries.

Um das ganze zu verstehen, schaut man sich die Einträge der Drop-Down-Liste an und geht dann anschließend auf console -> Devices, wählt das Device aus und scrollt nach unten. Hier sieht man nun genau das, was auch bei New Graphs erscheint, wenn man in der Drop-Down-Liste "All" auswählt.

Um ein Data Query konkret zu verwenden, muss ihm immer mindestens ein Graph Template zugeordnet sein. Sonst kann man es zwar einem Device zuordnen, jedoch nicht zur Graphenerstellung verwenden.

Mit der Drop-down-Liste unter den Graph Templates hat man die Möglichkeit zusätzliche Graphen erzeugen zu lassen. Man wählt hier also nur etwas aus, wenn man Graphen haben möchte, die in der Liste darüber noch nicht vorhanden sind.

Zu der Drop-down-Liste unter den Data Queries (Select a graph type:):
Sofern man ein Data Query anklickt, muss hier immer der richtige/gewünschte Graph Type dazu ausgewählt werden. Mit Graph Typ sind hier die Graph Templates gemeint, die dem Data Query zugewiesen wurden (Associated Graph Templates). Diese Namen tauchen somit nicht zwangsläufig in der generellen Liste der Graph Templates auf. Wurden bereits Data Queries zum ausgewählten Graph Type erstellt erscheinen sie grau hinterlegt, damit man nicht versehentlich Graphen doppelt erstellt. Möchte man nun aber zusätzlich einen anderen Graph für so ein bereits verwendetes Data Query erstellen, wählt man zuerst den gewünschten Graph Type in der Drop-down-Liste aus. Sofort lässt sich das Data Query wieder anklicken (sofern eben noch nicht verwendet für diesen Graph Typ).



Graph Management


Hier werden wie zu erwarten die einzelnen konkreten Graphen aufgelistet. Außerdem kann man hier Graphen individuell oder basierend auf einem Graph Template erstellen. Wählt man einen Graph aus so sieht man den Graph selbst sowie welches Graph Template für diesen Graph verwendet wurde und zu welchem Host der Graph gehört. Weiterhin sieht man ergänzende Informationen: Graph Item Fields: Die Data Sources, die die Daten für den Graph liefern.
Graph Item Fields entspricht hier den Graph Item Inputs im Graph Template (siehe console -> Graph Templates, ein Graph Template auswählen).

Graph Management -> CDEFs
Mit CDEFs können die Daten, die für die Graph-Erstellung aus rrd-Dateien abgefragt werden verändert werden, sodass zum Beispiel im Graph statt bits/second bytes/second dargestellt werden. DEFs sind Variablen in rrdtool-graph-Kommandos, die die Werte zum gewählten Abfragezeitpunkt enthalten. CDEFs sind Beschreibungen von mathematischen Operationen, die auf die Werte von DEFs angewendet werden.
(Siehe auch cdeftutorial von Tobi Oetiker)

Hier kann man sich nun ganz einfach beliebige CDEFs zusammenklicken und sie anschließend bei den Graph Template Items in den Graphen oder Graph Templates verwenden.

Graph Management -> Colors
Hier kann man sich Farben zusammenstellen oder die vorhandenen ändern. Man gibt einfach den gewünschten HEX-Code ein und bekommt die Farbe dann dargestellt. Diese können dann für Graph Items verwendet werden, z.B. Linien, Legenden, Kommentare, etc.

Graph Management -> GPRINT Presets
Mit GPRINT Presets kann man Werte des Graphen in der Legende im Graph darstellen und zwar in gewünschter Formatierung (ähnlich printf). Ein Beispiel wäre das Graph Template "UNIX - Load Average". Klickt man es an sieht man oben die einzelnen Graph Template Items. Ungefähr in der Mitte der Tabelle ist eine Spalte mit dem Namen "Graph Item Type". Dort sieht man, dass Item 2, 4 und 6 vom Typ GPRINT sind. Diese 3 Items verwenden den GPRINT Type "Load Average". Sie bilden die Legende unterhalb des Graphen mit den aktuellen Werten der Load Average. Schaut man sich nun das GPRINT Preset "Load Average" direkt an sieht man den Namen und die Angabe zur Formatierung: %8.2lf (2 Nachkommastellen).



Graph Trees


Die Darstellung von Graphen auf dem graphs-Tab erfolgt in Form von Bäumen. Hier kann man Graphen an beliebiger Stelle in einen Baum einfügen oder entfernen. Es ist auch möglich mehrere Bäume zu erstellen.

Es stehen 3 Elemente zum Einfügen in den Baum zur Verfügung: Header, Host oder Graph.
Header: Bildet einen Unterbaum
Host: Fügt alle Graphen eines Hosts ein
Graph: Fügt nur einen einzigen Graph ein

Für die Darstellung der Baumelemente stehen verschiedene Sortierungsfunktionen zur Verfügung:
Manual Ordering (No Sorting)
Alphabetic Ordering
Natural Ordering
Numeric Ordering

[root] bedeutet root im ausgewählten Tree, nicht root gegenüber allen Trees.



Data Sources


Data Sources entsprechen realen rrd-Dateien. Wählt man eine Data Source aus erfährt man welches Data Template für diese Datei verwendet wurde und zu welchem Host sie gehört. Weiterhin sieht man den exakten Pfad im Dateisystem zu dieser rrd-Datei. Man kann hier auch neue rrd-Dateien erstellen, indem man das gewünschte Data Template und den Host angibt.

Data Sources -> RRAs
Mit RRAs wird definiert wie Daten gespeichert werden sollen, z.B. ob der Durschnitt oder das Maximum abgelegt werden soll, wieviele PDPs (Primary Data Points) für einen Consolidated Data Point (CDP) verwendet werden sollen, usw. Siehe rrdtool für Details.



Devices


Hier sind alle eingetragenen Hosts aufgelistet und man kann neue hinzufügen oder entfernen.

Möchte man einen Host hinzufügen, muss der Hostname oder die IP-Adresse eingegeben werden. Ordnet man dem Host ein Host Template zu, sieht man unten die dem Host Template zugehörigen Graph Templates und Data Queries und kann somit sehr einfach gleiche Graphen für Hosts, die das gleiche Host Template haben erstellen. Ordnet man kein Host Template zu bleiben die Listen für Graph Templates und Data Queries leer und man kann manuell welche hinzufügen. In beiden Fällen kann man immer individuell Graph Templates und Data Queries pro Host hinzufügen oder entfernen.

Möchte man die Re-Index Method für ein bereits eingetragenes Data Query ändern, muss man es wieder löschen und entsprechend mit anderer Re-Index Method wieder hinzufügen.

Schaut man sich das Host Template direkt an, welches man für den Host ausgewählt hat sieht man dort genau die unten aufgelisteten Graph Templates und Data Queries.



Data Queries


Jedem Data Query ist eine XML-Datei zugeordnet sowie eine Data Input Method. Des weiteren muss jedem Data Query, mit dem man tatsächlich Graphen erstellen will mindestens ein Graph Template zugeordnet sein.

Die XML-Datei dient grob vereinfacht dazu die Daten, die in index-basierter Form von einer SNMP-Abfrage oder einem Skript kommen in Cacti zur Auswahl bereitzustellen. Dabei wird unterschieden zwischen Daten, die man bei der Graphenerstellung auswählen kann, wie z.B. die gemounteten Partitionen und den eigentlichen Werten. Die Unterscheidung wird durch das Tag "direction" in der XML-Datei erreicht.

Wenn man einem Data Query ein Graph Template zuweist, gibt man diesem nochmal einen extra Namen. Daher tauchen die Namen der Graph Templates, die man im Data Query sieht auch nicht zwingend in der eigentlichen Liste der Graph Templates auf. In der zweiten Spalte jedoch ist der eigentliche Name des Graph Templates mit angegeben.

Siehe auch oben "Unterschied zwischen Data Queries und Data Input Methods".

Data Queries -> Associated Graph Templates
Erst wenn man hier ein Graph Template zuordnet wird auch ein Data Template mit Data Source und Suggested Values zugeordnet.

Data Queries -> Associated Data Templates
Erstmal kann man nur Graph Templates einem Data Query direkt zuordnen. Hat man dies jedoch getan und wählt man das Graph Template aus so sieht man Felder, die zum zugehörigen Data Template gehören. Wo kommen diese Felder her?
Über das Graph Template, bzw. dessen Graph Template Items wird das Data Template und damit dessen Data Source zugeordnet.

Data Queries -> Associated Data Templates -> Data Source
In dieser Zeile findet man den Namen der Data Source aus dem Data Template sowie eine Drop-down-Liste, die genau die Output-Felder der XML-Datei des Data Queries enthält.

Data Queries -> Suggested Values (Graph Template)
Das was hier steht bezieht sich auf die direkten Eigenschaften des Graph Templates, z.B. title. Es dient zur Unterscheidung von Graphen, die zum gleichen Host gehören.

Data Queries -> Suggested Values (Data Template)
Das was hier steht bezieht sich entweder auf die direkten Eigenschaften des Data Templates, z.B. name, oder auf die Eigenschaften des Data Source Items der Data Source des Data Templates, z.B. rrd_maximum. Das ganze dient dazu die verschiedene Data Sources die zum gleichen Host gehören zu unterscheiden.

Data Queries -> Data Input Method
Hier sind nur die index-basierten Data Input Methods zur Auswahl, da mit Data Queries nur index-basierte Daten geholt werden:
Get Script Data (indexed)
Get Script Server Data (indexed)
Get SNMP Data (indexed)



Data Input Methods


Hier sieht man die bereits erstellten Data Input Methods. Jede basiert auf einem von sechs Typen. Sobald man Add auswählt muss man einen dieser Typen für seine neue Data Input Method auswählen.

In das Feld "Input String" gehört im Fall des Typs Script/Command der ganze Pfad zum Skript sowie Parameter, falls man welche übergeben möchte, z.B. "<path_cacti>/scripts/diskfree.sh <partition>". Die Parameter, die man in dieser Zeile anfügt können nun anschließend im Bereich Input Fields -> Add ausgewählt und somit verwendet werden.

Ähnlich müssen für die Rückgabewerte, die das Skript zurückgibt im Bereich "Output Fields" Einträge angelegt werden.

Wenn man nun ein Data Template erstellt, muss man die gewünschte Data Input Method auswählen. Sobald man nun ein neues Data Source Item diesem Template hinzufügt erhält man im Feld "Output Field" genau die Einträge zur Auswahl, die in der Data Input Method als "Output Fields" definiert sind.

Siehe auch oben "Unterschied zwischen Data Queries und Data Input Methods".



Graph Templates


Graph Template Items definieren welche Data Sources auf dem Graph dargestellt werden sollen.
Fügt man ein Graph Template Item einem Graph Template hinzu und wählt oben eine Data Source aus, so wird automatisch diese Data Source als Graph Item Input hinzugefügt.

Graph Item Inputs erlauben einem beim konkreten Erstellen von Graphen für bestimmte Graph Items abweichend vom Template Eingaben zu machen. Ein Beispiel: Man wählt als Graph Item Input eine Color und ordnet es dem Item1 zu (oder auch mehreren Items). Erstellt man nun für ein Device einen konkreten Graphen auf Basis dieses Graph Templates so erkennt man im oberen Bereich die vorherigen Graph Item Inputs wieder. Im Fall der Color hat man nun automatisch eine Farbliste zur Auswahl und kann bzw. muss sie für diesen speziellen Graph setzen.

Klickt man im Graph Template auf das Graph Template Item so sieht man im Bereich Color einen zusätzlichen Eintrag: [Field Not Templated]. Klickt man darauf landet man genau in der Konfiguration des entsprechenden Graph Item Inputs.

Die Drop-down-Liste Field Type bei den Graph Item Inputs enthält die möglichen Felder der Graph Template Items. Wenn man sich ein Graph Template Item anschaut, sieht man die Felder von oben nach unten: Data Source, Color, Opacity/Alpha Channel,...


Graph Templates -> Graph Template Item -> Graph Item Type
Comment
HRULE
VRULE
LINE1
LINE2
LINE3
AREA
STACK
GPRINT
LEGEND


Graph Templates -> Graph Item Input -> Field Type
Data Source
Color
Opacity/Alpha Channel
Graph Item Input
Consolidation Function
CDEF Function
Value
GPRINT Type
Text Format
Insert Hard Return



Host Templates


Hierbei handelt es sich um eine Zusammenstellung von Graph Templates und Data Queries, die dann als ganzes einem Device zugeordnet werden können. So kann man Devices der gleichen Gruppe immer das gleiche Host Template zuweisen und so die entsprechenden Graphen generieren lassen ohne sie jedesmal neu definieren zu müssen.

Ein Host Template zwingt einem Device keine feste Struktur auf. Man kann immer für ein Device individuell Graph Templates oder Data Queries hinzufügen oder entfernen.



Data Templates


Data Templates stellen ein Skelett für eine rrdtool create Anweisung dar. Die Data Source Items entsprechen den DS-Zeilen in der rrdtool create Anweisung. Die auswählbaren RRAs entsprechen den RRA-Zeilen in der rrdtool create Anweisung.

Wenn man ein neues Data Template erstellt, sollte man beim Namen der Data Source das Häkchen (Use Per-Data Source Value (Ignore this Value)) setzen und den Namen mit |host_description| - beginnen lassen. Sonst kann man die daraus abgeleiteten Data Sources (rrd-dateien) keinem Host zuordnen bzw. alle aus diesem Data Template erzeugten Data Sources hätten den gleichen Namen.

Ein Data Template kann mehrere Data Source Items enthalten. Dies ist notwendig in Fällen wo ein Skript Daten parallel anliefert oder eben bei Data Queries.

Data Template -> Output Field
Die Drop-down-Liste Output Field erscheint nur im Bereich Data Source Item wenn die Data Input Method auch entsprechende Felder definiert hat, siehe z.B. "Unix - Load Average".

Data Template -> Custom Data
Was hier erscheint ist abhängig von der Data Input Method. Es sind die Felder, die bei der Data Input Method als Input Fields definiert wurden. Ist dem Data Template z.B. eine Data Input Method zugewiesen die als Typ SNMP hat kann man hier unter anderm die OID, SNMP Version, etc. eingeben. Ist der Typ Script/Command kann man hier Werte an das Skript bzw. das Kommando übergeben, sofern dies in der Data Input Method definiert ist.

Hat man bei der Data Input Method in den Input Fields einen Special Type Code angegeben, z.B. snmp_community, so erscheint hier "Value will be derived from the host if this field is left empty". Dies bedeutet, dass der Wert für dieses Feld von den Daten des Hosts ermittelt und automatisch eingefügt wird, sofern man das Feld leer lässt.



Darstellung eines Beispiels, wie der Weg der Daten vom überwachten Host bis zum Graph in Cacti aussehen kann


Wert/Parameter auf dem Host ->
Ergebnis einer SNMP-Abfrage in Form einer Tabelle ->
Definition der Tabellenspalten in der XML-Datei ->
Data Source Item / rrdtool create statement (DS-eintrag) ->
Graph Template Item ->
Graph


Nagios und Cacti
Cacti-Training