परिचय: स्थिरता के लिए C++ अनुप्रयोगों की निगरानी क्यों महत्वपूर्ण है?
आधुनिक C++ अनुप्रयोग उच्च-लोड वातावरण में काम करते हैं: गेम सर्वर, वित्तीय प्रणाली, IoT-उपकरण और एम्बेडेड समाधान। उचित निगरानी के बिना, पूरी तरह से लिखा गया कोड भी विनाशकारी परिणाम दे सकता है - मेमोरी लीक से लेकर रात 3 बजे सेवा के पूर्ण रूप से डाउन होने तक। इस लेख में, हम C++ अनुप्रयोगों की पूर्ण निगरानी सेट करने का तरीका समझेंगे: कौन से मीट्रिक एकत्र करें, लॉगिंग कैसे व्यवस्थित करें और अलर्ट कैसे सेट करें ताकि आप चैन की नींद सो सकें।
1. C++ अनुप्रयोगों के प्रमुख मीट्रिक
C++ अनुप्रयोगों की निगरानी सही मीट्रिक चुनने से शुरू होती है। आइए उन्हें तीन समूहों में विभाजित करें:
1.1. सिस्टम मीट्रिक (OS-level)
- CPU Usage — प्रतिशत में प्रोसेसर लोड और user/kernel mode में समय।
- Memory Usage — RSS (Resident Set Size), Virtual Memory, page faults की संख्या।
- Disk I/O — डिस्क पर रीड/राइट ऑपरेशन (डेटाबेस के लिए विशेष रूप से महत्वपूर्ण)।
- Network I/O — भेजे/प्राप्त बाइट्स की संख्या, त्रुटियों की संख्या।
1.2. एप्लिकेशन मीट्रिक (Application-level)
- Request latency — अनुरोध प्रसंस्करण समय (p50, p95, p99)।
- Throughput — प्रति सेकंड संसाधित अनुरोधों की संख्या।
- Error rate — त्रुटियों का प्रतिशत (अपवाद, टाइमआउट)।
- Connection pool — सक्रिय/प्रतीक्षा कनेक्शनों की संख्या।
1.3. C++ रनटाइम मीट्रिक
- Memory allocation — new/delete कॉल की संख्या, हीप में आवंटन।
- Thread count — सक्रिय थ्रेड्स की संख्या, डेडलॉक डिटेक्शन।
- Object pool utilization — पूल में व्यस्त वस्तुओं का प्रतिशत।
C++ पर Prometheus-क्लाइंट के माध्यम से मीट्रिक निर्यात का उदाहरण:
#include <prometheus/exposer.h>#include <prometheus/registry.h>#include <prometheus/counter.h>#include <prometheus/gauge.h>
using namespace prometheus;
int main() { // मीट्रिक के लिए HTTP सर्वर बनाएं Exposer exposer{"0.0.0.0:8080"}; auto registry = std::make_shared<Registry>();
// अनुरोध काउंटर auto& request_counter = BuildCounter() .Name("http_requests_total") .Help("Total number of HTTP requests") .Register(*registry);
// वर्तमान थ्रेड संख्या के लिए Gauge auto& thread_gauge = BuildGauge() .Name("app_thread_count") .Help("Current number of active threads") .Register(*registry);
// मीट्रिक पंजीकृत करें exposer.RegisterCollectable(registry);
// एप्लिकेशन कार्य का अनुकरण while (true) { request_counter.Increment(); thread_gauge.Set(5.0); // उदाहरण मान std::this_thread::sleep_for(std::chrono::seconds(1)); }}2. मीट्रिक संग्रह उपकरण: Prometheus और Grafana
C++ इकोसिस्टम में मीट्रिक संग्रह के लिए डी-फैक्टो मानक Prometheus है जो Grafana के साथ जोड़ा जाता है। Prometheus एक pull-सिस्टम है: आपका एप्लिकेशन HTTP पर मीट्रिक प्रदान करता है, और Prometheus उन्हें निर्धारित अंतराल पर स्वयं लेता है।
2.1. C++ में मीट्रिक निर्यात सेटअप
लोकप्रिय लाइब्रेरी:
- prometheus-cpp (आधिकारिक C++ Prometheus क्लाइंट)।
- opentelemetry-cpp — ट्रेसिंग और मीट्रिक के लिए (अधिक आधुनिक)।
- NanoMsg + custom exporter — एम्बेडेड सिस्टम के लिए।
Prometheus-cpp के साथ एकीकरण का उदाहरण (पूरा कोड ऊपर)। चलाने के बाद एंडपॉइंट जांचें:
curl http://localhost:8080/metrics
# HELP http_requests_total Total number of HTTP requests# TYPE http_requests_total counterhttp_reques