Métriques Prometheus en C++ : bibliothèque prometheus-cpp
Dans le développement logiciel moderne, le monitoring est devenu une partie intégrante des systèmes de production. Prometheus est l'une des solutions les plus populaires pour la collecte et l'analyse de métriques. Si vous programmez en C++ et souhaitez ajouter du monitoring à votre application, la bibliothèque prometheus-cpp est ce qu'il vous faut. Elle offre un support complet des types de métriques Prometheus et permet de les exporter facilement via HTTP.
Qu'est-ce que prometheus-cpp ?
prometheus-cpp est une bibliothèque cliente pour C++ qui implémente le protocole d'exportation des métriques Prometheus. Elle prend en charge tous les types de métriques principaux : Counter, Gauge, Histogram et Summary. La bibliothèque est écrite en C++ moderne (C++11 et supérieur), ne possède pas de dépendances externes (hormis la bibliothèque standard et libcurl pour le serveur HTTP) et est activement maintenue par la communauté.
Installation
La méthode d'installation la plus simple est via vcpkg ou Conan. Pour vcpkg, exécutez :
vcpkg install prometheus-cppSi vous préférez compiler manuellement, clonez le dépôt et utilisez CMake :
git clone https://github.com/jupp0r/prometheus-cpp.gitcd prometheus-cppmkdir build && cd buildcmake ..make -j4sudo make installConcepts fondamentaux
La bibliothèque s'articule autour des composants suivants :
- Registry — registre qui stocke toutes les métriques de l'application.
- Counter — compteur qui ne fait qu'augmenter (par exemple, le nombre de requêtes).
- Gauge — valeur qui peut aussi bien augmenter que diminuer (par exemple, le nombre de connexions actives).
- Histogram — histogramme pour mesurer la distribution des valeurs (par exemple, le temps de réponse).
- Summary — estimation quantile (similaire à un histogramme, mais calcule des percentiles précis).
Exemple : création d'un Counter et d'un Gauge
Considérons un exemple simple — un serveur HTTP qui compte le nombre de requêtes et suit le nombre de connexions actives.
#include <prometheus/counter.h>#include <prometheus/gauge.h>#include <prometheus/registry.h>#include <prometheus/exposer.h>
int main() { // Création du registre de métriques auto registry = std::make_shared<prometheus::Registry>();
// Création d'une famille Counter auto& counter_family = prometheus::BuildCounter() .Name("http_requests_total") .Help("Total number of HTTP requests") .Register(*registry);
// Ajout du label "method" avec la valeur "GET" auto& http_requests = counter_family.Add({{"method", "GET"}});
// Création d'une famille Gauge auto& gauge_family = prometheus::BuildGauge() .Name("active_connections") .Help("Number of active connections") .Register(*registry);
auto& active_connections = gauge_family.Add({});
// Exportation des métriques sur le port 8080 prometheus::Exposer exposer("0.0.0.0:8080"); exposer.RegisterCollectable(registry);
// Simulation de travail while (true) { http_requests.Increment(); // +1 au compteur active_connections.Set(42); // définit la valeur à 42 std::this_thread::sleep_for(std::chrono::seconds(1)); }
return 0;}Exemple : Histogramme pour le temps de réponse
Les histogrammes sont utiles pour mesurer la latence. Définissons des buckets pour le temps de réponse :
#include <prometheus/histogram.h>
// Création d'un histogramme avec les buckets : 0.1, 0.5, 1.0, 2.5, 5.0 secondesauto& histogram_family = prometheus::BuildHistogram() .Name("http_request_duration_seconds") .Help("Request latency in seconds") .Register(*registry);
auto& request_duration = histogram_family.Add( Aussi dans la bibliothèque
Travailler avec XML en Java : DOM, SAX, StAX et JAXB — guide complet
Envoi d'email en Rust : bibliothèques lettre et mailparse pour travailler avec le courrier
Micrometer Java : guide complet avec exemples
Rate Limiting en JavaScript (Node.js) : Guide complet de la bibliothèque express-rate-limit
Traitement JSON en Kotlin : bibliothèques et exemples d'utilisation