Surveillance des applications PHP : métriques et alertes de A à Z
\n\nDans le développement web moderne, la stabilité et les performances d'une application ne sont pas simplement un souhait, mais une exigence critique. PHP, malgré sa maturité, nécessite une attention particulière à la surveillance. Sans elle, vous risquez d'apprendre la panne de votre site par les utilisateurs, et non par le système d'alerte. Dans cet article, nous allons voir comment construire un système de surveillance complet pour une application PHP : de la collecte des métriques clés à la configuration des alertes qui sauveront votre projet des temps d'arrêt.
\n\nPourquoi surveiller PHP ? Métriques clés
\n\nLa surveillance permet de répondre à trois questions principales : "L'application fonctionne-t-elle ?", "À quelle vitesse fonctionne-t-elle ?" et "Se produit-il quelque chose d'anormal ?". Pour les applications PHP, les groupes de métriques suivants sont essentiels :
\n\n- \n
- Métriques de disponibilité (Uptime) : Vérifier que le serveur web et PHP-FPM répondent aux requêtes. La méthode la plus simple est un endpoint de health check. \n
- Métriques de performance : Temps d'exécution des requêtes (Response Time), débit (Requests per Second), temps de réponse de la base de données et des API externes. \n
- Métriques de ressources : Consommation mémoire (Memory Usage), charge CPU, nombre de processus PHP-FPM actifs. \n
- Métriques d'erreurs : Nombre d'erreurs HTTP (5xx, 4xx), d'exceptions (Exceptions), d'erreurs fatales et de warnings. \n
- Métriques métier : Vitesse de finalisation d'une commande, nombre d'inscriptions — tout ce qui est important pour votre activité. \n
Ces métriques peuvent être collectées de différentes manières : de la simple journalisation dans un fichier à l'utilisation de systèmes d'observabilité avancés comme Prometheus + Grafana ou des solutions commerciales (Datadog, New Relic).
\n\nCollecte des métriques : du simple au complexe
\n\nCommençons par une approche de base — la création d'un health check simple et la collecte de métriques au format Prometheus.
\n\n1. Endpoint de Health Check
\nCréez un endpoint simple qui vérifie la connexion à la base de données et au cache :
\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 // On journalise l'erreur\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. Collecte de métriques pour Prometheus
\nPrometheus est un système de collecte de métriques populaire. Votre application doit exposer les données au format /metrics. Exemple d'un exportateur simple :
<?php\n// metrics.php\nheader('Content-Type: text/plain; version=0.0.4');\n\n$metrics = [];\n\n// Compteur de requêtes\n$metrics[] = '# HELP http_requests_total Nombre total de requêtes HTTP.';\n$metrics[] = '# TYPE http_requests_total counter';\n$metrics[] = 'http_requests_total{method="GET",route="/home"} 1024';\n\n// Histogramme du temps de réponse\n$metrics[] = '# HELP http_request_duration_seconds Durée des requêtes en secondes.';\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// Métriques PHP (mémoire, temps)\n$metrics[] = '# HELP php_memory_bytes Utilisation mémoire actuelle.';\n$metrics[] = '# TYPE php_memory_bytes gauge';\n$metrics[] = 'php_memory_bytes ' . memory_get_usage(true);\n\necho implode("\\n", $metrics) . "\\n";\n\n\nConfiguration des alertes : quand et comment alerter
\n\nLes métriques sans alertes ne sont que des chiffres. Les alertes doivent être configurées sur la base de seuils (thresholds). Règles principales :
\n\n<