Surveillance des applications PHP : métriques et alertes
Les applications PHP modernes fonctionnent dans des environnements distribués complexes où les pannes et les baisses de performances peuvent coûter des millions à une entreprise. Sans système de surveillance, vous risquez de découvrir un problème uniquement par vos utilisateurs. Dans cet article, nous allons voir comment configurer une surveillance complète des applications PHP, quelles métriques suivre et comment configurer des alertes pour une réaction rapide.
Pourquoi la surveillance PHP est cruciale
PHP reste l'un des langages les plus populaires pour le développement web (selon W3Techs, plus de 75% des sites utilisent PHP). Cependant, sa nature interprétée et ses particularités de gestion de la mémoire nécessitent une attention particulière. Sans surveillance, vous ne pourrez pas :
- Détecter les fuites mémoire avant qu'elles n'entraînent un crash du serveur
- Identifier les requêtes lentes vers la base de données
- Repérer les parties inefficaces du code
- Prévoir la charge et dimensionner l'infrastructure
Une surveillance efficace se compose de trois éléments : la collecte de métriques, la visualisation et les alertes. Examinons chaque étape en pratique.
Métriques clés des applications PHP
Pour une surveillance complète, il est nécessaire de suivre les groupes de métriques suivants :
Métriques de performance (APM)
- Temps de réponse (percentiles p50, p95, p99)
- Débit (RPS – requêtes par seconde)
- Temps d'exécution du script (max_execution_time)
- Nombre d'erreurs (5xx, exceptions)
Métriques système
- Charge CPU et utilisation mémoire de PHP-FPM
- Nombre de processus actifs PHP-FPM
- Utilisation de l'espace disque pour les logs
- Trafic réseau et latences
Métriques métier
- Nombre de paiements réussis
- Vitesse de chargement des pages
- Conversion du tunnel
Implémentation pratique : collecte de métriques avec Prometheus
Voyons un exemple d'intégration d'une application PHP avec Prometheus – l'un des outils de surveillance les plus populaires. Pour travailler avec Prometheus en PHP, nous utilisons la bibliothèque promphp/prometheus_client_php.
Installation via Composer :
composer require promphp/prometheus_client_phpExemple d'enregistrement et d'utilisation d'un compteur (Counter) et d'un histogramme (Histogram) :
<?phpuse Prometheus\\CollectorRegistry;use Prometheus\\Storage\\InMemory;use Prometheus\\RenderTextFormat;
// Initialisation du stockage (en production, utilisez Redis ou APCu)$registry = new CollectorRegistry(new InMemory());
// Compteur pour suivre le nombre d'erreurs$errorCounter = $registry->registerCounter( 'app_errors_total', 'Total number of application errors', ['type', 'endpoint']);
// Histogramme pour le temps de réponse$requestDuration = $registry->registerHistogram( 'http_request_duration_seconds', 'HTTP request duration in seconds', ['method', 'endpoint'], [0.1, 0.5, 1, 2, 5, 10] // buckets);
// Middleware pour la collecte de métriquesfunction monitorRequest(callable $handler) { global $requestDuration, $errorCounter; $start = microtime(true); try { $result = $handler(); $duration = microtime(true) - $start; // Enregistrer le temps d'exécution $requestDuration->observe($duration, [ $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'] ]); return $result; } catch (\\Throwable $e) { // Incrémenter le compteur d'erreurs $errorCounter->inc([ get_class($e), $_SERVER['REQUEST_URI'] ]); throw $e; }}
// Endpoint pour Prometheus (généralement /metrics)function metricsEndpoint()