Prometheus मेट्रिक्स Go (Golang) में: पूर्ण मॉनिटरिंग गाइड

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

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

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

Prometheus मेट्रिक्स Go (Golang) में: पूर्ण गाइड

Prometheus एक ओपन-सोर्स मॉनिटरिंग सिस्टम है जो आधुनिक माइक्रोसर्विस आर्किटेक्चर में मेट्रिक्स इकट्ठा करने और विश्लेषण करने का डी-फैक्टो मानक बन गया है। Go (Golang) इकोसिस्टम में, prometheus/client_golang लाइब्रेरी एप्लिकेशन को इंस्ट्रूमेंट करने के लिए एक शक्तिशाली और लचीला टूलसेट प्रदान करती है। इस लेख में, हम विस्तार से जानेंगे कि अपने Go एप्लिकेशन में Prometheus मेट्रिक्स कैसे जोड़ें, HTTP एंडपॉइंट कॉन्फ़िगर करें और कस्टम मेट्रिक्स टाइप बनाएं।

इंस्टॉलेशन और सेटअप

शुरू करने के लिए, Go के लिए आधिकारिक Prometheus क्लाइंट इंस्टॉल करें:

go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

पहली लाइब्रेरी मेट्रिक्स बनाने और रजिस्टर करने का कोर प्रदान करती है, दूसरी /metrics एंडपॉइंट के लिए तैयार HTTP हैंडलर देती है।

Prometheus मेट्रिक्स के बेसिक टाइप

Prometheus चार मुख्य मेट्रिक्स टाइप सपोर्ट करता है, जिनमें से प्रत्येक विशिष्ट समस्याओं को हल करने के लिए डिज़ाइन किया गया है:

  • Counter (काउंटर) — एक मोनोटोनिक रूप से बढ़ने वाला मान। रिक्वेस्ट, एरर या पूर्ण किए गए कार्यों की संख्या गिनने के लिए आदर्श।
  • Gauge (गेज) — एक मान जो बढ़ और घट सकता है। वर्तमान तापमान, सक्रिय कनेक्शनों की संख्या, या कतार के आकार के लिए उपयोगी।
  • Histogram (हिस्टोग्राम) — अवलोकन (जैसे रिक्वेस्ट का समय) इकट्ठा करता है और उन्हें कस्टम "बकेट" में समूहित करता है। क्वांटाइल की गणना करने की अनुमति देता है।
  • Summary (सारांश) — हिस्टोग्राम के समान, लेकिन एप्लिकेशन साइड पर क्वांटाइल की गणना करता है। व्यावसायिक लॉजिक के लिए क्वांटाइल महत्वपूर्ण होने पर अनुशंसित।

व्यावहारिक उदाहरण: मेट्रिक्स के साथ HTTP सर्वर

एक सरल वेब एप्लिकेशन बनाते हैं जो रिक्वेस्ट की संख्या, उनकी अवधि और सक्रिय कनेक्शनों की वर्तमान संख्या को रिकॉर्ड करता है।

package main

import (
    "fmt"
    "net/http"
    "time"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    // "method" और "endpoint" लेबल वाला रिक्वेस्ट काउंटर
    requestCounter = 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:    "Histogram of request duration in seconds",
            Buckets: prometheus.DefBuckets, // [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]
        },
        []string{"method", "endpoint"},
    )

    // सक्रिय कनेक्शनों का गेज
    activeConnections = prometheus.NewGauge(
        prometheus.GaugeOpts{
            Name: "http_active_connections",
            Help: "Current number of active connections",
        },
    )
)

func init() {
    // Prometheus रजिस्ट्री में मेट्रिक्स रजिस्टर करें
    prometheus.MustRegister(requestCounter)
    prometheus.MustRegister(requestDuration)
    prometheus.MustRegister(activeConnections)
}

// middleware हर HTTP रिक्वेस्ट को मेट्रिक्स इकट्ठा करने के लिए रैप करता है
func metricsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // सक्रिय कनेक्शन काउंटर बढ़ाएं
        activeConnections.Inc()
        defer activeConnections.Dec()

        start := time.Now()
        next.ServeHTTP(w, r)
        duration := time.Since(start).Seconds()

        // रिक्वेस्ट मेट्रिक्स रिकॉर्ड करें
        requestCounter.WithLabelValues(r.Method, r.URL.Path).Inc()
        requestDuration.WithLabelValues(r.Method, r.URL.                    

अनुशंसाएँ