Monitoreo de aplicaciones PHP: métricas y alertas de la A a la Z

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

Monitoreo de aplicaciones PHP: métricas y alertas de la A a la Z

\n\n

En el desarrollo web moderno, la estabilidad y el rendimiento de una aplicación no son solo un deseo, sino un requisito crítico. PHP, a pesar de su madurez, requiere una atención cuidadosa al monitoreo. Sin él, corres el riesgo de enterarte de la caída del sitio por parte de los usuarios, y no por el sistema de alertas. En este artículo, analizaremos cómo construir un sistema completo de monitoreo para aplicaciones PHP: desde la recopilación de métricas clave hasta la configuración de alertas que salvarán tu proyecto de tiempos de inactividad.

\n\n

¿Por qué monitorear PHP? Métricas clave

\n\n

El monitoreo permite responder a tres preguntas principales: "¿Está funcionando la aplicación?", "¿Qué tan rápido funciona?" y "¿Está sucediendo algo anómalo?". Para las aplicaciones PHP, los siguientes grupos de métricas son críticamente importantes:

\n\n
    \n
  • Métricas de disponibilidad (Uptime): Verificar que el servidor web y PHP-FPM respondan a las solicitudes. La forma más simple es un endpoint de health check.
  • \n
  • Métricas de rendimiento: Tiempo de ejecución de la solicitud (Response Time), capacidad de procesamiento (Requests per Second), tiempo de respuesta de la base de datos y APIs externas.
  • \n
  • Métricas de recursos: Consumo de memoria (Memory Usage), carga de CPU, número de procesos activos de PHP-FPM.
  • \n
  • Métricas de errores: Número de errores HTTP (5xx, 4xx), excepciones (Exceptions), errores fatales y advertencias (warnings).
  • \n
  • Métricas de negocio: Velocidad de finalización de pedidos, número de registros: todo lo que es importante para tu negocio.
  • \n
\n\n

Estas métricas se pueden recopilar de diferentes maneras: desde un simple registro en archivo hasta el uso de sistemas avanzados de observabilidad, como Prometheus + Grafana o soluciones comerciales (Datadog, New Relic).

\n\n

Recopilación de métricas: de lo simple a lo complejo

\n\n

Empecemos con un enfoque básico: crear un health check simple y recopilar métricas en formato Prometheus.

\n\n

1. Endpoint de Health Check

\n

Crea un endpoint simple que verifique la conexión a la base de datos y la caché:

\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    // Registramos el error\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\n

2. Recopilación de métricas para Prometheus

\n

Prometheus es un sistema popular de recopilación de métricas. Tu aplicación debe exponer los datos en formato /metrics. Ejemplo de un exportador simple:

\n\n
<?php\n// metrics.php\nheader('Content-Type: text/plain; version=0.0.4');\n\n$metrics = [];\n\n// Contador de solicitudes\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// Histograma de tiempo de respuesta\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// Métricas de PHP (memoria, tiempo)\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\n

Configuración de alertas: cuándo y cómo notificar

\n\n

Las métricas sin alertas son solo números. Las alertas deben configurarse basándose en umbrales (thresholds). Reglas principales:

\n<

Blogs

Book Recommendations