C++ अनुप्रयोगों की निगरानी metrics लाइब्रेरी के साथ
C++ में उच्च-लोड और महत्वपूर्ण सिस्टम विकसित करते समय गुणवत्तापूर्ण निगरानी के बिना काम नहीं चल सकता। प्रदर्शन पर नज़र रखना, बाधाओं का पता लगाना और विफलताओं पर त्वरित प्रतिक्रिया देना DevOps और डेवलपर्स के प्रमुख कार्य हैं। metrics लाइब्रेरी (जिसे cppmetrics के नाम से भी जाना जाता है) C++ कोड से सीधे मेट्रिक्स एकत्र करने, एकत्र करने और निर्यात करने का एक हल्का और कुशल तरीका प्रदान करती है।
इस लेख में, हम लाइब्रेरी की मुख्य क्षमताओं, इसकी वास्तुकला पर चर्चा करेंगे, उपयोग के उदाहरण दिखाएंगे और बताएंगे कि इसे Prometheus जैसे डेटा संग्रह सिस्टम के साथ कैसे एकीकृत किया जाए।
metrics लाइब्रेरी क्या है?
metrics C++ (C++11 और उससे ऊपर) के लिए एक header-only लाइब्रेरी है, जो Dropwizard Metrics (Java) से लोकप्रिय मेट्रिक प्रकारों को लागू करती है। इसमें शामिल हैं:
- काउंटर (Counters) — घटनाओं की गणना के लिए (जैसे, अनुरोधों की संख्या)।
- गॉज (Gauges) — तत्काल मानों के लिए (वर्तमान CPU लोड, कतार का आकार)।
- हिस्टोग्राम (Histograms) — मानों के वितरण के विश्लेषण के लिए (प्रतिक्रिया समय, पैकेट का आकार)।
- टाइमर (Timers) — संचालन की अवधि मापने के लिए काउंटर और हिस्टोग्राम का संयोजन।
- मीटर (Meters) — घटनाओं की दर मापते हैं (प्रति सेकंड अनुरोध)।
लाइब्रेरी थ्रेड-सुरक्षा, नमूने के लिए अनुकूलन योग्य जलाशयों (जैसे, घातीय रूप से क्षय होने वाले) और JSON, Prometheus, Graphite प्रारूपों में मेट्रिक्स के निर्यात का समर्थन करती है।
स्थापना और कनेक्शन
चूंकि लाइब्रेरी header-only है, स्थापना आपके प्रोजेक्ट में हेडर फ़ाइलों की प्रतिलिपि बनाने तक सीमित है। आप CMake FetchContent का उपयोग कर सकते हैं या बस metrics फ़ोल्डर को include में कॉपी कर सकते हैं:
#include <metrics/metrics.hpp>Prometheus के साथ काम करने के लिए, आपको prometheus-cpp (वैकल्पिक) भी स्थापित करना होगा।
उपयोग का उदाहरण: बुनियादी मेट्रिक्स
एक सरल HTTP सर्वर पर विचार करें जो अनुरोधों की संख्या गिनता है और उनके प्रसंस्करण समय को मापता है।
#include <metrics/metrics.hpp>#include <iostream>#include <thread>#include <chrono>
using namespace metrics;
// मेट्रिक्स रजिस्ट्री बनाएँMetricsRegistry registry("my_app");
// काउंटर और टाइमर परिभाषित करेंCounter& request_counter = registry.counter("http.requests.total");Timer& request_timer = registry.timer("http.requests.duration");
void handle_request() { auto context = request_timer.create_context(); // टाइमर प्रारंभ करें request_counter.increment(); // काउंटर बढ़ाएँ
// प्रसंस्करण का अनुकरण std::this_thread::sleep_for(std::chrono::milliseconds(rand() % 100));
// context के नष्ट होने पर स्वचालित रूप से समय रिकॉर्ड करें}
int main() { for (int i = 0; i < 100; ++i) { handle_request(); }
// कंसोल में मेट्रिक्स आउटपुट (JSON) std::cout << registry.report_json() << std::endl; return 0;}परिणामस्वरूप, आपको काउंटर, प्रसंस्करण समय के 50वें, 75वें, 95वें और 99वें प्रतिशतक के साथ एक JSON प्राप्त होगा।
Prometheus में मेट्रिक्स निर्यात करना
Prometheus के साथ एकीकरण के लिए, लाइब्रेरी एक अलग मॉड्यूल metrics_prometheus प्रदान करती है। एंडपॉइंट सेट करने का उदाहरण:
#include <metrics/metrics.hpp>#include <metrics/prometheus/prometheus_collector.hpp>#include <metrics/prometheus/prometheus_server.hpp>
using namespace metrics;
int main() { MetricsRegistry registry("my_service"); // ... मेट्रिक्स पंजीकरण ...
// पोर्ट 8080 पर HTTP सर्वर बनाएँ PrometheusServer server(registry, 8080); server.start();
std::cout << "Prometheus metrics available a पुस्तकालय में भी
iOS और macOS के लिए Swift में Markdown प्रसंस्करण: लाइब्रेरी और उदाहरण
जावा में कार्य कतारें: ThreadPoolExecutor से Disruptor तक