परिचय: Go-अनुप्रयोगों के लिए निगरानी क्यों महत्वपूर्ण है
Go (Golang) ने अपने प्रदर्शन और सरलता के कारण उच्च-लोड माइक्रोसर्विसेज, API-गेटवे और नेटवर्क उपयोगिताओं के विकास में लोकप्रियता हासिल की है। हालांकि, सबसे स्थिर एप्लिकेशन को भी मेमोरी लीक, गोरूटीन हैंग या अचानक विलंबता वृद्धि का सामना करना पड़ सकता है। यहीं पर निगरानी काम आती है - Site Reliability Engineering (SRE) की एक प्रमुख प्रथा।
इस लेख में, हम देखेंगे कि Prometheus + Grafana स्टैक का उपयोग करके Go-अनुप्रयोगों की निगरानी कैसे सेट करें, पहले कौन से मीट्रिक एकत्र करें, और घटनाओं को रोकने के लिए अलर्ट कैसे सेट करें। यह सामग्री शुरुआती Go-डेवलपर्स और अपने सर्विसेज की observability में सुधार करने वाले अनुभवी इंजीनियरों दोनों के लिए उपयोगी होगी।
1. Go-अनुप्रयोग के मुख्य मीट्रिक
निगरानी सेट करने से पहले, यह समझना महत्वपूर्ण है कि Go-सर्विस के लिए कौन से मीट्रिक महत्वपूर्ण हैं। उन्हें तीन श्रेणियों में विभाजित किया जा सकता है:
1.1. Go रनटाइम मीट्रिक
Go runtime एप्लिकेशन की स्थिति के बारे में समृद्ध जानकारी प्रदान करता है। runtime पैकेज और मानक एक्सपोर्टर expvar का उपयोग करके, आप इसके बारे में डेटा प्राप्त कर सकते हैं:
- गोरूटीन की संख्या (
runtime.NumGoroutine()) — तेज वृद्धि गोरूटीन लीक का संकेत देती है। - मेमोरी उपयोग (
runtime.ReadMemStats()) —Alloc,HeapInuseऔरGCStatsपर नज़र रखें। - गार्बेज कलेक्शन का समय — यदि GC 5% से अधिक समय लेता है, तो यह अनुकूलन का संकेत है।
- सिस्टम कॉल की संख्या — ब्लॉकिंग का संकेत दे सकता है।
1.2. व्यावसायिक मीट्रिक
सर्विस के स्वास्थ्य को समझने के लिए व्यावसायिक संकेतकों की निगरानी करना आवश्यक है:
- RPS (Requests Per Second) — प्रति सेकंड अनुरोधों की संख्या।
- Latency (P50, P95, P99) — अनुरोध प्रसंस्करण विलंबता।
- Error rate — त्रुटियों का प्रतिशत (5xx, 4xx)।
- सक्रिय कनेक्शनों की संख्या (डेटाबेस, बाहरी API)।
1.3. बुनियादी ढांचे के मीट्रिक
सिस्टम मीट्रिक के बारे में न भूलें: CPU, मेमोरी, डिस्क I/O, नेटवर्क पैकेट। वे एप्लिकेशन समस्या को होस्ट समस्या से अलग करने में मदद करते हैं।
2. Prometheus के साथ एकीकरण: मीट्रिक निर्यात
Prometheus Go दुनिया में मीट्रिक संग्रह के लिए डी-फैक्टो मानक है। आइए चरण-दर-चरण एकीकरण देखें।
2.1. Go के लिए Prometheus क्लाइंट स्थापित करना
अपने go.mod में निर्भरता जोड़ें:
go get github.com/prometheus/client_golang/prometheusgo get github.com/prometheus/client_golang/prometheus/promhttp2.2. कस्टम मीट्रिक बनाना
अनुरोध काउंटर और प्रतिक्रिया समय के लिए हिस्टोग्राम बनाने का उदाहरण:
package main
import ( "net/http" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp")
var ( requestCount = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests", }, []string{"method", "endpoint", "status"}, ) requestDuration = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "http_request_duration_seconds", Help: "Duration of HTTP requests in seconds", Buckets: prometheus.DefBuckets, }, []string{"method", "endpoint"}, ))
func init() { prometheus.MustRegister(requestCount) prometheus.MustRegister(requestDuration)}
func metricsMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() wrapped := &responseWriter{ResponseWriter: w, statusCode: http.Stat