Prometheus-Metriken in PHP: Vollständige Anleitung zur Bibliothek promphp/prometheus_client_php
\n\nPrometheus ist der De-facto-Standard für die Metrikenerfassung in der modernen DevOps-Infrastruktur. Wenn Ihre Backend-Anwendung in PHP geschrieben ist, benötigen Sie ein Tool, das Metriken in einem für den Prometheus-Server verständlichen Format exportieren kann. Die Bibliothek promphp/prometheus_client_php ist die ausgereifteste und am besten unterstützte Lösung für diese Aufgabe. In diesem Artikel werden wir erläutern, wie Sie die Bibliothek installieren, grundlegende Metriken (Zähler, Histogramme, Summary) erstellen und diese über den Endpunkt /metrics bereitstellen.
Was ist promphp/prometheus_client_php?
\n\nDies ist der offizielle PHP-Client für Prometheus, entwickelt von der Community promphp. Die Bibliothek unterstützt:
\n- \n
- Vier Hauptmetriktypen: Counter (Zähler), Gauge (Messer), Histogram (Histogramm), Summary (Quantile). \n
- Speicheradapter: im Speicher (für Tests), in Redis, APCu oder im Dateisystem. \n
- Formatierung der Ausgabe im Textformat von Prometheus (text/plain). \n
- Unterstützung von Labels für mehrdimensionale Daten. \n
Installation
\n\nDie Installation erfolgt über Composer. Öffnen Sie ein Terminal im Stammverzeichnis Ihres Projekts und führen Sie Folgendes aus:
\ncomposer require promphp/prometheus_client_php\n\nNach der Installation binden Sie den Composer-Autoloader in Ihr PHP-Skript ein:
\nrequire __DIR__ . '/vendor/autoload.php';\n\nErstellung eines Metrik-Registrierungs- und Speicheradapters
\n\nDer erste Schritt besteht darin, ein Registry-Objekt (Register) zu erstellen, in dem alle Metriken gespeichert werden, und einen Speicheradapter auszuwählen. Der Einfachheit halber verwenden wir einen In-Memory-Adapter (Daten leben nur innerhalb einer Anfrage). Für die Produktion wird häufiger Redis oder APCu verwendet.
use Prometheus\\CollectorRegistry;\nuse Prometheus\\Storage\\InMemory;\n\n$registry = new CollectorRegistry(new InMemory());\n\nBeispiel 1: Counter – Anzahl der Anfragen zählen
\n\nEin Zähler (Counter) ist ein monoton steigender Wert. Ideal zum Zählen von HTTP-Anfragen, Fehlern, Datenbankzugriffen.
\n\n// Zähler abrufen oder erstellen\n$counter = $registry->getOrRegisterCounter(\n 'my_app', // Namespace\n 'http_requests_total', // Metrikname\n 'Total number of HTTP requests', // Hilfe-Beschreibung\n ['method', 'endpoint'] // Labels\n);\n\n// Zähler mit bestimmten Labels erhöhen\n$counter->incBy(1, ['GET', '/api/users']);\n\nIn der Ausgabe von /metrics sieht das so aus:
# HELP my_app_http_requests_total Total number of HTTP requests\n# TYPE my_app_http_requests_total counter\nmy_app_http_requests_total{method="GET",endpoint="/api/users"} 1\n\nBeispiel 2: Gauge – Aktuelle Werte (Speicher, Verbindungen)
\n\nEin Gauge kann sowohl erhöht als auch verringert werden. Es wird verwendet, um den aktuellen Zustand zu verfolgen: Anzahl aktiver Verbindungen, belegter Speicher, Aufgabenwarteschlange.
\n\nuse Prometheus\\Gauge;\n\n$gauge = $registry->getOrRegisterGauge(\n 'my_app',\n 'memory_usage_bytes',\n 'Current memory usage in bytes',\n ['pool']\n);\n\n// Wert setzen\n$gauge->set(memory_get_usage(true), ['main']);\n// Oder relativ zum aktuellen Wert ändern\n$gauge->inc(1024, ['main']); // +1KB\n$gauge->dec(512, ['main']); // -512B\n\nBeispiel 3: Histogram – Werteverteilung (Antwortzeit)
\n\nEin Histogramm gruppiert Beobachtungen in vorgegebene Buckets. Es eignet sich hervorragend zur Messung der Ausführungszeit von Anfragen oder der Antwortgrößen.
\n\nuse Prometheus\\Histogram;\n\n$histogram = $registry->getOrRegisterHistogram(\n 'my_app',\n 'http_request_duration_seconds',\n 'Duration of HTTP requests in seconds',\n ['method', 'endpoint'],\n [0.1, 0.5, 1.0, 2.0, 5.0] // Bucke Auch in der Bibliothek
Timber für Kotlin: Vollständige Anleitung mit Beispielen
Arbeiten mit CSV in Rust: Bibliotheken csv, serde und effiziente Datenverarbeitung
Arbeit mit XML in JavaScript (Node.js): Bibliotheken und Beispiele
Überwachung von Java-Anwendungen: Tools und Best Practices
Arbeiten mit CSV in PHP: Bibliothek PhpSpreadsheet