Go-अनुप्रयोगों की उन्नत निगरानी: मेट्रिक्स से अलर्ट तक
\n\nGo (Golang) में आधुनिक विकास में, बुनियादी लॉगिंग और Health Check पर्याप्त नहीं हैं। Production-सिस्टम के लिए गहन observability की आवश्यकता होती है: कस्टम मेट्रिक्स का संग्रह, उनका Prometheus में निर्यात, Grafana में विज़ुअलाइज़ेशन और स्वचालित अलर्ट। इस लेख में हम Go-अनुप्रयोगों की निगरानी के उन्नत स्तर पर चर्चा करेंगे — मेट्रिक्स आर्किटेक्चर से लेकर व्यावसायिक तर्क पर आधारित अलर्ट के कॉन्फ़िगरेशन तक।
\n\nनिगरानी आर्किटेक्चर: Prometheus + Go
\n\nGo के लिए मानक निगरानी स्टैक में शामिल हैं:
\n- \n
- Prometheus — मेट्रिक्स संग्रह और भंडारण प्रणाली (pull-मॉडल)। \n
- Prometheus का Go-क्लाइंट (
prometheus/client_golang) — मेट्रिक्स निर्यात के लिए लाइब्रेरी। \n - Grafana — डैशबोर्ड का विज़ुअलाइज़ेशन। \n
- Alertmanager — अलर्ट प्रबंधन (email, Slack, Telegram)। \n
Go-एप्लिकेशन को एक HTTP-एंडपॉइंट (आमतौर पर /metrics) प्रदान करना चाहिए, जहाँ से Prometheus डेटा लेता है। आइए बुनियादी कॉन्फ़िगरेशन देखें।
package main\n\nimport (\n "net/http"\n "github.com/prometheus/client_golang/prometheus"\n "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nfunc main() {\n // मानक Go मेट्रिक्स का पंजीकरण (runtime, GC, goroutines)\n prometheus.MustRegister(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}))\n prometheus.MustRegister(prometheus.NewGoCollector())\n\n http.Handle("/metrics", promhttp.Handler())\n http.ListenAndServe(":8080", nil)\n}\n\nएप्लिकेशन चलाने पर, आपको मानक मेट्रिक्स मिलेंगे: go_goroutines, process_cpu_seconds_total, go_memstats_alloc_bytes और अन्य। लेकिन उन्नत निगरानी के लिए यह पर्याप्त नहीं है — कस्टम मेट्रिक्स की आवश्यकता है।
कस्टम मेट्रिक्स बनाना: Gauge, Counter, Histogram
\n\nPrometheus चार मुख्य प्रकार के मेट्रिक्स का समर्थन करता है। आइए HTTP-अनुरोधों को संसाधित करने वाले Go-एप्लिकेशन के उदाहरण पर उन पर विचार करें।
\n\nCounter (काउंटर) — घटनाओं की संख्या
\nअनुरोधों, त्रुटियों, कार्यों के निष्पादन की गणना के लिए उपयोग किया जाता है।
\n\nvar requestCounter = prometheus.NewCounterVec(\n prometheus.CounterOpts{\n Name: "http_requests_total",\n Help: "HTTP-अनुरोधों की कुल संख्या",\n },\n []string{"method", "endpoint", "status"},\n)\n\nfunc init() {\n prometheus.MustRegister(requestCounter)\n}\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n // अनुरोध प्रसंस्करण\n requestCounter.WithLabelValues(r.Method, r.URL.Path, "200").Inc()\n}\n\nGauge (गेज) — वर्तमान मान
\nकतारों, कनेक्शन पूल, तापमान की निगरानी के लिए आदर्श।
\n\nvar queueSize = prometheus.NewGauge(\n prometheus.GaugeOpts{\n Name: "task_queue_size",\n Help: "कार्य कतार का वर्तमान आकार",\n },\n)\n\nfunc addToQueue() {\n queueSize.Inc()\n}\n\nfunc processFromQueue() {\n queueSize.Dec()\n}\n\nHistogram (हिस्टोग्राम) — मानों का वितरण
\nप्रतिक्रिया समय या डेटा आकार मापने के लिए उपयोग किया जाता है।
\n\nvar requestDuration = prometheus.NewHistogramVec(\n prometheus.HistogramOpts{\n Name: "http_request_duration_seconds",\n Help: "अनुरोध प्रसंस्करण समय का हिस्टोग्राम",\n Buckets: prometheus.DefBuckets, // 0.005, 0.01, 0.025, 0.05, ...\n },\n []string{"endpoint"},\n)\n\nfunc measureRequest(endpoint string, duration float64) {\n requestDuration.WithLabelValues(endpoint).Observe(duration)\n}\n\nSummary (सारांश) — क्वांटाइल
\nहिस्टोग्राम के समान, लेकिन सटीक क्वांटाइल (p50, p95, p99) की गणना करता है।
\n\nvar requestLatency = prometheus.NewSummaryVec(\n prometheus.SummaryOpts{\n Name: "http_request_latency_seconds",\n Help: "अनुरोध विलंबता (क्वांटाइल)",\n