Prometheus-Metriken in PHP: Überwachung der Anwendungsleistung
Prometheus ist ein leistungsstarkes Open-Source-System für Monitoring und Alarmierung, das sich zum De-facto-Standard in der Cloud-Native-Welt entwickelt hat. Für die Integration von Prometheus mit PHP-Anwendungen gibt es mehrere ausgereifte Bibliotheken. In diesem Artikel betrachten wir zwei Hauptbibliotheken: promphp/prometheus_client_php und artisanphpex/prometheus, und zeigen, wie Sie Metriken zu Ihrem PHP-Projekt hinzufügen.
Warum sind Metriken in PHP wichtig?
Das Monitoring von PHP-Anwendungen ermöglicht die Verfolgung von:
- Anzahl der Anfragen und deren Ausführungszeit
- Fehler und Ausnahmen
- Speicher- und CPU-Auslastung
- Status von Warteschlangen und externen Diensten
- Geschäftsmetriken (Anzahl der Bestellungen, Registrierungen usw.)
Die Erfassung dieser Daten hilft, Probleme schnell zu erkennen, die Skalierung zu planen und die Benutzererfahrung zu verbessern.
Bibliothek promphp/prometheus_client_php
Dies ist die beliebteste und aktiv gepflegte Bibliothek. Sie implementiert den offiziellen Prometheus-Client für PHP und unterstützt alle Metriktypen:
- Counter — ein Zähler, der nur erhöht wird (z. B. Anzahl der Anfragen)
- Gauge — ein Wert, der sowohl erhöht als auch verringert werden kann (aktueller Speicher, Anzahl aktiver Benutzer)
- Histogram — ein Histogramm zur Messung der Werteverteilung (Antwortzeit, Anfragegröße)
- Summary — eine Quantilverteilung (ähnlich wie Histogramm, aber mit Berechnung der Quantile auf Client-Seite)
Installation
composer require promphp/prometheus_client_phpAnwendungsbeispiel
<?phprequire 'vendor/autoload.php';
use Prometheus\\CollectorRegistry;use Prometheus\\Storage\\InMemory;use Prometheus\\RenderTextFormat;
// Speicher erstellen (Redis, APC, InMemory möglich)$adapter = new InMemory();$registry = new CollectorRegistry($adapter);
// Counter erstellen$counter = $registry->registerCounter( 'app', 'requests_total', 'Total number of HTTP requests', ['method', 'endpoint']);
// Bei jeder Anfrage erhöhen$counter->incBy(1, ['GET', '/api/users']);
// Histogramm für Antwortzeit erstellen$histogram = $registry->registerHistogram( 'app', 'response_time_seconds', 'Response time in seconds', ['method', 'endpoint'], [0.1, 0.5, 1, 2, 5] // buckets);
// Ausführungszeit der Anfrage beobachten$histogram->observe(0.234, ['GET', '/api/users']);
// Metriken im Prometheus-Format ausgeben$renderer = new RenderTextFormat();$result = $renderer->render($registry->getMetricFamilySamples());
header('Content-Type: ' . RenderTextFormat::MIME_TYPE);echo $result;Bibliothek artisanphpex/prometheus
Dies ist eine leichtere Alternative, die auf Einfachheit in der Anwendung fokussiert ist. Sie unterstützt ebenfalls Counter, Gauge, Histogram und Summary.
Installation
composer require artisanphpex/prometheusAnwendungsbeispiel
<?phprequire 'vendor/autoload.php';
use ArtisanPhp\\Prometheus\\CollectorRegistry;use ArtisanPhp\\Prometheus\\Storage\\InMemory;use ArtisanPhp\\Prometheus\\RenderTextFormat;
$adapter = new InMemory();$registry = new CollectorRegistry($adapter);
// Gauge erstellen$gauge = $registry->registerGauge( 'app', 'memory_usage_bytes', 'Current memory usage in bytes', ['process']);
$gauge->set(memory_get_usage(true), ['main']);
// Summary erstellen$summary = $registry->registerSummary( 'app', 'request_duration_milliseconds', 'Request duration in ms', ['method'], 0.95, // quantile 0.01 // error);
$summary->observe(150, ['GET']);
// Ausgabe m Auch in der Bibliothek
GraphQL auf Node.js: Vollständiger Leitfaden zur Bibliothek graphql-http
Autorisierung und Authentifizierung in TypeScript: vollständiger Leitfaden
Datenvalidierung in Kotlin: Bibliotheken, Ansätze und Codebeispiele
mapstructure für Go: Vollständige Anleitung mit Beispielen
Retrofit für Java: Komplettleitfaden mit Praxisbeispielen