Go-एप्लिकेशन की निगरानी: लॉगिंग और ट्रेसिंग के लिए 3 उपकरण

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

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

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

आपका Go-एप्लिकेशन चुप क्यों है, और इसे कैसे ठीक करें?

\n

आपने Go में एक आदर्श माइक्रोसर्विस लिखी है। यह सभी परीक्षण पास करती है, जल्दी शुरू होती है और बहुत कम मेमोरी खपत करती है। आप इसे प्रोडक्शन में डिप्लॉय करते हैं — और एक घंटे बाद उपयोगकर्ता धीमी गति की शिकायत करते हैं। आप सर्वर पर जाते हैं, खाली टर्मिनल देखते हैं और समझ जाते हैं: एप्लिकेशन चुप है। कोई लॉग नहीं, कोई मेट्रिक्स नहीं, कोई समझ नहीं कि क्या गलत हुआ।

\n

परिचित स्थिति? Go-एप्लिकेशन की observability (अवलोकनीयता) की दुनिया में आपका स्वागत है। निगरानी और लॉगिंग के बिना, आपका कोड एक ब्लैक बॉक्स है। आज हम देखेंगे कि इसे एक पारदर्शी सिस्टम में कैसे बदला जाए, जहाँ हर देरी और हर त्रुटि साफ दिखाई दे।

\n

मैं तीन काम के उपकरण, Go में वास्तविक कोड उदाहरण दिखाऊंगा और एक चेकलिस्ट दूंगा जो आपके प्रोडक्शन को बचाएगी। चलिए शुरू करते हैं!

\n\n

1. संरचित लॉगिंग: कंसोल में लिखना कैसे बंद करें और जीना शुरू करें

\n

भोला fmt.Println("त्रुटि:", err) पुरानी बात है। आधुनिक Go लॉगिंग में व्यवस्था चाहिए: JSON प्रारूप, स्तर (debug, info, warn, error), खोज के लिए फ़ील्ड। मिलिए राजा से — Uber की लाइब्रेरी zap।

\n\n

zap ही क्यों?

\n
    \n
  • गति: यह उच्च लोड पर मानक log से 10-100 गुना तेज़ है।
  • \n
  • संरचना: आप कुंजी और मान जोड़ते हैं, स्ट्रिंग को प्लस से नहीं जोड़ते।
  • \n
  • लचीलापन: फ़ाइल, stdout, Elasticsearch — कहीं भी लिख सकते हैं।
  • \n
\n\n

स्थापना और बुनियादी उदाहरण

\n
go get -u go.uber.org/zap
\n\n

सरल लॉगर का कोड:

\n
package main\n\nimport (\n    "go.uber.org/zap"\n)\n\nfunc main() {\n    logger, _ := zap.NewProduction()\n    defer logger.Sync() // बाहर निकलने से पहले बफर फ्लश करें\n\n    logger.Info("सेवा शुरू हुई",\n        zap.String("env", "production"),\n        zap.Int("port", 8080),\n    )\n\n    // त्रुटि के साथ उदाहरण\n    err := someFunction()\n    if err != nil {\n        logger.Error("ऑपरेशन निष्पादित करने में विफल",\n            zap.Error(err),\n            zap.String("module", "database"),\n        )\n    }\n}
\n\n

आउटपुट में आपको साफ JSON मिलता है:

\n
{"level":"info","ts":1700000000.123,"msg":"सेवा शुरू हुई","env":"production","port":8080}
\n\n

अब Kibana या Grafana Loki जैसा कोई भी उपकरण इन लॉग को फ़ील्ड के अनुसार पार्स कर सकता है। पिछले एक घंटे में "database" मॉड्यूल की सभी त्रुटियाँ खोजनी हैं? एक क्लिक।

\n\n

सुझाव: रहस्य और PII को लॉग न करें

\n

जाँच जोड़ें: यदि फ़ील्ड में पासवर्ड या ईमेल है — तो इसे मास्क करें। संवेदनशील डेटा के लिए zap.String("user", "***") का उपयोग करें।

\n\n

2. मेट्रिक्स और निगरानी: कोड को डैशबोर्ड में बदलना

\n

लॉग अच्छे हैं, लेकिन वे अतीत के बारे में बताते हैं। मेट्रिक्स आपके एप्लिकेशन की वास्तविक समय की नब्ज हैं। Go एप्लिकेशन की निगरानी के लिए डी-फैक्टो मानक Prometheus + इसकी क्लाइंट लाइब्रेरी है।

\n\n

क्या मापें?

\n
    \n
  • RPS (अनुरोध प्रति सेकंड) — सेवा पर लोड।
  • \n
  • Latency (p50, p95, p99) — प्रतिक्रिया समय।
  • \n
  • Error rate — त्रुटियों का प्रतिशत।
  • \n
  • Goroutines — गोरूटीन लीक।
  • \n
  • Memory / CPU — संसाधन।
  • \n
\n\n

उदाहरण: HTTP सर्वर मेट्रिक्स जोड़ना

\n
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    requestCount = prometheus.NewCounterVec(\n        prometheus.CounterOpts{\n            Name: "http_requests_total",\n            Help: "HTTP अनुरोधों की कुल संख्या",\n        },\n        []string{"method", "endpoint", "status"},\n    )\n    requestDuration = prometheus.NewHistogramVec(\n        prometheus.HistogramOpts{\n            Name:    "http_request                

ब्लॉग

पुस्तक अनुशंसाएँ