Go एप्लिकेशन मॉनिटरिंग: उन्नत मेट्रिक्स और अलर्ट्स
\nआधुनिक Go एप्लिकेशन को सिर्फ उच्च प्रदर्शन ही नहीं, बल्कि विश्वसनीय मॉनिटरिंग की भी आवश्यकता होती है। बुनियादी मेट्रिक्स (CPU, मेमोरी, रिक्वेस्ट) इकट्ठा करना तो बस पहला कदम है। उन्नत स्तर पर, आपको कस्टम मेट्रिक्स लागू करने, बिज़नेस लॉजिक पर आधारित अलर्ट सेट करने और फॉल्ट टॉलरेंस सुनिश्चित करने की जरूरत होती है। इस लेख में हम देखेंगे कि Prometheus, Grafana और खुद के अलर्ट्स का उपयोग करके Go एप्लिकेशन की व्यापक मॉनिटरिंग कैसे लागू करें।
\n\n1. Go में Prometheus के साथ उन्नत मेट्रिक्स संग्रह
\nलाइब्रेरी prometheus/client_golang न केवल मानक मेट्रिक्स बल्कि कस्टम मेट्रिक्स भी इकट्ठा करने की अनुमति देती है। आइए HTTP सर्वर के लिए कस्टम मेट्रिक्स कलेक्टर सेटअप करने का एक उदाहरण देखें।
package main\n\nimport (\n "net/http"\n "github.com/prometheus/client_golang/prometheus"\n "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nvar (\n requestDuration = prometheus.NewHistogramVec(\n prometheus.HistogramOpts{\n Name: "http_request_duration_seconds",\n Help: "HTTP रिक्वेस्ट के निष्पादन का समय।",\n Buckets: prometheus.DefBuckets,\n },\n []string{"method", "path", "status"},\n )\n activeRequests = prometheus.NewGauge(\n prometheus.GaugeOpts{\n Name: "http_active_requests_total",\n Help: "वर्तमान में सक्रिय रिक्वेस्ट की संख्या।",\n },\n )\n)\n\nfunc init() {\n prometheus.MustRegister(requestDuration)\n prometheus.MustRegister(activeRequests)\n}\n\nfunc metricsMiddleware(next http.Handler) http.Handler {\n return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n activeRequests.Inc()\n defer activeRequests.Dec()\n\n timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) {\n requestDuration.WithLabelValues(r.Method, r.URL.Path, "200").Observe(v)\n }))\n defer timer.ObserveDuration()\n\n next.ServeHTTP(w, r)\n })\n}\n\nfunc main() {\n mux := http.NewServeMux()\n mux.Handle("/metrics", promhttp.Handler())\n mux.Handle("/api", metricsMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n w.Write([]byte("Hello, Go!"))\n })))\n http.ListenAndServe(":8080", mux)\n}\n\nइस उदाहरण में, हम रिक्वेस्ट की अवधि के लिए एक हिस्टोग्राम और सक्रिय रिक्वेस्ट के लिए एक गेज बना रहे हैं। लेबल (labels) का उपयोग करके हम मेट्रिक्स को विधि, पथ और स्थिति के अनुसार विस्तृत कर सकते हैं।
\n\n2. बिज़नेस लॉजिक पर आधारित अलर्ट्स सेटअप करना
\nअलर्ट्स सिर्फ तकनीकी (जैसे उच्च CPU लोड) नहीं होने चाहिए, बल्कि बिज़नेस-उन्मुख भी होने चाहिए। उदाहरण के लिए, किसी महत्वपूर्ण एंडपॉइंट के लिए प्रतिक्रिया समय अधिक होना या सफल ट्रांजेक्शन की संख्या में गिरावट। Prometheus में अलर्ट्स का कॉन्फ़िगरेशन (फ़ाइल alerts.yml):
groups:\n - name: go_app_alerts\n rules:\n - alert: HighRequestLatency\n expr: http_request_duration_seconds{job="go-app"} > 1.0\n for: 5m\n labels:\n severity: critical\n annotations:\n summary: "उच्च रिक्वेस्ट विलंबता ({{ $value }}s)"\n description: "एंडपॉइंट {{ $labels.path }} पर 5 मिनट से अधिक समय से 1 सेकंड से अधिक विलंबता है।"\n\n - alert: ActiveRequestsSurge\n expr: http_active_requests_total{job="go-app"} > 100\n for: 2m\n labels:\n severity: warning\n annotations:\n summary: "सक्रिय रिक्वेस्ट में उछाल ({{ $value }})"\n description: "सक्रिय रिक्वेस्ट की संख्या 2 मिनट के भीतर 100 से अधिक हो गई है।"\n\n - alert: ErrorRateHigh\n expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1\n for: 10m\n labels:\n severity: critical\n annotations:\n summary: "उच्च 5xx त्रुटि दर"\n description: "पिछले 10 मिनट में त्रुटि दर 10% से अधिक है।"\n\nध्यान दें कि उपयोग किया गया है