Surveillance des applications PHP : métriques avancées et alertes

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi la surveillance de base ne suffit-elle pas ?

La surveillance de base des applications PHP (vérification "vivant/mort" et charge CPU) cesse de fonctionner sous fortes charges. Lorsque votre application traite des milliers de requêtes par seconde, les métriques standard ne montrent pas les goulots d'étranglement : requêtes lentes vers la base de données, fuites mémoire dans les processus longs ou pics soudains de latence.

Dans cet article, nous aborderons le niveau avancé de la surveillance : collecte de métriques métier, profilage en temps réel, configuration d'alertes basées sur les percentiles et intégration avec les stacks d'observabilité modernes (Prometheus + Grafana). Vous apprendrez à mettre en place une instrumentation qui vous permettra non seulement de voir que l'application "est tombée", mais aussi de prédire les problèmes avant qu'ils ne surviennent.



1. Métriques avancées : des codes HTTP aux indicateurs métier

Les compteurs standard (nombre de requêtes, statuts 200/500) sont un minimum. Pour une analyse approfondie, vous devez collecter :

  • Latence : temps de réponse p50, p95, p99. Les anomalies dans p99 indiquent des "valeurs aberrantes" dans le fonctionnement.
  • Consommation mémoire : non seulement la valeur de pointe, mais aussi le taux de croissance au sein d'une même requête.
  • Temps d'exécution des appels externes : Redis, MySQL, RabbitMQ — chaque service doit avoir sa propre métrique.
  • Métriques métier : nombre de commandes passées, erreurs de validation, vitesse des files d'attente.

Exemple de collecte de métriques avec promphp/prometheus_client_php :

use Prometheus\\CollectorRegistry;use Prometheus\\RenderTextFormat;use Prometheus\\Storage\\InMemory;

$registry = new CollectorRegistry(new InMemory());

// Histogramme pour le temps d'exécution de la requête$histogram = $registry->registerHistogram( 'app', 'request_duration_seconds', 'HTTP request duration', ['method', 'endpoint'], [0.1, 0.5, 1.0, 2.0, 5.0]);

// Compteur d'événements métier$counter = $registry->registerCounter( 'business', 'orders_total', 'Total orders created', ['status'] // success/failed);

// Dans le middleware, on mesure le temps$start = microtime(true);// ... exécution de la requête ...$duration = microtime(true) - $start;$histogram->observe($duration, ['GET', '/api/orders']);


2. Health Checks et Deep Probing : vérification des dépendances

Un simple endpoint ping ne vérifie pas la disponibilité de la base de données, du cache ou des files d'attente. Créez un health check complet qui simule des requêtes réelles :

// health.php$checks = [    'database' => function () {        $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');        $db->query('SELECT 1');        return true;    },    'redis' => function () {        $redis = new Redis();        $redis->connect('127.0.0.1', 6379);        $redis->ping();        return true;    },    'queue' => function () {        // Vérifie que RabbitMQ n'est pas saturé        $channel = new AMQPChannel(new AMQPConnection());        $queue = new AMQPQueue($channel);        return $queue->declareQueue() !== false;    }];

$results = [];$healthy = true;foreach ($checks as $name => $check) { try { $check(); $results[$name] = 'ok'; } catch (\\Throwable $e) { $results[$name] = 'failed: ' . $e->getMessage(); $healthy = false; }}

header('Content-Type: application/json');http_response_code($healthy ? 200 : 503);echo json_encode(['status' => $healthy ? 'healthy' : 'unhealthy', 'checks' => $results]);

Cet endpoint peut être connecté aux sondes Kubernetes liveness/readiness ou à une surveillance externe (par exemple, UptimeRobot), qui vérifiera non seulement la disponibilité, mais aussi le bon fonctionnement de toutes les dépendances.



3. Alertes basées sur les percentiles et les anomalies

Les alertes sur le "temps de réponse moyen" manquent souvent

Blogs

Book Recommendations