Integration · PHP

PHP Monitoring und APM für Laravel und Symfony

Installieren Sie die OpenTelemetry-Extension für PHP, und Obseria verfolgt jeden Laravel- oder Symfony-Request, jede SQL-Query und jeden HTTP-Aufruf und zeigt, ob PHP-FPM genug Worker hat.
Obseria Apps und Funktionen: Observability, APM, Infrastruktur und Integrationen
Obseria Home-Dashboard mit Service-Zustand, offenen Problemen, SLO-Erfüllung und Ingestion
Obseria Trace-Explorer mit Span-Liste und Span-Attributen
Überblick

Warum PHP mit Obseria überwachen

Auto-Instrumentierung per Extension

Die PECL-Extension opentelemetry hängt sich in Framework- und Bibliotheksfunktionen ein; Composer-Pakete erzeugen so Spans ohne Codeänderung.

Code und Kapazität gemeinsam

Traces zeigen langsame Controller und Queries, PHP-FPM-Metriken zeigen, ob Requests auf einen freien Worker warten.

Fehler mit Kontext

Exceptions landen mit Stacktrace, Route und Release am Span. Ein neuer Fehler nach einem Deployment lässt sich so schnell zurückverfolgen.

Abdeckung

PHP-Frameworks und Bibliotheken, die Obseria überwacht

  • Laravel. Routen, Controller, Queue-Jobs, Eloquent-Queries und Cache-Aufrufe erscheinen als Spans mit Routen-Templates.
  • Symfony. HttpKernel, HttpClient und Messenger werden instrumentiert: Server-Spans je Route plus Client- und Message-Spans.
  • PDO, MySQLi und Doctrine. Jedes Datenbank-Statement wird zum Client-Span mit Laufzeit, bereit für die Analyse langsamer Queries.
  • Guzzle, cURL und PSR-18-Clients. Ausgehende HTTP-Aufrufe tragen den W3C-Trace-Kontext zu nachgelagerten Diensten.
  • Slim, WordPress und weitere Frameworks. Weitere Contrib-Pakete von OpenTelemetry decken Slim, WordPress, CakePHP, Yii, Magento und PSR-15-Middleware ab.
  • PHP-FPM. Pool-Metriken der FPM-Statusseite zeigen aktive und freie Worker, wartende Verbindungen und langsame Requests.
Auf einen Blick

Die PHP-Kennzahlen, auf die es ankommt

Obseria erfasst diese Werte automatisch und zeigt sie in fertigen Dashboards und Alerts.

Verfügbare Arbeiter

Zeigt, ob genug freie Arbeiter für Ihre Besucher bereitstehen oder ob die Website bereits an ihrer Grenze läuft.

  • phpfpm_active_processes
  • phpfpm_idle_processes
  • phpfpm_max_children_reached

Wartende Besucher

Zeigt, wie viele Anfragen in der Warteschlange stehen und wie viel Verkehr Ihre Website im Zeitverlauf annimmt.

  • phpfpm_listen_queue
  • phpfpm_accepted_connections

Tempo der Seiten

Macht sichtbar, wie lange der Aufbau einer Seite dauert und wie oft eine Anfrage langsamer als Ihr vereinbartes Limit ist.

  • phpfpm_process_request_duration
  • phpfpm_slow_requests

Ressourcen je Anfrage

Zeigt, wie viel Speicher und Rechenleistung jede Anfrage benötigt, und weist auf Seiten hin, die teuer im Betrieb sind.

  • phpfpm_process_last_request_memory
  • phpfpm_process_last_request_cpu
Alle 9 Metriken im Detail anzeigen
MetrikEinheitAussage
phpfpm_active_processes{process}Worker, die gerade Requests bearbeiten; nahe pm.max_children ist der Pool ausgelastet.
phpfpm_idle_processes{process}Worker, die auf Requests warten, also Ihre verbleibende Reserve.
phpfpm_listen_queue{connection}Requests, die auf einen freien Worker warten; jeder dauerhafte Wert erhöht die Latenz.
phpfpm_max_children_reached{event}Wie oft FPM das Worker-Limit erreicht hat und keine weiteren Prozesse starten konnte.
phpfpm_slow_requests{request}Requests über request_slowlog_timeout, ein direkter Hinweis auf langsame Codepfade.
phpfpm_accepted_connections{connection}Vom Pool angenommene Requests, Grundlage für den Durchsatz.
phpfpm_process_request_durationusDauer des aktuellen oder letzten Requests je Worker.
phpfpm_process_last_request_memoryBySpitzenspeicher des letzten Requests je Worker, um speicherhungrige Endpoints zu finden.
phpfpm_process_last_request_cpu%CPU-Nutzung des letzten Requests je Worker.
Einrichtung

