Überwachung von PHP-Anwendungen: Metriken und Alarme von A bis Z
\n\nIn der modernen Webentwicklung sind Stabilität und Leistung einer Anwendung nicht nur ein Wunsch, sondern eine kritische Anforderung. PHP erfordert trotz seiner Reife eine genaue Beobachtung der Überwachung. Ohne diese riskieren Sie, von Benutzern und nicht vom Benachrichtigungssystem über einen Ausfall der Website zu erfahren. In diesem Artikel werden wir erläutern, wie Sie ein vollständiges Überwachungssystem für eine PHP-Anwendung aufbauen: von der Erfassung wichtiger Metriken bis zur Konfiguration von Alarmen, die Ihr Projekt vor Ausfallzeiten bewahren.
\n\nWarum PHP überwachen? Wichtige Metriken
\n\nDie Überwachung ermöglicht es, drei Hauptfragen zu beantworten: "Funktioniert die Anwendung?", "Wie schnell arbeitet sie?" und "Passiert etwas Anomales?". Für PHP-Anwendungen sind die folgenden Metrikengruppen von entscheidender Bedeutung:
\n\n- \n
- Verfügbarkeitsmetriken (Uptime): Überprüfung, ob der Webserver und PHP-FPM auf Anfragen antworten. Die einfachste Methode ist ein Health Check Endpoint. \n
- Leistungsmetriken: Antwortzeit (Response Time), Durchsatz (Requests per Second), Datenbank- und externe API-Laufzeiten. \n
- Ressourcenmetriken: Speichernutzung (Memory Usage), CPU-Auslastung, Anzahl aktiver PHP-FPM-Prozesse. \n
- Fehlermetriken: Anzahl der HTTP-Fehler (5xx, 4xx), Ausnahmen (Exceptions), schwerwiegende Fehler und Warnungen (Warnings). \n
- Geschäftsmetriken: Geschwindigkeit der Bestellabwicklung, Anzahl der Registrierungen – alles, was für Ihr Unternehmen wichtig ist. \n
Diese Metriken können auf verschiedene Weise erfasst werden: von der einfachen Protokollierung in eine Datei bis hin zur Verwendung fortschrittlicher Observability-Systeme wie Prometheus + Grafana oder kommerzieller Lösungen (Datadog, New Relic).
\n\nMetrikenerfassung: vom Einfachen zum Komplexen
\n\nBeginnen wir mit dem grundlegenden Ansatz – der Erstellung eines einfachen Health Checks und der Erfassung von Metriken im Prometheus-Format.
\n\n1. Health Check Endpoint
\nErstellen Sie einen einfachen Endpoint, der die Verbindung zur Datenbank und zum Cache überprüft:
\n\n<?php\n// health.php\n$checks = [\n 'database' => false,\n 'redis' => false,\n 'status' => 'unhealthy'\n];\n\ntry {\n new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');\n $checks['database'] = true;\n} catch (PDOException $e) {\n // Fehler protokollieren\n}\n\nif ($checks['database'] && $checks['redis']) {\n $checks['status'] = 'healthy';\n http_response_code(200);\n} else {\n http_response_code(503);\n}\n\nheader('Content-Type: application/json');\necho json_encode($checks);\n\n\n2. Metrikenerfassung für Prometheus
\nPrometheus ist ein beliebtes System zur Metrikenerfassung. Ihre Anwendung sollte Daten im Format /metrics bereitstellen. Beispiel eines einfachen Exporters:
<?php\n// metrics.php\nheader('Content-Type: text/plain; version=0.0.4');\n\n$metrics = [];\n\n// Anfragenzähler\n$metrics[] = '# HELP http_requests_total Total number of HTTP requests.';\n$metrics[] = '# TYPE http_requests_total counter';\n$metrics[] = 'http_requests_total{method="GET",route="/home"} 1024';\n\n// Histogramm der Antwortzeit\n$metrics[] = '# HELP http_request_duration_seconds Request duration in seconds.';\n$metrics[] = '# TYPE http_request_duration_seconds histogram';\n$metrics[] = 'http_request_duration_seconds_bucket{le="0.1"} 500';\n$metrics[] = 'http_request_duration_seconds_bucket{le="0.5"} 800';\n$metrics[] = 'http_request_duration_seconds_bucket{le="+Inf"} 1024';\n\n// PHP-Metriken (Speicher, Zeit)\n$metrics[] = '# HELP php_memory_bytes Current memory usage.';\n$metrics[] = '# TYPE php_memory_bytes gauge';\n$metrics[] = 'php_memory_bytes ' . memory_get_usage(true);\n\necho implode("\\n", $metrics) . "\\n";\n\n\nAlarmkonfiguration: wann und wie benachrichtigen
\n\nMetriken ohne Alarme sind nur Zahlen. Alarme sollten auf der Grundlage von Schwellenwerten (Thresholds) konfiguriert werden. Grundregeln:
\n\n<