C++ अनुप्रयोगों की निगरानी: उपकरण और पुस्तकालय

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

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

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

C++ पर अनुप्रयोगों की निगरानी: क्यों और कैसे करें



निगरानी किसी भी गंभीर C++ अनुप्रयोग के विकास और संचालन का एक अभिन्न अंग है। इसके बिना आप अंधे रह जाते हैं: आप नहीं जानते कि प्रोग्राम कितनी मेमोरी की खपत कर रहा है, कौन से फंक्शन धीमे हैं, या सर्वर लोड के तहत क्रैश तो नहीं हो रहा है। इस लेख में, हम C++ अनुप्रयोगों की निगरानी के लिए प्रमुख पुस्तकालयों और उपकरणों पर चर्चा करेंगे - मीट्रिक संग्रह से लेकर प्रोफाइलिंग और लॉगिंग तक।



1. सिस्टम मीट्रिक्स का संग्रह: C++ के लिए Prometheus क्लाइंट



यदि आपका अनुप्रयोग माइक्रोसर्विस या वितरित प्रणाली के भाग के रूप में काम करता है, तो आपको मीट्रिक संग्रह बुनियादी ढांचे की आवश्यकता है। Prometheus डी-फैक्टो मानक है। C++ के लिए आधिकारिक क्लाइंट prometheus-cpp उपलब्ध है।



यह पुस्तकालय काउंटर, हिस्टोग्राम, सारांश मीट्रिक (Summary) बनाने और उन्हें HTTP एंडपॉइंट के माध्यम से प्रदर्शित करने की अनुमति देता है, जिसे Prometheus सर्वर पोल करेगा।



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

int main() { using namespace prometheus;

// पोर्ट 8080 पर HTTP सर्वर बनाएँ Exposer exposer{"0.0.0.0:8080"};

// मीट्रिक्स पंजीकृत करें auto registry = std::make_shared<Registry>(); auto& counter_family = BuildCounter() .Name("http_requests_total") .Help("HTTP अनुरोधों की कुल संख्या") .Register(*registry);

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

// मीट्रिक्स प्रदर्शित करें exposer.RegisterCollectable(registry);

// अनुरोधों का अनुकरण for (int i = 0; i < 100; ++i) { counter.Increment(); std::this_thread::sleep_for(std::chrono::milliseconds(100)); }

return 0;}


लाभ:

  • Prometheus/Grafana पारिस्थितिकी तंत्र के साथ मूल एकीकरण
  • हिस्टोग्राम और क्वांटाइल का समर्थन
  • मुख्य थ्रेड को ब्लॉक किए बिना अतुल्यकालिक निर्यात

नुकसान:

  • विज़ुअलाइज़ेशन के लिए Prometheus सर्वर और Grafana सेटअप की आवश्यकता
  • सीमित मेमोरी वाले एम्बेडेड सिस्टम के लिए उपयुक्त नहीं


2. प्रदर्शन प्रोफाइलिंग: Google Benchmark



कोड के अलग-अलग भागों (बेंचमार्क) के निष्पादन समय को सटीक रूप से मापने के लिए Google Benchmark का उपयोग करें। यह रीयल-टाइम निगरानी नहीं है, लेकिन प्रदर्शन प्रतिगमन परीक्षण के लिए एक अपरिहार्य उपकरण है।



#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) { for (auto _ : state) { std::string empty_string; }}BENCHMARK(BM_StringCreation);

static void BM_StringCopy(benchmark::State& state) { std::string x = "hello"; for (auto _ : state) { std::string copy(x); }}BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();


क्षमताएँ:

  • औसत, माध्यिका, मानक विचलन की स्वचालित गणना
  • मल्टी-थ्रेडेड बेंचमार्क का समर्थन
  • JSON, CSV, कंसोल प्रारूप में रिपोर्ट जनरेशन
  • CI/CD के साथ एकीकरण (परिणामों की बेसलाइन से तुलना कर सकते हैं)


3. लॉगिंग: spdlog



लॉग त्रुटियों और विसंगतियों की निगरानी का आधार हैं। spdlog C++ के लिए सबसे तेज़ लॉगिंग पुस्तकालय है (header-only, अतुल्यकालिक मोड)।



#include <spdlog/spdlog.h>#include <spdlog/sinks/basic_file_sink.h>

int main() { // फ़ाइल में लिखने वाला लॉगर बनाएँ auto logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");

// लॉगिंग स्तर सेट करें spdlog::set_level(spdlog::level::info);

// विभिन्न स्तरों के लॉग logger->info("एप्लिकेशन शुरू हुआ, संस्करण {}", 1.0); logger->warn("मेमोरी सीमा के करीब: {} MB", 512); logger-&>

अनुशंसाएँ