Prometheus मेट्रिक्स C++ में: prometheus-cpp लाइब्रेरी गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

prometheus-cpp लाइब्रेरी: C++ एप्लिकेशन में Prometheus मेट्रिक्स कैसे जोड़ें

आधुनिक सॉफ्टवेयर डेवलपमेंट में एप्लिकेशन की स्थिति पर नज़र रखना (मॉनिटरिंग) बेहद ज़रूरी है। Prometheus एक ओपन-सोर्स मॉनिटरिंग और अलर्टिंग सिस्टम है, जो HTTP एंडपॉइंट के ज़रिए टार्गेट से मेट्रिक्स इकट्ठा करता है। C++ प्रोजेक्ट में Prometheus को इंटीग्रेट करने के लिए prometheus-cpp एक शक्तिशाली और लचीली लाइब्रेरी है। यह डेवलपर्स को आसानी से अपने कोड में मेट्रिक्स (काउंटर, गेज, हिस्टोग्राम) जोड़ने और उन्हें Prometheus सर्वर को समझ आने वाले फॉर्मेट में एक्सपोर्ट करने की सुविधा देती है।

prometheus-cpp क्या है?

prometheus-cpp C++17 में लिखी गई Prometheus की क्लाइंट लाइब्रेरी है। यह मेट्रिक्स बनाने, अपडेट करने और एक्सपोर्ट करने के लिए सभी ज़रूरी टूल्स प्रदान करती है। यह लाइब्रेरी Prometheus डेटा मॉडल में परिभाषित तीन मुख्य मेट्रिक प्रकारों को सपोर्ट करती है:

  • Counter — एक मोनोटोनिक रूप से बढ़ने वाला मान (जैसे, रिक्वेस्ट की संख्या, एरर की संख्या, पूर्ण किए गए कार्य)।
  • Gauge — एक मान जो बढ़ और घट सकता है (जैसे, वर्तमान तापमान, एक्टिव कनेक्शन की संख्या)।
  • Histogram — पूर्वनिर्धारित अंतरालों में मानों का वितरण (जैसे, रिक्वेस्ट निष्पादन का समय)।

इसके अलावा, Summary (क्वांटाइल) और Family (एक ही प्रकार के मेट्रिक्स के समूह, अलग-अलग लेबल के साथ) भी सपोर्ट किए जाते हैं।

इंस्टॉलेशन और सेटअप

लाइब्रेरी पैकेज मैनेजर (vcpkg, Conan) के ज़रिए या सोर्स कोड से इंस्टॉल की जा सकती है। vcpkg के ज़रिए इंस्टॉल करने का उदाहरण:

vcpkg install prometheus-cpp

इंस्टॉल करने के बाद CMakeLists.txt फ़ाइल में लाइब्रेरी को लिंक करें:

find_package(prometheus-cpp CONFIG REQUIRED)
target_link_libraries(your_target PRIVATE prometheus-cpp::push prometheus-cpp::pull prometheus-cpp::core)

यहाँ push का उपयोग Pushgateway पर मेट्रिक्स भेजने के लिए, pull का उपयोग HTTP सर्वर बनाने के लिए (जहाँ से Prometheus मेट्रिक्स खींचेगा), और core में मुख्य क्लासेस (Registry, Counter, Gauge, Histogram) शामिल हैं।

उपयोग का उदाहरण: मेट्रिक्स के लिए HTTP सर्वर

आइए एक सरल उदाहरण देखें जो पोर्ट 8080 पर एक HTTP सर्वर बनाता है और Prometheus फॉर्मेट में मेट्रिक्स प्रदान करता है। HTTP के लिए लाइब्रेरी में बिल्ट-इन simple-web-server या 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() {
    // पोर्ट 8080 पर HTTP सर्वर बनाएँ
    prometheus::Exposer exposer{"0.0.0.0:8080"};

    // मेट्रिक्स के लिए रजिस्ट्री बनाएँ
    auto registry = std::make_shared<prometheus::Registry>();

    // 1. Counter (काउंटर)
    auto& counter_family = prometheus::BuildCounter()
        .Name("http_requests_total")
        .Help("HTTP रिक्वेस्ट की कुल संख्या")
        .Register(*registry);

    auto& counter = counter_family.Add({{"method", "GET"}, {"endpoint", "/api"}});

    // 2. Gauge (गेज)
    auto& gauge_family = prometheus::BuildGauge()
        .Name("memory_usage_bytes")
        .Help("वर्तमान मेमोरी उपयोग बाइट्स में")
        .Register(*registry);

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

    // 3. Histogram (हिस्टोग्राम)
    auto& histogram_family = prometheus::BuildHistogram()
        .Name("request_duration_seconds")
        .Help("रिक्वेस्ट की अवधि सेकंड में")
        .Buckets({0.1, 0.5, 1.0, 2.5, 5.0})
        .Register(*registry);

    auto& histogram = histogram_family.Add({{"handler", "process"}});

    // रजिस्ट्री को एक्सपोज़र में रजिस्टर करें
    exposer.RegisterCollectable(registry);

    // मेट्रिक्स अपडेट करने का लूप
    while (true) {
        counter.Increment();
        gauge.Set(rand() % 1000);
        histogram.Observe(0.3 + (rand() % 100) / 100.0);
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    return 0;
}

इस कोड को चलाने के बाद, http://localhost:8080/metrics पर जाकर आप सभी मेट्रिक्स को Prometheus फॉर्मेट में देख सकते हैं।

मुख्य विशेषताएँ और लाभ

  • आसान इंटीग्रेशन: CMake और vcpkg/Conan के ज़रिए आसानी से सेटअप हो जाता है।
  • सभी मुख्य मेट्रिक प्रकार: Counter, Gauge, Histogram, और Summary को सपोर्ट करता है।
  • लेबल सपोर्ट: मेट्रिक्स में डायमेंशन जोड़ने के लिए लेबल का उपयोग कर सकते हैं।
  • दो मोड: Pull (HTTP सर्वर) और Push (Pushgateway) दोनों मोड में काम करता है।
  • थ्रेड-सेफ: मल्टी-थ्रेडेड एप्लिकेशन में सुरक्षित रूप से उपयोग किया जा सकता है।

निष्कर्ष

prometheus-cpp लाइब्रेरी C++ एप्लिकेशन में Prometheus मॉनिटरिंग जोड़ने का एक सरल और प्रभावी तरीका प्रदान करती है। चाहे आप एक छोटा टूल बना रहे हों या एक बड़ा प्रोडक्शन सिस्टम, यह लाइब्रेरी आपको अपने एप्लिकेशन के प्रदर्शन और स्वास्थ्य पर नज़र रखने में मदद करेगी।

अनुशंसाएँ