Go (Golang) अनुप्रयोग निगरानी: मीट्रिक्स से प्रोफाइलिंग तक
Go (Golang) — उच्च-लोड सर्वर अनुप्रयोगों के लिए बनाई गई भाषा। हालांकि, सबसे कुशल कोड में भी विफलताएं, मेमोरी लीक या अनुचित रूप से उच्च विलंबता हो सकती है। निगरानी के बिना, आपको समस्या के बारे में केवल नाराज उपयोगकर्ताओं से पता चलने का जोखिम है। इस लेख में, हम Go अनुप्रयोगों की निगरानी के लिए प्रमुख पुस्तकालयों और उपकरणों पर चर्चा करेंगे: मीट्रिक्स संग्रह से लेकर ट्रेसिंग और प्रोफाइलिंग तक।
Go अनुप्रयोग की निगरानी क्यों करें?
- प्रदर्शन: प्रतिक्रिया समय, गोरूटीन की संख्या, CPU और मेमोरी उपयोग पर नज़र रखना।
- विश्वसनीयता: त्रुटियों, पैनिक, पुनरारंभ की संख्या को नियंत्रित करना।
- स्केलिंग: यह समझना कि कब अधिक रेप्लिका जोड़ने की आवश्यकता है।
- व्यावसायिक मीट्रिक्स: अनुरोधों की संख्या, सक्रिय उपयोगकर्ता, संसाधित डेटा की मात्रा।
1. अंतर्निहित पैकेज expvar
सबसे सरल तरीका expvar है। यह बुनियादी मीट्रिक्स के साथ एक HTTP एंडपॉइंट प्रदान करता है: गोरूटीन की संख्या, मेमोरी उपयोग, अपटाइम। त्वरित शुरुआत के लिए उपयुक्त।
package main
import ( "expvar" "net/http")
var requestCount = expvar.NewInt("requests_total")
func handler(w http.ResponseWriter, r *http.Request) { requestCount.Add(1) w.Write([]byte("Hello, Go!"))}
func main() { http.HandleFunc("/", handler) // मीट्रिक्स /debug/vars पते पर उपलब्ध हैं http.ListenAndServe(":8080", nil)}अनुप्रयोग चलाएँ और http://localhost:8080/debug/vars खोलें — आपको मीट्रिक्स के साथ JSON दिखाई देगा।
2. Prometheus + prometheus/client_golang
Prometheus Go में मीट्रिक्स संग्रह के लिए डी-फैक्टो मानक है। prometheus/client_golang लाइब्रेरी आपको कस्टम मीट्रिक्स पंजीकृत करने की अनुमति देती है: काउंटर, हिस्टोग्राम, सारांश।
package main
import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp")
var ( httpRequests = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, []string{"method", "path"}, ))
func init() { prometheus.MustRegister(httpRequests)}
func handler(w http.ResponseWriter, r *http.Request) { httpRequests.WithLabelValues(r.Method, r.URL.Path).Inc() w.Write([]byte("OK"))}
func main() { http.HandleFunc("/", handler) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}/metrics एंडपॉइंट डेटा को उस प्रारूप में प्रस्तुत करता है जिसे Prometheus समझता है। इसके बाद आप Grafana में डैशबोर्ड कॉन्फ़िगर कर सकते हैं।
3. pprof के साथ प्रोफाइलिंग
net/http/pprof पैकेज प्रोफाइलिंग के लिए एंडपॉइंट जोड़ता है: CPU, मेमोरी, लॉक, गोरूटीन। यह बाधाओं को खोजने के लिए एक अपरिहार्य उपकरण है।
package main
import ( "net/http" _ "net/http/pprof" // प्रोफाइलर कनेक्ट करें)
func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("प्रोफाइलिंग सक्रिय है")) }) http.ListenAndServe(":6060", nil)}अब आप चला सकते हैं:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30यह 30 सेकंड का CPU प्रोफाइल एकत्र करेगा। इंटरैक्टिव मोड में इसका विश्लेषण करें या SVG/PDF में निर्यात करें।
4. OpenTelemetry — ट्रेसिंग और मीट्रिक्स
OpenTelemetry (OTel) अवलोकनीयता के लिए आधुनिक मानक है। यह मीट्रिक्स, लॉग और ट्रेस को जोड़ता है। Go के लिए आधिकारिक SDK go.opentelemetry.io/otel है।
package main
import ( "context" "log" "net/http" "go.opentelemetry.io