Start · Sprachen · PHP · Referenz · RRDGraph

RRDGraph

Klasse

Erzeugt Diagramme aus RRD-Datenbanken (Round Robin Database) über eine objektorientierte Schnittstelle.

seit PHP 0.9.0 Kategorie: misc

Signatur

class RRDGraph

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 RRDCreator und RRDUpdater fü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

Typ

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);
}
Diagramm erfolgreich gespeichert. Zeilen: Array ( ... )

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.';
}
Netzwerkdiagramm unter /tmp/network_traffic.png gespeichert.

// 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.