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_phpEjemplo 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/prometheusEjemplo 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 También en la biblioteca
Trabajo con YAML en Swift (iOS/macOS) — bibliotecas Yams y YamlSwift
magic_enum para C++: guía completa con ejemplos prácticos
spdlog para C++: guía completa con ejemplos
Registro en Java: resumen de las mejores bibliotecas y soluciones
Generación Swagger/OpenAPI para Java: bibliotecas y herramientas