Signatur
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'] ?? ''
);
}
}
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']);
}
// 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.