Go अनुप्रयोगों की निगरानी: लाइब्रेरी और उपकरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) अनुप्रयोगों की निगरानी: उपकरण और लाइब्रेरी

\n\n

निगरानी किसी भी सेवा के प्रोडक्शन-संचालन का एक अभिन्न अंग है। Go (Golang) पर अनुप्रयोगों के लिए, पारिस्थितिकी तंत्र अंतर्निहित समाधान और शक्तिशाली बाहरी उपकरण दोनों प्रदान करता है। इस लेख में, हम बुनियादी प्रोफाइलिंग से लेकर मीट्रिक्स संग्रह और ट्रेसिंग तक के मुख्य दृष्टिकोणों पर चर्चा करेंगे।

\n\n

1. अंतर्निहित साधन: पैकेज expvar

\n

expvar पैकेज एप्लिकेशन स्थिति चर प्रकाशित करने के लिए एक सरल HTTP एंडपॉइंट प्रदान करता है। इसे बाहरी निर्भरता की आवश्यकता नहीं है और यह त्वरित निदान के लिए आदर्श है।

\n\n

कनेक्शन और उपयोग

\n
package main\n\nimport (\n    "expvar"\n    "net/http"\n)\n\nvar requestsCount = expvar.NewInt("total_requests")\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    requestsCount.Add(1)\n    w.Write([]byte("OK"))\n}\n\nfunc main() {\n    http.HandleFunc("/api", handler)\n    // एंडपॉइंट /debug/vars स्वचालित रूप से उपलब्ध होगा\n    http.ListenAndServe(":8080", nil)\n}\n
\n

स्टार्ट करने के बाद, /debug/vars पर जाएँ - आपको अनुरोध काउंटर, GC डेटा और मेमोरी सहित मीट्रिक्स के साथ JSON दिखाई देगा।

\n\n

2. Prometheus — मीट्रिक्स का डी-फैक्टो मानक

\n

Prometheus Go के लिए सबसे लोकप्रिय निगरानी प्रणाली है। लाइब्रेरी prometheus/client_golang आपको Prometheus सर्वर द्वारा समझे जाने वाले प्रारूप में मीट्रिक्स निर्यात करने की अनुमति देती है।

\n\n

स्थापना

\n
go get github.com/prometheus/client_golang/prometheus\ngo get github.com/prometheus/client_golang/prometheus/promhttp\n
\n\n

उदाहरण: काउंटर और हिस्टोग्राम

\n
package main\n\nimport (\n    "net/http"\n    "time"\n\n    "github.com/prometheus/client_golang/prometheus"\n    "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nvar (\n    requestCount = prometheus.NewCounterVec(\n        prometheus.CounterOpts{\n            Name: "http_requests_total",\n            Help: "Total number of HTTP requests",\n        },\n        []string{"method", "endpoint"},\n    )\n    requestDuration = prometheus.NewHistogramVec(\n        prometheus.HistogramOpts{\n            Name:    "http_request_duration_seconds",\n            Help:    "Histogram of request durations",\n            Buckets: prometheus.DefBuckets,\n        },\n        []string{"method"},\n    )\n)\n\nfunc init() {\n    prometheus.MustRegister(requestCount, requestDuration)\n}\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    start := time.Now()\n    requestCount.WithLabelValues(r.Method, r.URL.Path).Inc()\n    w.Write([]byte("Hello"))\n    requestDuration.WithLabelValues(r.Method).Observe(time.Since(start).Seconds())\n}\n\nfunc main() {\n    http.Handle("/metrics", promhttp.Handler())\n    http.HandleFunc("/", handler)\n    http.ListenAndServe(":8080", nil)\n}\n
\n

Prometheus /metrics एंडपॉइंट से मीट्रिक्स एकत्र करेगा। आप इस डेटा के आधार पर Alertmanager में अलर्ट जोड़ सकते हैं।

\n\n

3. pprof के साथ प्रोफाइलिंग

\n

पैकेज net/http/pprof एप्लिकेशन में CPU, मेमोरी, गोरूटीन और लॉक की प्रोफाइलिंग के लिए एंडपॉइंट जोड़ता है। यह बाधाओं को खोजने के लिए एक अपरिहार्य उपकरण है।

\n\n

त्वरित प्रारंभ

\n
package main\n\nimport (\n    "log"\n    "net/http"\n    _ "net/http/pprof" // हैंडलर पंजीकृत करता है\n)\n\nfunc main() {\n    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n        w.Write([]byte("Hello, pprof!"))\n    })\n    log.Fatal(http.ListenAndServe(":6060", nil))\n}\n
\n

अब एंडपॉइंट उपलब्ध हैं:

\n
    \n
  • /debug/pprof/ — प्रोफाइल की सूची
  • \n
  • /debug/pprof/profile — CPU-प्रोफाइल
  • \n
  • /debug/pprof/heap — मेमोरी प्रोफाइल
  • \n
  • /debug/pprof/goroutine — गोरूटीन स्टैक
  • \n
\n

कमांड go tool pprof या vi के साथ प्रोफाइल का विश्लेषण करें

अनुशंसाएँ