C# एप्लिकेशन मॉनिटरिंग: उन्नत स्तर पर मेट्रिक्स और अलर्ट्स
\n\nआधुनिक C# (.NET) डेवलपमेंट में, केवल "काम करने वाला" एप्लिकेशन अब गुणवत्ता का पर्याप्त मानदंड नहीं रह गया है। प्रोडक्शन सिस्टम को निरंतर निगरानी की आवश्यकता होती है: आपको जानना होगा कि सर्विस कितनी मेमोरी ले रही है, रिक्वेस्ट कितनी तेजी से प्रोसेस हो रही हैं, और मैसेज ब्रोकर में कतार तो नहीं बढ़ रही है। मॉनिटरिंग और अलर्ट सिस्टम के बिना, आपको समस्या के बारे में यूजर्स से ही पता चलने का जोखिम है। इस लेख में, हम C# एप्लिकेशन के लिए मेट्रिक्स कलेक्शन, विज़ुअलाइज़ेशन और अलर्ट सेटअप की उन्नत तकनीकों पर चर्चा करेंगे, जिसमें Prometheus, Grafana और OpenTelemetry जैसे आधुनिक टूल का उपयोग होगा।
\n\nउन्नत मॉनिटरिंग क्यों ज़रूरी है?
\nबेसिक मॉनिटरिंग (CPU, RAM, डिस्क) पूरी तस्वीर नहीं देती। C# एप्लिकेशन के लिए विशिष्ट मेट्रिक्स महत्वपूर्ण हैं: गार्बेज कलेक्शन (GC) की संख्या, थ्रेड लॉक का समय, डेटाबेस कनेक्शन पूल का आकार। इन मेट्रिक्स पर अलर्ट आपको विफलता होने से पहले प्रतिक्रिया करने में सक्षम बनाते हैं। उन्नत दृष्टिकोण में तीन स्तर शामिल हैं:
\n- \n
- Infrastructure level — सर्वर के मानक मेट्रिक्स। \n
- Application level — बिज़नेस लॉजिक के मेट्रिक्स (विलंबता, त्रुटियाँ, कॉल की आवृत्ति)। \n
- Business level — डोमेन से संबंधित मेट्रिक्स (ऑर्डर की संख्या, कन्वर्ज़न)। \n
हम एप्लिकेशन लेवल पर ध्यान केंद्रित करेंगे, जो C# डेवलपर्स के लिए सबसे अधिक प्रभावी है।
\n\nOpenTelemetry और Prometheus के साथ मेट्रिक्स कलेक्शन
\nOpenTelemetry (OTel) .NET एप्लिकेशन को इंस्ट्रूमेंट करने का डी-फैक्टो मानक है। यह एक एकीकृत API के माध्यम से मेट्रिक्स, ट्रेस और लॉग्स एकत्र करने की अनुमति देता है। आइए Prometheus के साथ एकीकरण का उदाहरण देखें।
\n\nNuGet पैकेज इंस्टॉल करें:
\ndotnet add package OpenTelemetry.Extensions.Hosting\ndotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.AspNetCore\n\nProgram.cs में कॉन्फ़िगरेशन:
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n .WithMetrics(metrics => metrics\n .AddAspNetCoreInstrumentation()\n .AddRuntimeInstrumentation()\n .AddPrometheusExporter());\n\nvar app = builder.Build();\n\napp.MapPrometheusScrapingEndpoint(); // Prometheus के लिए एंडपॉइंट\n\napp.Run();\n\nअब आपकी सर्विस /metrics पते पर Prometheus फॉर्मेट में मेट्रिक्स प्रदान करेगी। इनमें HTTP रिक्वेस्ट की संख्या, उनके प्रोसेसिंग का समय, GC और मेमोरी मेट्रिक्स शामिल हैं।
कस्टम मेट्रिक्स
\nबिज़नेस मेट्रिक्स के लिए Meter और Counter का उपयोग करें:
using System.Diagnostics.Metrics;\n\npublic class OrderMetrics\n{\n private readonly Counter<int> _ordersCreated;\n\n public OrderMetrics(IMeterFactory meterFactory)\n {\n var meter = meterFactory.Create("MyApp.Orders");\n _ordersCreated = meter.CreateCounter<int>("orders.created.count");\n }\n\n public void OrderCreated() => _ordersCreated.Add(1);\n}\n\n// DI में रजिस्ट्रेशन:\nbuilder.Services.AddSingleton<OrderMetrics>();\n\nये मेट्रिक्स स्वचालित रूप से Prometheus में आ जाएंगी और Grafana में डैशबोर्ड बनाने के लिए उपलब्ध होंगी।
\n\nअलर्ट सेटअप: सरल नियमों से बहु-स्तरीय सिस्टम तक
\nमेट्रिक्स अकेले अलर्ट के बिना बेकार हैं। Prometheus में अलर्ट Alertmanager के माध्यम से कॉन्फ़िगर किए जाते हैं। आइए एक उन्नत परिदृश्य देखें: API के असामान्य रिस्पॉन्स टाइम पर अलर्ट।
Prometheus में नियम (alert.rules.yml)
\ngroups:\n - name: csharp_app_alerts\n rules:\n - alert: HighRequestLatency\n expr: |\n histogram_quantile(0.95, \n rate(http_server_duration_seconds_bucket[5m])\n ) > 2\n for: 2m\n labels:\n severity: critical\n annotations:\n summary: "उच्च रिक्वेस्ट विलंबता ({{ $value }}s)"\n descr