परिचय: C# अनुप्रयोगों की निगरानी क्यों आवश्यक है
.NET प्लेटफॉर्म पर आधुनिक C# अनुप्रयोग जटिल वितरित प्रणालियाँ हैं जो उच्च भार की स्थितियों में काम करती हैं। गुणवत्तापूर्ण निगरानी के बिना, आप प्रदर्शन में गिरावट, मेमोरी लीक या गंभीर विफलताओं को अनदेखा करने का जोखिम उठाते हैं। निगरानी न केवल समस्याओं को रिकॉर्ड करने की अनुमति देती है, बल्कि उनका पूर्वानुमान लगाने और विसंगतियों पर समय पर प्रतिक्रिया देने की भी अनुमति देती है।
इस लेख में, हम आधुनिक टूल: Prometheus, Grafana, Serilog और अंतर्निहित Health Checks का उपयोग करके C# (.NET) अनुप्रयोगों के लिए मीट्रिक्स संग्रह, लॉगिंग और अलर्ट सिस्टम सेट करने का तरीका समझेंगे। आपको तैयार कोड उदाहरण और व्यावहारिक सुझाव मिलेंगे।
C# (.NET) अनुप्रयोगों के लिए मुख्य मीट्रिक्स
निगरानी प्रमुख संकेतकों को परिभाषित करने से शुरू होती है। .NET अनुप्रयोगों के लिए, उन्हें तीन श्रेणियों में विभाजित किया जा सकता है:
- बुनियादी ढाँचा मीट्रिक्स — CPU, मेमोरी, डिस्क, नेटवर्क का उपयोग।
- एप्लिकेशन मीट्रिक्स — API प्रतिक्रिया समय, अनुरोधों की संख्या, त्रुटियाँ (4xx/5xx), कतारों का आकार।
- .NET-विशिष्ट मीट्रिक्स — GC हीप का आकार, थ्रेड्स की संख्या, कचरा संग्रह का समय, DB कनेक्शनों की संख्या।
Prometheus और .NET के माध्यम से मीट्रिक्स संग्रह
Prometheus में मीट्रिक्स निर्यात करने के लिए prometheus-net लाइब्रेरी का उपयोग करें। इसे NuGet के माध्यम से स्थापित करें:
dotnet add package prometheus-net.AspNetCoreProgram.cs में middleware जोड़ें:
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// Prometheus मीट्रिक्स सक्षम करेंapp.UseHttpMetrics(); // HTTP-मीट्रिक्सapp.UseMetricServer(); // /metrics एंडपॉइंट
app.MapGet("/", () => "Hello World!");app.Run();अब /metrics पते पर मानक मीट्रिक्स उपलब्ध होंगे: अनुरोधों की संख्या, अवधि, त्रुटियाँ। आइए एक कस्टम मीट्रिक जोड़ें — एंडपॉइंट तक पहुँच का काउंटर:
using Prometheus;
var requestCounter = Metrics.CreateCounter( "myapp_requests_total", "Total requests to the endpoint");
app.MapGet("/api/data", () => { requestCounter.Inc(); return new { Message = "Data loaded" };});Health Checks: बुनियादी स्थिति जाँच
.NET में अंतर्निहित Health Checks तंत्र आपको एप्लिकेशन की कार्यक्षमता का त्वरित मूल्यांकन करने की अनुमति देता है। डेटाबेस कनेक्शन की जाँच जोड़ें:
using Microsoft.Extensions.Diagnostics.HealthChecks;
builder.Services.AddHealthChecks() .AddDbContextCheck<AppDbContext>() .AddUrlGroup(new Uri("https://external-api.com"), "External API");
app.MapHealthChecks("/health");Health Checks स्थिति Healthy, Degraded या Unhealthy लौटाते हैं — यह अलर्ट के लिए एक आदर्श स्रोत है।
Serilog के साथ लॉगिंग: संरचित लॉग
लॉग निदान के लिए सबसे महत्वपूर्ण डेटा स्रोत हैं। Serilog आपको Elasticsearch, Seq या संरचित प्रारूप में फ़ाइल में लॉग भेजने की अनुमति देता है।
स्थापना:
dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.SeqProgram.cs में कॉन्फ़िगरेशन:
Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console() .WriteTo.Seq("http://localhost:5341") .Enrich.WithProperty("Application", "MyApp") .CreateLogger();
builder.Host.UseSerilog();अब सभी लॉग में संदर्भ जानकारी होगी: RequestId, UserId, निष्पादन समय। त्रुटि लॉगिंग का उदाहरण:
try { // खतरनाक कोड} catch (Exception ex) { Log.Error(ex, "ऑर्डर {OrderId} प्रोसेस करते समय त्रुटि", orderId);}संरचित लॉग को Grafana या Kibana में आसानी से विश्लेषित किया जा सकता है,