PHP-Monitoring in wenigen Minuten einrichten

  1. Schritt 1

    Extension installieren

    Installieren Sie die Extension opentelemetry per PECL, pickle oder install-php-extensions und aktivieren Sie sie in der php.ini (ab PHP 8.0).

  2. Schritt 2

    Composer-Pakete hinzufügen

    Binden Sie SDK, OTLP-Exporter und die Auto-Instrumentierungspakete für Ihr Framework und Ihre Bibliotheken ein.

  3. Schritt 3

    Konfigurieren und FPM abfragen

    Setzen Sie OTEL_PHP_AUTOLOAD_ENABLED und die OTLP-Variablen und stellen Sie die PHP-FPM-Statusseite für einen Prometheus-Exporter bereit, den Obseria abfragt.

Beispielkonfiguration · BASH
# 1. OpenTelemetry-Extension installieren und in der php.ini aktivieren
pecl install opentelemetry
echo "extension=opentelemetry.so" > "$(php-config --ini-dir)/opentelemetry.ini"

# 2. SDK, OTLP-Exporter und Auto-Instrumentierungspakete hinzufügen
composer require open-telemetry/sdk open-telemetry/exporter-otlp \
  open-telemetry/opentelemetry-auto-laravel \
  open-telemetry/opentelemetry-auto-pdo \
  open-telemetry/opentelemetry-auto-guzzle

# 3. Konfigurieren (bei PHP-FPM per env[...] in der Pool-Konfiguration)
export OTEL_PHP_AUTOLOAD_ENABLED=true
export OTEL_SERVICE_NAME="shop-backend"
export OTEL_TRACES_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_ENDPOINT="${OBSERIA_OTLP_ENDPOINT}"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer%20${OBSERIA_TOKEN}"
export OTEL_PROPAGATORS=baggage,tracecontext

Sofort einsatzbereit

Dashboards, Alerts und SLOs, die bereitstehen, sobald die ersten Daten ankommen.

  • PHP-Service-Health mit RED-Metriken je Route
  • PHP-FPM-Pools: aktive, freie und wartende Worker
  • Alert bei Listen Queue über null für 5 Minuten
  • Alert bei neuen Exception-Typen nach Deployment
  • Langsamste SQL-Statements je Endpoint
Leitfaden

PHP-Monitoring: Darauf kommt es an

Warum PHP Monitoring wichtig ist

PHP betreibt einen großen Teil des Webs: Onlineshops, Content-Plattformen, Kundenportale und APIs auf Basis von Laravel und Symfony. Das Ausführungsmodell ist einfach, ein Request pro Worker-Prozess, doch diese Einfachheit verdeckt zwei sehr unterschiedliche Fehlerbilder. Entweder ist der Code langsam, etwa wegen einer schweren Query oder einer externen API, oder der Pool der PHP-FPM-Worker ist voll und Requests warten, bevor überhaupt PHP-Code läuft. PHP Monitoring muss beides abdecken, sonst optimieren Teams den Code, obwohl die Kapazität das Problem ist, oder umgekehrt.

OpenTelemetry PHP ist für Traces, Metriken und Logs stabil. Die Auto-Instrumentierung basiert auf der PECL-Extension opentelemetry, über die sich Composer-Pakete in Framework- und Bibliotheksfunktionen einhängen. Mit OTEL_PHP_AUTOLOAD_ENABLED=true konfiguriert sich das SDK selbst aus Umgebungsvariablen. So wird PHP APM ohne Änderung am Anwendungscode möglich.

Die wichtigsten Signale für PHP Performance Monitoring

  • Latenz und Fehler: Server-Spans je Route liefern Rate, Fehler und Dauer. Am Span erfasste Exceptions zeigen, was wo gebrochen ist.
  • Datenbankzeit: PDO- und Doctrine-Spans zeigen, wie viel jedes Requests auf SQL entfällt und welche Statements dominieren.
  • Externe Aufrufe: Guzzle- und cURL-Spans decken langsame Zahlungs-, Versand- oder Such-APIs auf.
  • Worker-Kapazität: phpfpm_active_processes, phpfpm_idle_processes und phpfpm_listen_queue zeigen, ob der Pool mit dem Traffic Schritt hält. phpfpm_max_children_reached zählt, wie oft er an sein Limit stieß.
  • Langsame und speicherhungrige Requests: phpfpm_slow_requests und phpfpm_process_last_request_memory weisen auf Endpoints hin, die Aufmerksamkeit brauchen.

Typische Performance-Probleme in PHP erkennen

Ausgelastete PHP-FPM-Pools

