Integración de métricas de Prometheus en PHP: bibliotecas y ejemplos

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

Métricas de Prometheus en PHP: monitoreo del rendimiento de aplicaciones



Prometheus es un potente sistema de monitoreo y alerta de código abierto que se ha convertido en el estándar de facto en el mundo Cloud Native. Para la integración de Prometheus con aplicaciones PHP, existen varias bibliotecas maduras. En este artículo, analizaremos dos principales: promphp/prometheus_client_php y artisanphpex/prometheus, y mostraremos cómo agregar métricas a su proyecto PHP.



¿Por qué son necesarias las métricas en PHP?

El monitoreo de aplicaciones PHP permite rastrear:

  • Número de solicitudes y su tiempo de ejecución
  • Errores y excepciones
  • Uso de memoria y CPU
  • Estado de colas y servicios externos
  • Métricas de negocio (número de pedidos, registros, etc.)


La recopilación de estos datos ayuda a identificar rápidamente problemas, planificar la escalabilidad y mejorar la experiencia del usuario.



Biblioteca promphp/prometheus_client_php

Esta es la biblioteca más popular y activamente mantenida. Implementa el cliente oficial de Prometheus para PHP y admite todos los tipos de métricas:

  • Counter — contador que solo aumenta (por ejemplo, número de solicitudes)
  • Gauge — valor que puede tanto aumentar como disminuir (memoria actual, número de usuarios activos)
  • Histogram — histograma para medir la distribución de valores (tiempo de respuesta, tamaño de solicitud)
  • Summary — distribución de cuantiles (similar a Histogram, pero con cálculo de cuantiles en el lado del cliente)


Instalación

composer require promphp/prometheus_client_php


Ejemplo de uso

<?phprequire 'vendor/autoload.php';

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

// Creamos el almacenamiento (puede ser Redis, APC, InMemory)$adapter = new InMemory();$registry = new CollectorRegistry($adapter);

// Creamos un contador$counter = $registry->registerCounter( 'app', 'requests_total', 'Total number of HTTP requests', ['method', 'endpoint']);

// Incrementamos en cada solicitud$counter->incBy(1, ['GET', '/api/users']);

// Creamos un histograma para el tiempo de respuesta$histogram = $registry->registerHistogram( 'app', 'response_time_seconds', 'Response time in seconds', ['method', 'endpoint'], [0.1, 0.5, 1, 2, 5] // buckets);

// Observamos el tiempo de ejecución de la solicitud$histogram->observe(0.234, ['GET', '/api/users']);

// Entregamos las métricas en formato Prometheus$renderer = new RenderTextFormat();$result = $renderer->render($registry->getMetricFamilySamples());

header('Content-Type: ' . RenderTextFormat::MIME_TYPE);echo $result;


Biblioteca artisanphpex/prometheus

Esta es una alternativa más ligera, enfocada en la simplicidad de uso. También admite Counter, Gauge, Histogram y Summary.



Instalación

composer require artisanphpex/prometheus


Ejemplo de uso

<?phprequire 'vendor/autoload.php';

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

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

// Creamos un Gauge$gauge = $registry->registerGauge( 'app', 'memory_usage_bytes', 'Current memory usage in bytes', ['process']);

$gauge->set(memory_get_usage(true), ['main']);

// Creamos un Summary$summary = $registry->registerSummary( 'app', 'request_duration_milliseconds', 'Request duration in ms', ['method'], 0.95, // quantile 0.01 // error);

$summary->observe(150, ['GET']);

// Salida de m

Recommendations