Intégration des métriques Prometheus en C++ : bibliothèque prometheus-cpp

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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-cpp


Si 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 install


Concepts 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(

Recommendations