Integration von Prometheus-Metriken in PHP: Bibliotheken und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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_php


Anwendungsbeispiel

<?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/prometheus


Anwendungsbeispiel

<?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

Empfehlungen