Sind alle Worker belegt, landen neue Requests in der Listen Queue. Die Latenz steigt für alle Endpoints gleichzeitig, während einzelne Traces unauffällig aussehen. Eine Listen Queue über null bei null freien Workern ist das typische Muster.

N+1-Queries in Eloquent und Doctrine

Lazy Loading von Relationen erzeugt eine Query pro Zeile. Im Trace-Wasserfall machen Dutzende fast identische PDO-Spans unter einem Request das Muster sofort sichtbar.

Langsame Drittanbieter-APIs

Ein synchroner Aufruf eines externen Dienstes blockiert den Worker für die gesamte Dauer. Client-Spans mit hoher Latenz zeigen die Abhängigkeit, weniger freie Worker zeigen die Folgen für die Kapazität.

Speicherlimits

Große Importe, Reports oder Bildverarbeitung können an memory_limit stoßen und in Fatal Errors enden. Der Spitzenspeicher je Request zeigt, welche Routen knapp davor liegen, bevor Nutzer Fehler sehen.

Langsame Queue-Worker

Laravel-Queue-Worker und Symfony-Messenger-Consumer laufen außerhalb des Web-Requests. Ihre Probleme bleiben deshalb oft verborgen, bis E-Mails, Exporte oder Webhooks verspätet ankommen. Spans für jeden verarbeiteten Job mit Dauer und Fehlern je Job-Klasse zeigen, welche Hintergrundarbeit langsamer wird und ob sie sich eine Datenbank mit dem Web-Tier teilt.

Kalte Caches nach Deployments

Nach einem Release sind OPcache und Anwendungs-Caches leer, die ersten Requests kompilieren Code und bauen die Konfiguration neu auf. Der Vergleich der Latenz je Release in den ersten Minuten trennt Aufwärmeffekte von echten Regressionen.

Best Practices für Laravel und Symfony Monitoring

  1. Setzen Sie service.name und deployment.environment.name je Anwendung und trennen Sie Web-Worker von Queue-Workern.
  2. Reichen Sie die OTEL-Variablen ausdrücklich an PHP-FPM weiter, etwa per env[...] in der Pool-Konfiguration, denn FPM leert die Umgebung standardmäßig.
  3. Installieren Sie nur die Instrumentierungspakete, die Sie brauchen, um Overhead und Span-Volumen gering zu halten.
  4. Aktivieren Sie FPM-Statusseite und Slowlog und alarmieren Sie auf wartende Requests statt nur auf CPU-Last.
  5. Nutzen Sie Tail-based Sampling, um jeden langsamen oder fehlerhaften Request zu behalten.

So unterstützt Obseria PHP APM

Obseria empfängt Traces aus OpenTelemetry PHP per OTLP und liest PHP-FPM-Metriken über den Obseria Agent oder den OpenTelemetry Collector ein. TopoGraph verbindet Ihre PHP-Services mit Nginx, MySQL, Redis und externen APIs. Steigen die Antwortzeiten, unterscheidet Obseria Intelligence zwischen langsamem Code, langsamen Abhängigkeiten und erschöpften Worker-Pools und präsentiert die Ursache mit nachvollziehbarer Beweiskette. Dashboards, Alerts und SLOs sind inklusive, und alle Daten bleiben per OTLP exportierbar.

Häufige Fragen zum PHP-Monitoring

Nein. Die Extension opentelemetry und Auto-Instrumentierungspakete für Laravel, Symfony, PDO oder Guzzle erzeugen Spans automatisch. Manuelle Spans über die OpenTelemetry API sind optional.

Die Auto-Instrumentierung von OpenTelemetry für PHP setzt PHP 8.0 oder neuer, die PECL-Extension und Composer-Autoloading voraus. Einzelne Pakete können neuere PHP- oder Framework-Versionen verlangen.

PHP-FPM leert Umgebungsvariablen standardmäßig. Übergeben Sie die OTEL_*-Variablen per env[...] in der Pool-Konfiguration oder setzen Sie sie in einer ini-Datei, die PHP einliest.

Aktivieren Sie die FPM-Statusseite und betreiben Sie einen Prometheus-Exporter für PHP-FPM. Der Obseria Agent oder der OpenTelemetry Collector fragt ihn ab, und die Metriken erscheinen neben Ihren Traces.

Ja. OpenTelemetry bietet zusätzlich eine PHP-Distribution für Linux, installierbar als deb-, rpm- oder apk-Paket. Prüfen Sie deren aktuellen Stand, bevor Sie sie breit ausrollen.

Starten Sie heute mit dem PHP-Monitoring

Binden Sie PHP in Minuten per OpenTelemetry oder Obseria Agent an. 14 Tage kostenlos.