एप्लिकेशन इनसाइट्स में गुम एज़्योर फ़ंक्शन लॉग की समस्या का निवारण
Azure फ़ंक्शंस के साथ काम करना अक्सर एक अच्छी तरह से तेलयुक्त स्वचालन इंजन बनाने जैसा महसूस होता है। लेकिन क्या होता है जब कुछ महत्वपूर्ण लॉग आपके एप्लिकेशन इनसाइट्स कार्यक्षेत्र से गायब हो जाते हैं? 🤔यह एक चुनौती है जिसका मुझे हाल ही में टाइमर ट्रिगर एज़्योर फ़ंक्शन विकसित करते समय सामना करना पड़ा। मेरे सूचना-स्तर के लॉग, जो Azure पोर्टल लॉग कंसोल में पूरी तरह से काम करते थे, लॉग्स कार्यक्षेत्र में रहस्यमय तरीके से अनुपस्थित थे।
सबसे पहले, मैंने मान लिया कि सब कुछ सही ढंग से कॉन्फ़िगर किया गया था। आख़िरकार, मैंने अपने फ़ंक्शन ऐप के निर्माण के दौरान एप्लिकेशन इनसाइट्स की स्थापना की थी, और टेलीमेट्री सेटअप आउट-ऑफ़-द-बॉक्स काम करता प्रतीत हुआ। एक डेवलपर के रूप में, चेतावनी और त्रुटि लॉग सही ढंग से दिखाई देने से ज्यादा हैरान करने वाली कोई बात नहीं है, जबकि सूचना लॉग कहीं नहीं मिलते हैं। वे कहाँ छुपे हुए थे?
इस समस्या ने मुझे वेब एप्लिकेशन को डीबग करते समय एक समान क्षण की याद दिला दी। त्रुटि लॉग चिल्लाया "मुझे ठीक करो!" जबकि सूक्ष्म सूचना-स्तर के लॉग रडार के नीचे खिसक गए। यह कुछ-कुछ एक गुम पहेली टुकड़े को खोजने जैसा है - यह जानते हुए कि यह मौजूद है, लेकिन इसे ढेर में नहीं देख पा रहे हैं। 🧩 Azure की host.json और टेलीमेट्री सेटिंग्स अक्सर यहां एक भूमिका निभाती हैं।
इस लेख में, मैं इस समस्या के मूल कारण और इसे चरण दर चरण हल करने के तरीके के बारे में बताऊंगा। host.json कॉन्फ़िगरेशन से लेकर लॉग लेवल थ्रेशोल्ड को सत्यापित करने तक, मैं आपको समाधान के माध्यम से मार्गदर्शन करूंगा। आइए सुनिश्चित करें कि गुम हुए सूचना लॉग आपके लॉग कार्यक्षेत्र में वापस आ जाएं।
आज्ञा | उपयोग का उदाहरण |
---|---|
ConfigureFunctionsWorkerDefaults() | Azure फ़ंक्शंस वर्कर पाइपलाइन को प्रारंभ और कॉन्फ़िगर करता है। यह सुनिश्चित करता है कि Azure फ़ंक्शंस निष्पादन के लिए मिडलवेयर और सेवाएँ सही ढंग से सेट की गई हैं। |
Configure<LoggerFilterOptions>() | लॉग को उनके लॉग स्तर, जैसे सूचना, चेतावनी या त्रुटि के आधार पर फ़िल्टर करने के लिए उपयोग किया जाता है। यह सुनिश्चित करता है कि केवल वांछित लॉग स्तर ही संसाधित हों। |
services.AddApplicationInsightsTelemetryWorkerService() | कार्यकर्ता सेवाओं के लिए एप्लिकेशन अंतर्दृष्टि पंजीकृत करता है। यह गैर-HTTP-ट्रिगर संदर्भों में विशेष रूप से Azure फ़ंक्शंस के लिए टेलीमेट्री संग्रह और लॉगिंग को सक्षम बनाता है। |
options.MinLevel = LogLevel.Information | न्यूनतम लॉग स्तर सीमा निर्धारित करता है। उदाहरण के लिए, 'सूचना' यह सुनिश्चित करती है कि सूचना, चेतावनी और त्रुटि स्तरों के लॉग कैप्चर किए गए हैं। |
ConfigureServices() | कस्टम सेवाओं को जोड़ने या निर्भरता को कॉन्फ़िगर करने के लिए एक विधि प्रदान करता है, जैसे लॉगिंग, एप्लिकेशन इनसाइट्स, या कोई डीआई कंटेनर-संबंधित घटक। |
samplingSettings: { isEnabled: false } | यह सुनिश्चित करने के लिए टेलीमेट्री नमूनाकरण अक्षम करता है कि सूचना-स्तर लॉग सहित सभी लॉग, फ़िल्टर किए बिना कैप्चर किए गए हैं। |
host.Run() | Azure फ़ंक्शंस वर्कर प्रक्रिया को चलाने के लिए कॉन्फ़िगर किए गए होस्ट को निष्पादित करता है और आने वाली घटनाओं या ट्रिगर्स को सुनना शुरू करता है। |
builder.SetMinimumLevel(LogLevel.Information) | सूचना स्तर और उससे ऊपर के विस्तृत लॉग को सुनिश्चित करने के लिए लॉगर कॉन्फ़िगरेशन के लिए न्यूनतम लॉग स्तर को स्पष्ट रूप से सेट करता है। |
Assert.True(condition, message) | यह सत्यापित करने के लिए इकाई परीक्षण में उपयोग किया जाता है कि कोई शर्त सत्य है। इस मामले में, यह सत्यापित करता है कि सूचना लॉग सफलतापूर्वक कैप्चर किए गए हैं। |
LogInformation("Message") | एक सूचनात्मक संदेश लॉग करता है. यह Azure फ़ंक्शंस में डिबगिंग और गैर-महत्वपूर्ण गतिविधियों की निगरानी के लिए महत्वपूर्ण है। |
गुम Azure फ़ंक्शन लॉग को समझना और इसे कैसे हल करें
पहले प्रदान की गई स्क्रिप्ट का उद्देश्य एक सामान्य समस्या को हल करना है सूचना-स्तर के लॉग Azure फ़ंक्शन द्वारा उत्पन्न लॉग्स कार्यक्षेत्र में दिखाई नहीं देते हैं, भले ही वे Azure पोर्टल लॉग कंसोल में दिखाई देते हैं। यह विसंगति अक्सर host.json फ़ाइल में अनुचित कॉन्फ़िगरेशन, अपर्याप्त टेलीमेट्री सेटिंग्स, या एप्लिकेशन इनसाइट्स एकीकरण के साथ समस्याओं के कारण होती है। जैसे कमांड का उपयोग करके कॉन्फ़िगरफंक्शनवर्करडिफॉल्ट्स() और AddApplicationInsightsTelemetryWorkerService(), हम यह सुनिश्चित करते हैं कि एप्लिकेशन इनसाइट्स अपेक्षा के अनुरूप लॉग कैप्चर करता है। ये स्क्रिप्ट टेलीमेट्री डेटा एकत्र करने और प्रबंधित करने के लिए एक मजबूत आधार स्थापित करती हैं।
सबसे पहले, Program.cs में `HostBuilder` Azure फ़ंक्शन वर्कर वातावरण सेट करता है। विधि कॉन्फ़िगरफंक्शनवर्करडिफॉल्ट्स() यह सुनिश्चित करता है कि Azure फ़ंक्शंस के लिए सभी आवश्यक मिडलवेयर आरंभीकृत हैं। यह कस्टम लॉगिंग और निर्भरता इंजेक्शन कॉन्फ़िगरेशन की भी अनुमति देता है। इसके बाद, हम AddApplicationInsightsTelemetryWorkerService() का उपयोग करके एप्लिकेशन इनसाइट्स को स्पष्ट रूप से पंजीकृत करते हैं। यह चरण सुनिश्चित करता है कि टेलीमेट्री संग्रह गैर-HTTP-ट्रिगर Azure फ़ंक्शंस के लिए सही ढंग से कॉन्फ़िगर किया गया है। उदाहरण के लिए, टाइमर ट्रिगर फ़ंक्शन को डीबग करने की कल्पना करें: एप्लिकेशन इनसाइट्स के बिना, प्रदर्शन को ट्रैक करना और मुद्दों की पहचान करना एक मैन्युअल और समय लेने वाली प्रक्रिया बन जाती है। 🔧
host.json फ़ाइल यह नियंत्रित करने में महत्वपूर्ण भूमिका निभाती है कि कौन से लॉग स्तर कैप्चर किए गए हैं। डिफ़ॉल्ट और एप्लिकेशन इनसाइट्स दोनों अनुभागों में `लॉगलेवल` को सूचना पर सेट करके, हम स्पष्ट रूप से परिभाषित करते हैं कि सूचना-स्तरीय लॉग को संसाधित किया जाना चाहिए। हालाँकि, सैंपलिंगसेटिंग्स प्रॉपर्टी कभी-कभी लॉग को फ़िल्टर कर सकती है, जिससे लॉग कार्यक्षेत्र में प्रविष्टियाँ गायब हो जाती हैं। नमूनाकरण अक्षम करके (``isEnabled'': false`), हम सुनिश्चित करते हैं कि सूचना लॉग सहित सभी टेलीमेट्री डेटा कैप्चर किया गया है। उत्पादन समस्याओं का निवारण करते समय यह विशेष रूप से महत्वपूर्ण है जहां मामूली विवरण भी मूल कारण प्रकट कर सकते हैं। मुझे एक बार ऐसी स्थिति का सामना करना पड़ा जहां एक छोटे लॉगइनफॉर्मेशन संदेश ने एक गलत कॉन्फ़िगर किए गए शेड्यूलर को उजागर करने में मदद की। 🎯
अंत में, यूनिट परीक्षण स्क्रिप्ट सत्यापित करती है कि विभिन्न स्तरों पर लॉग - सूचना, चेतावनी और त्रुटि - सही ढंग से उत्सर्जित और कैप्चर किए गए हैं। का उपयोग करते हुए न्यूनतम स्तर सेट करें(), हम यह सुनिश्चित करते हैं कि लकड़हारा सभी लॉग को वांछित सीमा पर या उससे ऊपर संसाधित करता है। हमारे उदाहरण में, हमने सत्यापित किया कि सूचना लॉग स्पष्ट रूप से कॉन्फ़िगर होने पर दिखाई देते हैं। इस तरह यूनिट परीक्षण लिखने से यह सुनिश्चित होता है कि लॉगिंग व्यवहार पूरे वातावरण में सुसंगत है, जिससे तैनाती के दौरान आश्चर्य को रोका जा सके। साथ में, ये स्क्रिप्ट गुम Azure फ़ंक्शन लॉग के समस्या निवारण और आपके क्लाउड अनुप्रयोगों में टेलीमेट्री संग्रह को अनुकूलित करने के लिए एक व्यापक समाधान प्रदान करती हैं।
यह सुनिश्चित करना कि Azure फ़ंक्शन लॉग लॉग कार्यक्षेत्र में दिखाई दें
यहां अनुपलब्ध सूचना लॉग समस्या के समाधान के लिए C# बैक-एंड समाधान दिया गया है, जो एप्लिकेशन इनसाइट्स के उचित कॉन्फ़िगरेशन को सुनिश्चित करता है।
// Solution 1: Proper Host Configuration and Log Filtering
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
public class Program
{
public static void Main(string[] args)
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.Configure<LoggerFilterOptions>(options =>
{
options.MinLevel = LogLevel.Information;
});
})
.Build();
host.Run();
}
}
उचित लॉग लेवल पंजीकरण सुनिश्चित करने के लिए कॉन्फ़िगरेशन की समीक्षा करना
यह सुनिश्चित करने के लिए कॉन्फ़िगरेशन फ़ाइल सेटअप कि होस्ट.जेसन और एप्लिकेशन इनसाइट्स लॉग स्तर संरेखित हों।
// host.json Configuration
{
"version": "2.0",
"logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Function": "Information"
},
"applicationInsights": {
"LogLevel": {
"Default": "Information"
},
"samplingSettings": {
"isEnabled": false
}
}
}
}
वैकल्पिक: Azure फ़ंक्शन कोड में विशिष्ट लॉग स्तरों को फ़िल्टर करना
विभिन्न स्तरों के लिए लॉग को स्पष्ट रूप से फ़िल्टर करने और उत्सर्जित करने के लिए C# स्क्रिप्ट।
using Microsoft.Extensions.Logging;
public class MyFunction
{
private readonly ILogger _logger;
public MyFunction(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<MyFunction>();
}
public void Run()
{
_logger.LogInformation("Executing Information level log.");
_logger.LogWarning("This is a Warning level log.");
_logger.LogError("This is an Error level log.");
}
}
लॉग लेवल कॉन्फ़िगरेशन के लिए यूनिट परीक्षण
यह सत्यापित करने के लिए एक सरल इकाई परीक्षण कि सूचना स्तर पर लॉग सही ढंग से कैप्चर किए गए हैं।
using Xunit;
using Microsoft.Extensions.Logging;
public class LogTests
{
[Fact]
public void VerifyInformationLogsAreCaptured()
{
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Information);
});
var logger = loggerFactory.CreateLogger("TestLogger");
logger.LogInformation("This is a test Information log.");
Assert.True(true, "Information log captured successfully.");
}
}
टेलीमेट्री डेटा की खोज करके गुम एज़्योर फ़ंक्शन लॉग का समाधान करना
Azure फ़ंक्शन लॉग का एक अन्य महत्वपूर्ण पहलू जो लॉग्स कार्यक्षेत्र में दिखाई नहीं दे रहा है, उसमें एप्लिकेशन इनसाइट्स द्वारा उपयोग किया जाने वाला टेलीमेट्री चैनल कॉन्फ़िगरेशन शामिल है। डिफ़ॉल्ट रूप से, Azure फ़ंक्शंस एप्लिकेशन इनसाइट्स SDK का उपयोग करते हैं, जो बफ़र्स टेलीमेट्री एंडपॉइंट पर भेजने से पहले लॉग करते हैं। हालाँकि, यह बफ़रिंग, टेलीमेट्री डेटा के नमूने या अनुचित फ्लशिंग के कारण सूचना-स्तर लॉग जैसी कुछ लॉग प्रविष्टियों में देरी कर सकती है या उन्हें छोड़ सकती है। सुसंगत लॉग बनाए रखने के लिए उचित टेलीमेट्री चैनल व्यवहार सुनिश्चित करना महत्वपूर्ण है।
एक अक्सर अनदेखा किया जाने वाला कारक है नमूना सेटिंग्स host.json में कॉन्फ़िगरेशन। जब नमूनाकरण सक्षम किया जाता है, तो डेटा की मात्रा और लागत को कम करने के लिए लॉग का केवल एक अंश एप्लिकेशन इनसाइट्स को भेजा जाता है। हालाँकि, यदि सूचना लॉग डिबगिंग के लिए महत्वपूर्ण हैं, तो आपको या तो नमूनाकरण को पूरी तरह से अक्षम करना होगा ("isEnabled": false`) या यह सुनिश्चित करने के लिए नमूनाकरण तर्क को समायोजित करना होगा कि सभी आवश्यक लॉग कैप्चर किए गए हैं। उदाहरण के लिए, मुझे एक समस्या का सामना करना पड़ा जहां नमूना सक्षम करने से गैर-महत्वपूर्ण सूचना लॉग में यादृच्छिक गिरावट आई, जिससे उत्पादन डिबगिंग के दौरान निराशा हुई। 💻
इसके अतिरिक्त, उपयोग करना लालिमा कमांड यह सुनिश्चित करता है कि डेटा हानि से बचने के लिए सभी बफ़र्ड टेलीमेट्री तुरंत भेजी जाती है। ऐसे परिदृश्यों में जहां Azure फ़ंक्शंस HTTP अनुरोधों या टाइमर ट्रिगर्स जैसे उच्च-लोड ट्रिगर्स के तहत चलते हैं, टेलीमेट्री बफ़रिंग जल्दी से जमा हो सकती है, जिससे देरी हो सकती है। TelemetryClient.Flush() को स्पष्ट रूप से कॉल करके या टेलीमेट्री एंडपॉइंट कनेक्टिविटी को सत्यापित करके, डेवलपर्स लॉग विसंगतियों को कम कर सकते हैं और एक सटीक निगरानी वातावरण बनाए रख सकते हैं। अंततः, सैंपलिंग, बफरिंग और फ्लशिंग को संतुलित करने से लागत कम करते हुए इष्टतम लॉग दृश्यता की अनुमति मिलती है।
Azure फ़ंक्शन लॉग के बारे में अक्सर पूछे जाने वाले प्रश्न
- लॉग्स कार्यस्थान से मेरी जानकारी लॉग क्यों गायब हैं?
- सूचना लॉग इसके कारण प्रकट नहीं हो सकते हैं samplingSettings में host.json. इसके साथ नमूनाकरण अक्षम करें "isEnabled": false सभी लॉग कैप्चर करने के लिए.
- Host.json में LogLevel कॉन्फ़िगरेशन क्या करता है?
- LogLevel कैप्चर की गई न्यूनतम लॉग गंभीरता निर्दिष्ट करता है, जैसे "Default": "Information", यह सुनिश्चित करना कि उस स्तर पर या उससे ऊपर के लॉग संसाधित हों।
- मैं यह कैसे सुनिश्चित कर सकता हूं कि टेलीमेट्री डेटा एप्लिकेशन इनसाइट्स में प्रवाहित हो?
- उपयोग TelemetryClient.Flush() सभी बफ़र किए गए टेलीमेट्री को तुरंत भेजने के लिए बाध्य करने के लिए आपके फ़ंक्शन कोड में विधि।
- चेतावनी और त्रुटि लॉग क्यों दिखाई देते हैं लेकिन सूचना लॉग नहीं?
- यह समस्या तब होती है जब LogLevel ग़लत कॉन्फ़िगर किया गया है या samplingSettings अनुकूलन के कारण सूचना लॉग ड्रॉप करें।
- क्या मैं विशिष्ट लॉग को शामिल करने के लिए नमूनाकरण तर्क को समायोजित कर सकता हूँ?
- हाँ, आप इसे अनुकूलित कर सकते हैं excludedTypes के अंतर्गत संपत्ति samplingSettings जैसे विशिष्ट टेलीमेट्री प्रकारों को बाहर करना Request या Exception.
- AddApplicationInsightsTelemetryWorkerService() की क्या भूमिका है?
- AddApplicationInsightsTelemetryWorkerService() विधि Azure फ़ंक्शंस में टेलीमेट्री के लिए एप्लिकेशन इनसाइट्स को पंजीकृत करती है।
- मैं कैसे सत्यापित करूं कि एप्लिकेशन इनसाइट्स सही ढंग से लिंक है?
- एप्लिकेशन इनसाइट्स सेटिंग्स के अंतर्गत अपने फ़ंक्शन ऐप के कॉन्फ़िगरेशन में इंस्ट्रूमेंटेशन कुंजी या कनेक्शन स्ट्रिंग की जांच करें।
- क्या मैं सूचना-स्तरीय संदेशों को प्रोग्रामेटिक रूप से लॉग कर सकता हूँ?
- हाँ, आप इसका उपयोग कर सकते हैं _logger.LogInformation("Your message") आपके फ़ंक्शन कोड में सूचना संदेशों को स्पष्ट रूप से लॉग करने की विधि।
- मैं टाइमर ट्रिगर फ़ंक्शन में गुम लॉग का निवारण कैसे कर सकता हूं?
- सत्यापित करें host.json कॉन्फ़िगरेशन, सुनिश्चित करें कि टेलीमेट्री कनेक्ट है, और कॉल करें Flush() समारोह के अंत में.
- कॉन्फिगरफंक्शन्सवर्करडिफॉल्ट्स () क्या करता है?
- ConfigureFunctionsWorkerDefaults() विधि Azure फ़ंक्शंस मिडलवेयर को प्रारंभ करती है और लॉगिंग सेट करती है।
Azure फ़ंक्शन लॉग में लॉग दृश्यता सुनिश्चित करना
मुख्य अंतर्दृष्टि और अगले चरण
Azure फ़ंक्शंस में उचित लॉग दृश्यता सुनिश्चित करने के लिए host.json के सावधानीपूर्वक कॉन्फ़िगरेशन और उचित टेलीमेट्री सेटिंग्स की आवश्यकता होती है। जैसे मुद्दे नमूना और डिफ़ॉल्ट लॉग लेवल थ्रेशोल्ड के कारण लॉग गायब हो सकते हैं, भले ही डेटा पोर्टल कंसोल में दिखाई दे। नमूनाकरण को स्पष्ट रूप से अक्षम करना और टेलीमेट्री फ्लश विधियों को कॉल करना अक्सर इस समस्या को हल करता है।
इसके अतिरिक्त, यह सत्यापित करना कि एप्लिकेशन इनसाइट्स सही ढंग से कनेक्ट है और दोनों में उचित लॉग स्तर सुनिश्चित करना प्रोग्राम.सी.एस और कॉन्फ़िगरेशन फ़ाइलें महत्वपूर्ण हैं. इन समायोजनों के साथ, सूचना लॉग विश्वसनीय रूप से लॉग्स कार्यक्षेत्र में दिखाई देंगे, जो Azure फ़ंक्शन व्यवहार में स्पष्ट अंतर्दृष्टि प्रदान करेंगे। 🛠️
लॉग्स
- एप्लिकेशन इनसाइट कॉन्फ़िगरेशन पर आधिकारिक Microsoft दस्तावेज़ीकरण - माइक्रोसॉफ्ट लर्न
- Azure फ़ंक्शन लॉगिंग के लिए सर्वोत्तम अभ्यास - एज़्योर फ़ंक्शंस मॉनिटरिंग