Start · Sprachen · PHP · Referenz · VarnishStat

VarnishStat

Klasse

Liest Statistikdaten eines laufenden Varnish-Cache-Servers aus und stellt sie als PHP-Array zur Verfügung.

Kategorie: misc

Signatur

class VarnishStat

Beschreibung

VarnishStat ist Teil der PECL-Erweiterung varnish und ermöglicht es, direkt aus PHP heraus Laufzeitstatistiken eines Varnish-Cache-Servers abzurufen. Die Klasse liest die internen Zähler (Counter) des Varnish-Daemons aus, wie z. B. Cache-Hits, Cache-Misses, Anzahl der Verbindungen oder übertragene Datenmenge.

Typische Einsatzgebiete sind Monitoring-Dashboards, Health-Check-Endpunkte oder automatische Skalierungslösungen, die auf den aktuellen Zustand des Caches reagieren müssen. Die Daten werden über den gemeinsamen Speicher (Shared Memory Log, VSM) des Varnish-Prozesses bezogen, sodass kein zusätzlicher HTTP-Aufruf an varnishstat erforderlich ist.

Der Konstruktor akzeptiert ein Konfigurations-Array, über das unter anderem der Pfad zum Varnish-Instanzverzeichnis oder der Name der Instanz angegeben werden kann. Mit der Methode getSnapshot() wird ein assoziatives Array aller aktuell verfügbaren Statistiken zurückgeliefert.

Hinweis: Die Klasse steht nur zur Verfügung, wenn die PECL-Erweiterung varnish installiert und aktiviert ist (extension=varnish.so in der php.ini). Sie ist auf Systemen, auf denen kein Varnish-Daemon läuft oder der Shared-Memory-Pfad nicht zugänglich ist, nicht nutzbar.

Parameter

Name Typ Default Beschreibung
$args array [] Optionales assoziatives Konfigurations-Array. Mögliche Schlüssel sind z. B. VARNISH_CONFIG_IDENT (Name der Varnish-Instanz) und VARNISH_CONFIG_TIMEOUT (Verbindungs-Timeout in Millisekunden).

Beispiele

Alle aktuellen Varnish-Statistiken ausgeben

<?php
// Verbindung zur Standard-Varnish-Instanz herstellen
$stat = new VarnishStat();

// Snapshot aller Statistiken abrufen
$snapshot = $stat->getSnapshot();

if ($snapshot === false) {
    echo "Fehler beim Abrufen der Statistiken.\n";
} else {
    foreach ($snapshot as $key => $data) {
        printf(
            "%-40s %15s  %s\n",
            $key,
            $data['value'],
            $data['description'] ?? ''
        );
    }
}
MAIN.cache_hit 12345678 Cache hits MAIN.cache_miss 987654 Cache misses MAIN.client_req 13333332 Good client requests received ...

Cache-Hitrate berechnen und als JSON ausgeben

<?php
// Verbindung zu einer benannten Varnish-Instanz
$config = [
    VARNISH_CONFIG_IDENT   => 'production',
    VARNISH_CONFIG_TIMEOUT => 500,
];

$stat = new VarnishStat($config);
$snapshot = $stat->getSnapshot();

if ($snapshot !== false) {
    $hits   = $snapshot['MAIN.cache_hit']['value']  ?? 0;
    $misses = $snapshot['MAIN.cache_miss']['value'] ?? 0;
    $total  = $hits + $misses;

    $hitRate = ($total > 0) ? round(($hits / $total) * 100, 2) : 0.0;

    header('Content-Type: application/json');
    echo json_encode([
        'cache_hits'   => $hits,
        'cache_misses' => $misses,
        'hit_rate_pct' => $hitRate,
    ]);
} else {
    http_response_code(503);
    echo json_encode(['error' => 'Varnish nicht erreichbar']);
}
{"cache_hits":12345678,"cache_misses":987654,"hit_rate_pct":92.58}

// Wichtig · Fallstricke

Voraussetzungen: Die PECL-Erweiterung varnish muss installiert sein (pecl install varnish) und der PHP-Prozess muss Lesezugriff auf den Varnish Shared Memory haben (typischerweise unter /var/lib/varnish/ oder /tmp/varnishd.*).

Varnish-Version: Die Erweiterung ist für bestimmte Varnish-Hauptversionen entwickelt worden; die Kompatibilität zwischen PECL-varnish-Version und installiertem Varnish-Daemon (v3, v4, v6 …) muss sichergestellt werden. Bei Versions-Mismatch kann getSnapshot() false zurückliefern oder eine Exception werfen.

Sicherheit: Statistikdaten sollten nicht ungefiltert an nicht authentifizierte Benutzer ausgegeben werden, da sie interne Infrastruktur-Details offenbaren. Endpunkte, die VarnishStat-Daten liefern, sollten durch Authentifizierung oder IP-Whitelisting geschützt sein.