Monitoreo de aplicaciones PHP: métricas avanzadas y alertas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué el monitoreo básico no es suficiente?

El monitoreo básico de aplicaciones PHP (verificación "vivo/muerto" y carga de CPU) deja de funcionar bajo cargas altas. Cuando tu aplicación procesa miles de solicitudes por segundo, las métricas estándar no muestran los cuellos de botella: consultas lentas a la base de datos, fugas de memoria en procesos largos o picos repentinos de latencia.

En este artículo veremos el nivel avanzado de monitoreo: recopilación de métricas de negocio, perfilado en tiempo real, configuración de alertas basadas en percentiles e integración con stacks modernos de observabilidad (Prometheus + Grafana). Aprenderás a implementar herramientas que te permitirán no solo ver que la aplicación "se cayó", sino también predecir problemas antes de que ocurran.



1. Métricas avanzadas: de códigos HTTP a indicadores de negocio

Los contadores estándar (número de solicitudes, estados 200/500) son el mínimo. Para un análisis profundo, necesitas recopilar:

  • Latencia: p50, p95, p99 del tiempo de respuesta. Las anomalías en p99 indican "valores atípicos" en el funcionamiento.
  • Consumo de memoria: no solo el valor máximo, sino también la tasa de crecimiento dentro de una misma solicitud.
  • Tiempo de ejecución de llamadas externas: Redis, MySQL, RabbitMQ — cada servicio debe tener su propia métrica.
  • Métricas de negocio: número de pedidos realizados, errores de validación, velocidad de las colas.

Ejemplo de recopilación de métricas usando promphp/prometheus_client_php:

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

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

// Histograma para el tiempo de ejecución de la solicitud$histogram = $registry->registerHistogram( 'app', 'request_duration_seconds', 'Duración de solicitud HTTP', ['method', 'endpoint'], [0.1, 0.5, 1.0, 2.0, 5.0]);

// Contador de eventos de negocio$counter = $registry->registerCounter( 'business', 'orders_total', 'Total de pedidos creados', ['status'] // success/failed);

// En el middleware medimos el tiempo$start = microtime(true);// ... ejecución de la solicitud ...$duration = microtime(true) - $start;$histogram->observe($duration, ['GET', '/api/orders']);


2. Health Checks y Deep Probing: verificación de dependencias

Un endpoint simple de ping no verifica la disponibilidad de la base de datos, la caché o las colas. Crea un health check integral que simule solicitudes reales:

// 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 () {        // Verificamos que RabbitMQ no esté desbordado        $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] = 'falló: ' . $e->getMessage(); $healthy = false; }}

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

Este endpoint se puede conectar a las sondas liveness/readiness de Kubernetes o a un monitoreo externo (por ejemplo, UptimeRobot), que verificará no solo la disponibilidad, sino también el correcto funcionamiento de todas las dependencias.



3. Alertas basadas en percentiles y anomalías

Las alertas sobre el "tiempo de respuesta promedio" a menudo pasan por alto

Blogs

Book Recommendations