Signatur
Beschreibung
RRDGraph ist eine objektorientierte Wrapper-Klasse für die rrd_graph()-Funktion der PECL-Erweiterung rrd. Sie erlaubt es, aus RRD-Datenbanken (Round Robin Databases) Zeitreihen-Diagramme zu erzeugen – etwa für Systemmonitoring, Netzwerkstatistiken oder Sensor-Daten.
Das Herzstück der Klasse ist die Methode save(), die alle gesetzten Optionen an die RRDtool-Grafikengine übergibt und das Diagramm als Bilddatei (z. B. PNG) speichert oder als Binärdaten zurückgibt. Konfiguriert wird das Diagramm über setOptions(), das ein Array mit RRDtool-konformen Direktiven entgegennimmt.
Die Klasse eignet sich besonders für Monitoring-Anwendungen, Dashboards und alle Szenarien, in denen regelmäßig anfallende Messwerte visuell aufbereitet werden sollen. Voraussetzung ist die installierte PECL-Erweiterung rrd sowie eine funktionierende RRDtool-Bibliothek auf dem System.
- Zeitreihen-Visualisierung für Monitoring (CPU, RAM, Netzwerk, etc.)
- Automatische Diagramm-Generierung in Webanwendungen
- Kombination mit
RRDCreatorundRRDUpdaterfür vollständige RRD-Workflows
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Pfad zur Ausgabedatei, in die das erzeugte Diagramm gespeichert wird (z. B. /var/www/html/graphs/cpu.png). |
Rückgabewert
Beispiele
Einfaches CPU-Auslastungs-Diagramm erzeugen
<?php
// Voraussetzung: PECL-Erweiterung 'rrd' ist installiert
// und eine RRD-Datei 'cpu.rrd' existiert bereits
$graph = new RRDGraph('/var/www/html/graphs/cpu.png');
$graph->setOptions([
'--title' => 'CPU-Auslastung',
'--start' => '-1h', // Letzte Stunde
'--end' => 'now',
'--width' => 600,
'--height' => 200,
'--lower-limit' => 0,
'--upper-limit' => 100,
'--vertical-label' => 'Prozent (%)',
'DEF:cpu=cpu.rrd:load:AVERAGE',
'LINE2:cpu#FF0000:CPU-Last',
'GPRINT:cpu:LAST:Aktuell\: %5.1lf%%',
'GPRINT:cpu:AVERAGE:Durchschnitt\: %5.1lf%%',
'GPRINT:cpu:MAX:Maximum\: %5.1lf%%\n',
]);
$result = $graph->save();
if ($result === false) {
echo 'Fehler beim Erzeugen des Diagramms.';
} else {
echo 'Diagramm erfolgreich gespeichert. Zeilen: ' . print_r($result, true);
}
Netzwerk-Durchsatz-Diagramm mit zwei Datenreihen
<?php
// Diagramm für eingehenden und ausgehenden Netzwerkverkehr
$graph = new RRDGraph('/tmp/network_traffic.png');
$graph->setOptions([
'--title' => 'Netzwerk-Durchsatz (eth0)',
'--start' => '-6h',
'--end' => 'now',
'--width' => 800,
'--height' => 300,
'--vertical-label' => 'Bits/s',
'--base' => 1000,
// Datenquellen definieren
'DEF:in=network.rrd:rx_bits:AVERAGE',
'DEF:out=network.rrd:tx_bits:AVERAGE',
// Flächen und Linien zeichnen
'AREA:in#00CC00:Eingehend',
'LINE1:out#0000FF:Ausgehend',
// Statistiken ausgeben
'GPRINT:in:AVERAGE:Ø Eingehend\: %8.2lf %s',
'GPRINT:out:AVERAGE:Ø Ausgehend\: %8.2lf %s\n',
]);
$result = $graph->save();
if ($result !== false) {
echo 'Netzwerkdiagramm unter /tmp/network_traffic.png gespeichert.';
// Im Webkontext kann das Bild direkt eingebunden werden:
// echo '<img src="/tmp/network_traffic.png" alt="Netzwerk">';
} else {
echo 'Fehler beim Erstellen des Netzwerkdiagramms.';
}
// Wichtig · Fallstricke
Voraussetzungen: Die Klasse ist Teil der PECL-Erweiterung rrd. Diese muss separat installiert werden (pecl install rrd) und erfordert eine installierte RRDtool-Bibliothek (librrd) auf dem System.
Optionen-Array: Die an setOptions() übergebenen Schlüssel-Wert-Paare entsprechen den Kommandozeilenargumenten von rrdtool graph. Einträge ohne Wert (wie DEF:, LINE:, AREA:) werden als nummerierte Einträge im Array übergeben.
Dateipfade: Relative Pfade in DEF:-Direktiven werden relativ zum aktuellen Arbeitsverzeichnis des PHP-Prozesses aufgelöst. Absolute Pfade sind daher empfehlenswert, um unerwartetes Verhalten zu vermeiden.
Fehlerbehandlung: Bei einem Fehler gibt save() false zurück. Detaillierte Fehlermeldungen können mit rrd_error() abgerufen werden.