C++ एप्लिकेशन मॉनिटरिंग: उन्नत मेट्रिक्स और अलर्ट सेटअप
\n\nहाई-लोड सिस्टम में C++ एप्लिकेशन की मॉनिटरिंग अब कोई विकल्प नहीं, बल्कि एक ज़रूरत है। सिर्फ CPU और मेमोरी की बुनियादी जानकारी से पूरी तस्वीर नहीं मिलती। उन्नत स्तर पर, आपको इंटरनल क्यू, क्रिटिकल सेक्शन का एक्ज़ीक्यूशन टाइम, रिसोर्स लीक की संख्या और थ्रेड पूल की स्थिति पर नज़र रखनी होती है। इस लेख में, हम जानेंगे कि मेट्रिक्स कैसे इकट्ठा करें, अलर्ट कैसे सेट करें, और C++ एप्लिकेशन को Prometheus और Grafana जैसी आधुनिक मॉनिटरिंग सिस्टम से कैसे जोड़ें।
\n\n1. एप्लिकेशन स्तर पर मेट्रिक्स संग्रह
\n\nउन्नत मॉनिटरिंग की पहली सीढ़ी है कोड में सीधे इंस्ट्रूमेंटेशन जोड़ना। बाहरी एजेंटों के बजाय, हम बिज़नेस लॉजिक में ही काउंटर, हिस्टोग्राम और गेज जोड़ते हैं।
\n\nआइए Prometheus-CPP लाइब्रेरी का उपयोग करके एक उदाहरण देखें। मान लीजिए, हमारे पास HTTP रिक्वेस्ट हैंडलर है और हम यह ट्रैक करना चाहते हैं:
\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\n2. उन्नत मेट्रिक्स: क्यू, थ्रेड पूल और लीक
\n\nहाई-लोड C++ एप्लिकेशन के लिए इंटरनल रिसोर्स की स्थिति पर नज़र रखना बेहद ज़रूरी है। आइए तीन मुख्य प्रकार की मेट्रिक्स देखें:
\n\n2.1. मैसेज क्यू की गहराई
\nअगर एप्लिकेशन टास्क क्यू का उपयोग करता है (जैसे, std::queue म्यूटेक्स के साथ), तो क्यू के मौजूदा आकार के लिए एक गेज जोड़ें:
#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\n2.2. थ्रेड पूल की स्थिति
\nएक्टिव, वेटिंग और ब्लॉक किए गए थ्रेड्स की संख्या ट्रैक करें। इसके लिए std::thread::hardware_concurrency() और अपने काउंटर का उपयोग करें:
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\n2.3. रिसोर्स लीक (डिस्क्रिप्टर, मेमोरी)
\nnew/delete को इंटरसेप्ट करके या एलोकेटर का उपयोग करके, किसी खास प्रकार की लाइव ऑब्जेक्ट्स की संख्या ट्रैक करें:
auto& live_connection