Biblioteca prometheus-cpp: Recopilación de métricas Prometheus en aplicaciones C++
En el desarrollo de software moderno, el monitoreo del estado de las aplicaciones juega un papel crítico. Prometheus es un sistema de monitoreo y alerta de código abierto que recopila métricas de objetivos a través de endpoints HTTP. Para integrar Prometheus en proyectos de C++, existe una biblioteca potente y flexible llamada prometheus-cpp. Esta permite a los desarrolladores agregar fácilmente la recopilación de métricas (contadores, medidores, histogramas) a su código y exportarlas en un formato que el servidor Prometheus pueda entender.
¿Qué es prometheus-cpp?
prometheus-cpp es una biblioteca cliente para Prometheus, escrita en C++17. Proporciona todas las herramientas necesarias para crear, actualizar y exportar métricas. La biblioteca admite tres tipos principales de métricas definidos en el modelo de datos de Prometheus:
- Counter (contador) — un valor que aumenta monótonamente (por ejemplo, número de solicitudes, errores, tareas completadas).
- Gauge (medidor) — un valor que puede aumentar y disminuir arbitrariamente (por ejemplo, temperatura actual, número de conexiones activas).
- Histogram (histograma) — distribución de valores en intervalos predefinidos (por ejemplo, tiempo de ejecución de una solicitud).
Además, se admiten Summary (cuantiles) y Family (grupos de métricas del mismo tipo con diferentes etiquetas).
Instalación y configuración
La biblioteca se distribuye a través de gestores de paquetes (vcpkg, Conan) o se compila desde el código fuente. Ejemplo de instalación mediante vcpkg:
vcpkg install prometheus-cppDespués de la instalación, en el archivo CMakeLists.txt es necesario conectar la biblioteca:
find_package(prometheus-cpp CONFIG REQUIRED)target_link_libraries(your_target PRIVATE prometheus-cpp::push prometheus-cpp::pull prometheus-cpp::core)Aquí, push se usa para enviar métricas a Pushgateway, pull para crear un servidor HTTP desde el cual Prometheus recogerá las métricas, y core contiene las clases principales (Registry, Counter, Gauge, Histogram).
Ejemplo de uso: Servidor HTTP para recopilación de métricas
Consideremos un ejemplo simple que crea un servidor HTTP en el puerto 8080, que entrega métricas en formato Prometheus. Para trabajar con HTTP se utiliza el mecanismo integrado en la biblioteca basado en simple-web-server o libmicrohttpd.
#include <prometheus/exposer.h>#include <prometheus/registry.h>#include <prometheus/counter.h>#include <prometheus/gauge.h>#include <prometheus/histogram.h>#include <thread>#include <chrono>
int main() { // Creamos un servidor HTTP en el puerto 8080 prometheus::Exposer exposer{"0.0.0.0:8080"};
// Creamos un registro de métricas auto registry = std::make_shared<prometheus::Registry>();
// 1. Counter (contador) auto& counter_family = prometheus::BuildCounter() .Name("http_requests_total") .Help("Total number of HTTP requests") .Register(*registry);
auto& counter = counter_family.Add({{"method", "GET"}, {"endpoint", "/api"}});
// 2. Gauge (medidor) auto& gauge_family = prometheus::BuildGauge() .Name("memory_usage_bytes") .Help("Current memory usage in bytes") .Register(*registry);
auto& gauge = gauge_family.Add({});
// 3. Histogram (histograma) auto& histogram_family = prometheus::BuildHistogram() .Name("request_duration_seconds") .Help("Request duration in seconds") .Buckets({0.1, 0.5, 1.0, 2.5, 5.0}) .Register(*registry);
auto& histogram = histogram_family.Add({{"handler", "p También en la biblioteca
Colas de tareas para TypeScript: Bull, Bee-Queue y procesamiento asíncrono
Framework CLI para C++: cppcli — creación de aplicaciones de consola
Procesamiento de JSON en Rust: serde_json, simd-json, json5 y otras bibliotecas
Pruebas en TypeScript: Guía completa de frameworks y herramientas