Start · Sprachen · PHP · Referenz · rrd_create

rrd_create

Funktion

Erstellt eine neue RRD-Datenbankdatei (Round Robin Database) mit den angegebenen Datenquellen und Archiven.

Kategorie: misc

Signatur

rrd_create(string $filename, array $options): bool

Beschreibung

rrd_create() erzeugt eine neue RRD-Datei (Round Robin Database), die zur Speicherung von Zeitreihendaten wie Netzwerkverkehr, CPU-Auslastung oder Sensorwerten genutzt wird. RRD ist ein zyklisches Speicherformat, das ältere Daten automatisch durch Aggregationen ersetzt, sodass der Speicherbedarf konstant bleibt.

Der Parameter $options entspricht dabei den Befehlszeilenargumenten des rrdtool create-Kommandos: Er enthält Angaben zum Startzeit-Wert (--start), zum Messintervall (--step), zu Datenquellen (DS:...) sowie zu Round-Robin-Archiven (RRA:...), die die Konsolidierungsfunktion und Aufbewahrungsdauer definieren.

Typische Anwendungsfälle sind Monitoring-Systeme, Netzwerk-Management-Tools (z. B. MRTG-ähnliche Lösungen) oder jede Applikation, die zeitbasierte Metriken über lange Zeiträume effizient speichern und visualisieren muss. Die Funktion ist Bestandteil der PECL-Erweiterung rrd, die auf der rrdtool-Bibliothek aufbaut.

Vor dem Aufruf muss sichergestellt werden, dass die Zieldatei noch nicht existiert, da RRD bestehende Dateien nicht überschreibt. Das Verzeichnis, in dem die Datei erstellt werden soll, muss für den PHP-Prozess beschreibbar sein.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur zu erstellenden RRD-Datei (z. B. /var/rrd/traffic.rrd). Die Datei darf noch nicht existieren.
$options Pflicht array Array mit Optionen für rrdtool create. Mögliche Elemente sind z. B. '--start', '--step', 'DS:name:typ:heartbeat:min:max' und 'RRA:CF:xff:steps:rows'. Die Reihenfolge entspricht der CLI-Syntax von rrdtool.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die RRD-Datei erfolgreich angelegt wurde. Im Fehlerfall wird false zurückgegeben; mit rrd_error() kann die Fehlermeldung abgerufen werden.

Beispiele

Einfache RRD-Datei für Netzwerkverkehr erstellen

<?php
$filename = '/tmp/traffic.rrd';

$options = [
    '--start',  'now-10s',
    '--step',   '300',                        // Messintervall: 300 Sekunden
    'DS:in_octets:COUNTER:600:0:U',           // Datenquelle: eingehende Bytes
    'DS:out_octets:COUNTER:600:0:U',          // Datenquelle: ausgehende Bytes
    'RRA:AVERAGE:0.5:1:600',                  // 5-Minuten-Werte, 50 Stunden
    'RRA:AVERAGE:0.5:6:700',                  // 30-Minuten-Werte, ~14 Tage
    'RRA:MAX:0.5:6:700',
];

if (rrd_create($filename, $options)) {
    echo 'RRD-Datei erfolgreich erstellt: ' . $filename . PHP_EOL;
} else {
    echo 'Fehler: ' . rrd_error() . PHP_EOL;
}
RRD-Datei erfolgreich erstellt: /tmp/traffic.rrd

RRD-Datei für CPU-Auslastung mit mehreren Archiven

<?php
$filename = '/tmp/cpu_load.rrd';

// Sicherstellen, dass die Datei noch nicht existiert
if (file_exists($filename)) {
    unlink($filename);
}

$options = [
    '--start',  strval(time() - 10),
    '--step',   '60',                          // 1-Minuten-Intervall
    'DS:cpu:GAUGE:120:0:100',                  // CPU in Prozent (0–100)
    'RRA:AVERAGE:0.5:1:1440',                  // 1-Minuten-Werte für 1 Tag
    'RRA:AVERAGE:0.5:5:2016',                  // 5-Minuten-Werte für 1 Woche
    'RRA:AVERAGE:0.5:60:720',                  // Stundenwerte für 30 Tage
    'RRA:MAX:0.5:60:720',                      // Stunden-Maxima für 30 Tage
    'RRA:MIN:0.5:60:720',                      // Stunden-Minima für 30 Tage
];

$result = rrd_create($filename, $options);

if ($result) {
    echo 'CPU-RRD-Datei angelegt.' . PHP_EOL;
    echo 'Dateigröße: ' . filesize($filename) . ' Bytes' . PHP_EOL;
} else {
    echo 'Fehler beim Erstellen: ' . rrd_error() . PHP_EOL;
}
CPU-RRD-Datei angelegt. Dateigröße: 169608 Bytes

// Wichtig · Fallstricke

PECL-Erweiterung: rrd_create() ist Teil der PECL-Erweiterung rrd und steht nicht standardmäßig in PHP zur Verfügung. Die Erweiterung muss separat installiert werden (pecl install rrd) und setzt die librrd-Entwicklungspakete voraus.

Dateiberechtigungen: Das Zielverzeichnis muss für den PHP-Prozess (z. B. www-data) schreibbar sein. Sensible RRD-Dateien sollten außerhalb des Web-Roots abgelegt werden, um direkten HTTP-Zugriff zu verhindern.

DS-Typen: Wichtig ist die korrekte Wahl des Datenquellen-Typs: COUNTER für monoton steigende Zähler (z. B. Bytes), GAUGE für direkte Messwerte (z. B. Temperatur), DERIVE für Ableitungen auch negativer Werte und ABSOLUTE für Zähler, die nach jedem Abruf zurückgesetzt werden.

Fehlerbehandlung: Im Fehlerfall gibt die Funktion false zurück. Die genaue Fehlermeldung ist über rrd_error() abrufbar. Häufige Fehlerquellen sind eine bereits existierende Datei, ungültige DS- oder RRA-Definitionen sowie fehlende Schreibrechte.