C++ एप्लिकेशन मॉनिटरिंग: उन्नत मेट्रिक्स और अलर्ट्स

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

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

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

C++ एप्लिकेशन मॉनिटरिंग: उन्नत मेट्रिक्स और अलर्ट सेटअप

\n\n

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

\n\n

1. एप्लिकेशन स्तर पर मेट्रिक्स संग्रह

\n\n

उन्नत मॉनिटरिंग की पहली सीढ़ी है कोड में सीधे इंस्ट्रूमेंटेशन जोड़ना। बाहरी एजेंटों के बजाय, हम बिज़नेस लॉजिक में ही काउंटर, हिस्टोग्राम और गेज जोड़ते हैं।

\n\n

आइए Prometheus-CPP लाइब्रेरी का उपयोग करके एक उदाहरण देखें। मान लीजिए, हमारे पास HTTP रिक्वेस्ट हैंडलर है और हम यह ट्रैक करना चाहते हैं:

\n\n
    \n
  • प्रोसेस की गई रिक्वेस्ट की संख्या (काउंटर)।
  • \n
  • रिक्वेस्ट प्रोसेसिंग का समय (हिस्टोग्राम)।
  • \n
  • एरर की संख्या (लेबल के साथ काउंटर)।
  • \n
\n\n
#include <prometheus/counter.h>\n#include <prometheus/histogram.h>\n#include <prometheus/registry.h>\n\nusing namespace prometheus;\n\n// ग्लोबल मेट्रिक्स रजिस्ट्री\nstd::shared_ptr<Registry> registry = std::make_shared<Registry>();\n\n// रिक्वेस्ट काउंटर बनाएं\nauto& request_counter = BuildCounter()\n    .Name("http_requests_total")\n    .Help("Total number of HTTP requests")\n    .Register(*registry);\n\n// रिस्पॉन्स टाइम के लिए हिस्टोग्राम बनाएं\nauto& request_duration = BuildHistogram()\n    .Name("http_request_duration_seconds")\n    .Help("Request duration in seconds")\n    .Register(*registry);\n\n// रिक्वेस्ट हैंडल करने का फंक्शन\nvoid handle_request(const std::string& endpoint) {\n    auto start = std::chrono::high_resolution_clock::now();\n\n    // प्रोसेसिंग का अनुकरण\n    std::this_thread::sleep_for(std::chrono::milliseconds(rand() % 100));\n\n    auto end = std::chrono::high_resolution_clock::now();\n    std::chrono::duration<double> elapsed = end - start;\n\n    // मेट्रिक्स अपडेट करें\n    request_counter.Increment();\n    request_duration.Observe(elapsed.count());\n}\n
\n\n

यह तरीका आपको हर एंडपॉइंट के परफॉरमेंस का सटीक डेटा देता है, न कि सिस्टम का औसत आंकड़ा।

\n\n

2. उन्नत मेट्रिक्स: क्यू, थ्रेड पूल और लीक

\n\n

हाई-लोड C++ एप्लिकेशन के लिए इंटरनल रिसोर्स की स्थिति पर नज़र रखना बेहद ज़रूरी है। आइए तीन मुख्य प्रकार की मेट्रिक्स देखें:

\n\n

2.1. मैसेज क्यू की गहराई

\n

अगर एप्लिकेशन टास्क क्यू का उपयोग करता है (जैसे, std::queue म्यूटेक्स के साथ), तो क्यू के मौजूदा आकार के लिए एक गेज जोड़ें:

\n\n
#include <prometheus/gauge.h>\n\nauto& queue_size = BuildGauge()\n    .Name("task_queue_size")\n    .Help("Current number of tasks in queue")\n    .Register(*registry);\n\n// प्रोड्यूसर/कंज़्यूमर कोड में\nvoid push_task(Task t) {\n    std::lock_guard<std::mutex> lock(mutex);\n    queue.push(t);\n    queue_size.Set(queue.size()); // मेट्रिक अपडेट करें\n}\n
\n\n

2.2. थ्रेड पूल की स्थिति

\n

एक्टिव, वेटिंग और ब्लॉक किए गए थ्रेड्स की संख्या ट्रैक करें। इसके लिए std::thread::hardware_concurrency() और अपने काउंटर का उपयोग करें:

\n\n
auto& threads_active = BuildGauge()\n    .Name("thread_pool_active_threads")\n    .Help("Number of currently active threads")\n    .Register(*registry);\n\n// टास्क शुरू/खत्म होने पर\nthreads_active.Set(active_thread_count);\n
\n\n

2.3. रिसोर्स लीक (डिस्क्रिप्टर, मेमोरी)

\n

new/delete को इंटरसेप्ट करके या एलोकेटर का उपयोग करके, किसी खास प्रकार की लाइव ऑब्जेक्ट्स की संख्या ट्रैक करें:

\n\n
auto& live_connection                

ब्लॉग

पुस्तक अनुशंसाएँ