Integration von Prometheus-Metriken in C++: Die Bibliothek prometheus-cpp

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Prometheus-Metriken in C++: Die Bibliothek prometheus-cpp



In der modernen Softwareentwicklung ist Monitoring zu einem unverzichtbaren Bestandteil von Produktionssystemen geworden. Prometheus ist eine der beliebtesten Lösungen zum Sammeln und Analysieren von Metriken. Wenn Sie in C++ programmieren und Ihrem Anwendungs-Monitoring hinzufügen möchten, ist die Bibliothek prometheus-cpp genau das Richtige für Sie. Sie bietet vollständige Unterstützung für alle Prometheus-Metriktypen und ermöglicht deren einfachen Export über HTTP.



Was ist prometheus-cpp?



prometheus-cpp ist eine Client-Bibliothek für C++, die das Prometheus-Metrikexport-Protokoll implementiert. Sie unterstützt alle grundlegenden Metriktypen: Counter, Gauge, Histogram und Summary. Die Bibliothek ist in modernem C++ (C++11 und höher) geschrieben, hat keine externen Abhängigkeiten (außer der Standardbibliothek und libcurl für den HTTP-Server) und wird aktiv von der Community unterstützt.



Installation



Der einfachste Weg zur Installation ist über vcpkg oder Conan. Für vcpkg führen Sie aus:



vcpkg install prometheus-cpp


Wenn Sie es lieber manuell kompilieren möchten, klonen Sie das Repository und verwenden Sie CMake:



git clone https://github.com/jupp0r/prometheus-cpp.gitcd prometheus-cppmkdir build && cd buildcmake ..make -j4sudo make install


Grundlegende Konzepte



Die Bibliothek basiert auf den folgenden Komponenten:



  • Registry — ein Register, das alle Metriken der Anwendung speichert.
  • Counter — ein Zähler, der nur erhöht werden kann (z. B. Anzahl der Anfragen).
  • Gauge — ein Wert, der sowohl erhöht als auch verringert werden kann (z. B. Anzahl aktiver Verbindungen).
  • Histogram — ein Histogramm zur Messung der Werteverteilung (z. B. Antwortzeit).
  • Summary — eine Quantilschätzung (ähnlich einem Histogramm, berechnet jedoch exakte Perzentile).


Beispiel: Erstellen von Counter und Gauge



Betrachten wir ein einfaches Beispiel – einen HTTP-Server, der die Anzahl der Anfragen zählt und die Anzahl der aktiven Verbindungen verfolgt.



#include <prometheus/counter.h>#include <prometheus/gauge.h>#include <prometheus/registry.h>#include <prometheus/exposer.h>

int main() { // Metrik-Registry erstellen auto registry = std::make_shared<prometheus::Registry>();

// Counter-Familie erstellen auto& counter_family = prometheus::BuildCounter() .Name("http_requests_total") .Help("Total number of HTTP requests") .Register(*registry);

// Label "method" mit Wert "GET" hinzufügen auto& http_requests = counter_family.Add({{"method", "GET"}});

// Gauge-Familie erstellen auto& gauge_family = prometheus::BuildGauge() .Name("active_connections") .Help("Number of active connections") .Register(*registry);

auto& active_connections = gauge_family.Add({});

// Metriken auf Port 8080 exportieren prometheus::Exposer exposer("0.0.0.0:8080"); exposer.RegisterCollectable(registry);

// Arbeitsablauf simulieren while (true) { http_requests.Increment(); // +1 zum Zähler active_connections.Set(42); // Wert auf 42 setzen std::this_thread::sleep_for(std::chrono::seconds(1)); }

return 0;}


Beispiel: Histogram für Antwortzeit



Histogramme sind nützlich zur Messung der Latenz. Definieren wir Buckets für die Antwortzeit:



#include <prometheus/histogram.h>

// Histogramm mit Buckets erstellen: 0.1, 0.5, 1.0, 2.5, 5.0 Sekundenauto& histogram_family = prometheus::BuildHistogram() .Name("http_request_duration_seconds") .Help("Request latency in seconds") .Register(*registry);

auto& request_duration = histogram_family.Add(

Empfehlungen