Go (Golang) अनुप्रयोगों की निगरानी: उपकरणों और लाइब्रेरी का पूर्ण अवलोकन
निगरानी किसी भी सर्वर अनुप्रयोग के संचालन का एक महत्वपूर्ण हिस्सा है। Go (Golang) पारिस्थितिकी तंत्र के लिए कई उपकरण विकसित किए गए हैं जो वास्तविक समय में प्रदर्शन, स्थिति और त्रुटियों को ट्रैक करने की अनुमति देते हैं। इस लेख में, हम Go अनुप्रयोगों की निगरानी के लिए प्रमुख लाइब्रेरी और दृष्टिकोणों पर चर्चा करेंगे, जिसमें Prometheus, expvar, pprof और OpenTelemetry शामिल हैं।
Go अनुप्रयोगों की निगरानी क्यों आवश्यक है?
Go अनुप्रयोगों का उपयोग अक्सर उच्च-लोड माइक्रोसर्विसेज, API गेटवे और बैकग्राउंड प्रोसेसर के लिए किया जाता है। निगरानी के बिना, आप निम्नलिखित को अनदेखा करने का जोखिम उठाते हैं:
- मेमोरी और गोरूटीन लीक;
- धीमे अनुरोध और लॉक;
- लोड के तहत प्रदर्शन में गिरावट;
- डेटाबेस और बाहरी सेवाओं से कनेक्शन त्रुटियाँ।
1. Prometheus — मीट्रिक्स संग्रह का मानक
Prometheus Go दुनिया में मीट्रिक्स संग्रह के लिए वास्तविक मानक है। आधिकारिक क्लाइंट लाइब्रेरी prometheus/client_golang Prometheus प्रारूप में मीट्रिक्स को आसानी से निर्यात करने की अनुमति देती है।
स्थापना
go get github.com/prometheus/client_golang/prometheusgo get github.com/prometheus/client_golang/prometheus/promhttpउदाहरण: अनुरोध काउंटर और समय हिस्टोग्राम
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"}, ) 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, requestDuration)}
func middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() next.ServeHTTP(w, r) duration := time.Since(start).Seconds() requestCount.WithLabelValues(r.Method, r.URL.Path).Inc() requestDuration.WithLabelValues(r.Method, r.URL.Path).Observe(duration) })}
func main() { mux := http.NewServeMux() mux.Handle("/metrics", promhttp.Handler()) mux.Handle("/", middleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!")) }))) http.ListenAndServe(":8080", mux)}स्टार्ट करने के बाद, मीट्रिक्स http://localhost:8080/metrics पते पर उपलब्ध होंगे। Prometheus इस एंडपॉइंट से डेटा एकत्र करने के लिए कॉन्फ़िगर होगा।
2. expvar — अंतर्निहित मीट्रिक्स निर्यात
Go की मानक लाइब्रेरी एप्लिकेशन स्थिति चर प्रकाशित करने के लिए expvar पैकेज प्रदान करती है। इसे किसी बाहरी निर्भरता की आवश्यकता नहीं है।
उपयोग का उदाहरण
package main
import ( "expvar" "net/http")
var ( requests = expvar.NewInt("requests_total") errors = expvar.NewInt("errors_total"))
func handler(w http.ResponseWriter, r *http.Request) { requests.Add(1) // त्रुटि का अनुकरण if r.URL.Query().Get("error") == "1" { errors.Add(1) w.WriteHeader(http.StatusInternalServerError) return } w.Write([]byte("OK"))}
func main() { http.HandleFunc("/debug/vars", expvar.Handler().ServeHTTP) http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil)}मीट्रिक्स JSON प्रारूप में /debug/vars पथ पर उपलब्ध हैं। Prometheus के साथ एकीकरण के लिए, आप उपयोग कर सकते हैं <