অ্যাপ্লিকেশন অন্তর্দৃষ্টিতে Azure ফাংশন লগ অনুপস্থিত সমস্যা সমাধান করা
Azure ফাংশনগুলির সাথে কাজ করা প্রায়শই একটি ভাল তেলযুক্ত অটোমেশন ইঞ্জিন তৈরির মতো মনে হয়। কিন্তু কী হবে যখন কিছু গুরুত্বপূর্ণ লগ আপনার অ্যাপ্লিকেশন ইনসাইট ওয়ার্কস্পেস থেকে অদৃশ্য হয়ে যায়? 🤔 এটি একটি চ্যালেঞ্জ যা আমি সম্প্রতি একটি টাইমার ট্রিগার Azure ফাংশন তৈরি করার সময় সম্মুখীন হয়েছি। আমার তথ্য-স্তরের লগগুলি, যেগুলি Azure পোর্টাল লগ কনসোলে নিখুঁতভাবে কাজ করেছিল, রহস্যজনকভাবে লগস ওয়ার্কস্পেস-এ অনুপস্থিত ছিল।
প্রথমে, আমি অনুমান করেছি যে সবকিছু সঠিকভাবে কনফিগার করা হয়েছে। সর্বোপরি, আমি আমার ফাংশন অ্যাপ তৈরির সময় অ্যাপ্লিকেশন অন্তর্দৃষ্টি সেট আপ করেছি এবং টেলিমেট্রি সেটআপটি বাক্সের বাইরে কাজ করছে বলে মনে হচ্ছে। একজন বিকাশকারী হিসাবে, তথ্য লগগুলি কোথাও খুঁজে পাওয়া না যাওয়ার সময় সতর্কতা এবং ত্রুটি লগগুলি সঠিকভাবে প্রদর্শিত হওয়ার চেয়ে বেশি বিভ্রান্তিকর কিছু নেই৷ তারা কোথায় লুকিয়ে ছিল?
একটি ওয়েব অ্যাপ্লিকেশন ডিবাগ করার সময় এই সমস্যাটি আমাকে একই মুহুর্তের কথা মনে করিয়ে দেয়। ত্রুটির লগগুলি চিৎকার করে "আমাকে ঠিক করুন!" যখন সূক্ষ্ম তথ্য-স্তরের লগগুলি রাডারের নীচে পড়ে যায়। এটা অনেকটা অনুপস্থিত ধাঁধাঁর টুকরো খোঁজার মতো—এটি বিদ্যমান আছে তা জেনে কিন্তু এটিকে স্তূপে দেখা যাচ্ছে না। 🧩 Azure এর host.json এবং টেলিমেট্রি সেটিংস প্রায়শই এখানে একটি ভূমিকা পালন করে।
এই নিবন্ধে, আমি এই সমস্যার মূল কারণ এবং ধাপে ধাপে কীভাবে এটি সমাধান করব তা ভেঙে দেব। host.json কনফিগারেশন থেকে লগ লেভেল থ্রেশহোল্ড যাচাই করা পর্যন্ত, আমি আপনাকে সমাধানের মাধ্যমে গাইড করব। আসুন নিশ্চিত করি যে তথ্য লগ হারিয়েছে তারা আপনার লগ ওয়ার্কস্পেস-এ ফিরে এসেছে।
আদেশ | ব্যবহারের উদাহরণ |
---|---|
ConfigureFunctionsWorkerDefaults() | Azure ফাংশন কর্মী পাইপলাইন শুরু এবং কনফিগার করে। এটি নিশ্চিত করে যে মিডলওয়্যার এবং পরিষেবাগুলি Azure ফাংশন সম্পাদনের জন্য সঠিকভাবে সেট আপ করা হয়েছে। |
Configure<LoggerFilterOptions>() | লগগুলিকে তাদের লগ স্তরের উপর ভিত্তি করে ফিল্টার করতে ব্যবহৃত হয়, যেমন তথ্য, সতর্কতা বা ত্রুটি। এটি নিশ্চিত করে যে শুধুমাত্র পছন্দসই লগ স্তরগুলি প্রক্রিয়া করা হয়েছে। |
services.AddApplicationInsightsTelemetryWorkerService() | কর্মী পরিষেবার জন্য আবেদনের অন্তর্দৃষ্টি নিবন্ধন করে৷ এটি নন-HTTP-ট্রিগার করা প্রসঙ্গে Azure ফাংশনের জন্য বিশেষভাবে টেলিমেট্রি সংগ্রহ এবং লগিং সক্ষম করে। |
options.MinLevel = LogLevel.Information | ন্যূনতম লগ লেভেল থ্রেশহোল্ড সেট করে। উদাহরণস্বরূপ, 'তথ্য' নিশ্চিত করে যে তথ্য, সতর্কতা, এবং ত্রুটির স্তরের লগ ক্যাপচার করা হয়েছে। |
ConfigureServices() | কাস্টম পরিষেবা যোগ করার বা নির্ভরতা কনফিগার করার জন্য একটি পদ্ধতি প্রদান করে, যেমন লগিং, অ্যাপ্লিকেশন অন্তর্দৃষ্টি, বা যেকোনো DI কন্টেইনার-সম্পর্কিত উপাদান। |
samplingSettings: { isEnabled: false } | তথ্য-স্তরের লগ সহ সমস্ত লগগুলি ফিল্টার আউট না করে ক্যাপচার করা হয়েছে তা নিশ্চিত করতে টেলিমেট্রি স্যাম্পলিং অক্ষম করে৷ |
host.Run() | Azure ফাংশন কর্মী প্রক্রিয়া চালানোর জন্য কনফিগার করা হোস্টকে কার্যকর করে এবং ইনকামিং ইভেন্ট বা ট্রিগারের জন্য শোনা শুরু করে। |
builder.SetMinimumLevel(LogLevel.Information) | সুস্পষ্টভাবে লগার কনফিগারেশনের জন্য ন্যূনতম লগ স্তর সেট করে যাতে তথ্য স্তরে এবং উপরে বিস্তারিত লগগুলি প্রক্রিয়া করা হয়। |
Assert.True(condition, message) | একটি শর্ত সত্য কিনা তা যাচাই করতে ইউনিট পরীক্ষায় ব্যবহৃত হয়। এই ক্ষেত্রে, এটি যাচাই করে যে তথ্য লগগুলি সফলভাবে ক্যাপচার করা হয়েছে৷ |
LogInformation("Message") | একটি তথ্যমূলক বার্তা লগ. Azure ফাংশনগুলিতে অ-সমালোচনামূলক ক্রিয়াকলাপগুলি ডিবাগিং এবং পর্যবেক্ষণের জন্য এটি অত্যন্ত গুরুত্বপূর্ণ। |
মিসিং অ্যাজুর ফাংশন লগ বোঝা এবং এটি কীভাবে সমাধান করা যায়
পূর্বে প্রদত্ত স্ক্রিপ্টগুলি যেখানে একটি সাধারণ সমস্যা সমাধানের লক্ষ্য রাখে তথ্য-স্তরের লগ Azure ফাংশন দ্বারা উত্পন্ন লগস ওয়ার্কস্পেসে উপস্থিত হয় না, যদিও তারা Azure পোর্টাল লগ কনসোলে প্রদর্শিত হয়। host.json ফাইলে অনুপযুক্ত কনফিগারেশন, অপর্যাপ্ত টেলিমেট্রি সেটিংস বা অ্যাপ্লিকেশন ইনসাইটস ইন্টিগ্রেশনের সমস্যাগুলির কারণে প্রায়শই এই অসঙ্গতি ঘটে। মত কমান্ড ব্যবহার করে ফাংশন ওয়ার্কার ডিফল্টস() কনফিগার করুন এবং অ্যাপ্লিকেশন ইনসাইটস টেলিমেট্রি ওয়ার্কার সার্ভিস() যোগ করুন, আমরা নিশ্চিত করি যে অ্যাপ্লিকেশন অন্তর্দৃষ্টিগুলি প্রত্যাশিতভাবে লগগুলি ক্যাপচার করে৷ এই স্ক্রিপ্টগুলি টেলিমেট্রি ডেটা সংগ্রহ ও পরিচালনার জন্য একটি শক্তিশালী ভিত্তি স্থাপন করে।
প্রথমত, Program.cs-এ `HostBuilder` Azure ফাংশন কর্মী পরিবেশ সেট আপ করে। পদ্ধতি ফাংশন ওয়ার্কার ডিফল্টস() কনফিগার করুন নিশ্চিত করে যে Azure ফাংশনের জন্য সমস্ত প্রয়োজনীয় মিডলওয়্যার শুরু হয়েছে। এটি কাস্টম লগিং এবং নির্ভরতা ইনজেকশন কনফিগারেশনের অনুমতি দেয়। এরপর, আমরা স্পষ্টভাবে AddApplicationInsightsTelemetryWorkerService() ব্যবহার করে অ্যাপ্লিকেশন অন্তর্দৃষ্টি নিবন্ধন করি। এই ধাপটি নিশ্চিত করে যে টেলিমেট্রি সংগ্রহটি নন-HTTP-ট্রিগার করা Azure ফাংশনের জন্য সঠিকভাবে কনফিগার করা হয়েছে। উদাহরণস্বরূপ, একটি টাইমার ট্রিগার ফাংশন ডিবাগ করার কল্পনা করুন: অ্যাপ্লিকেশন অন্তর্দৃষ্টি ছাড়া, কর্মক্ষমতা ট্র্যাক করা এবং সমস্যা চিহ্নিত করা একটি ম্যানুয়াল এবং সময়সাপেক্ষ প্রক্রিয়া হয়ে ওঠে। 🔧
host.json ফাইলটি কী লগ লেভেল ক্যাপচার করা হয় তা নিয়ন্ত্রণে গুরুত্বপূর্ণ ভূমিকা পালন করে। ডিফল্ট এবং অ্যাপ্লিকেশন অন্তর্দৃষ্টি উভয় বিভাগেই `লগলেভেল` তথ্য সেট করে, আমরা স্পষ্টভাবে সংজ্ঞায়িত করি যে তথ্য-স্তরের লগগুলি অবশ্যই প্রক্রিয়া করা উচিত। যাইহোক, samplingSettings প্রপার্টি কখনো কখনো লগ ফিল্টার করতে পারে, যার ফলে লগ ওয়ার্কস্পেসে অনুপস্থিত এন্ট্রি হতে পারে। স্যাম্পলিং অক্ষম করে (`"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 এবং Application Insights লগ লেভেলের সারিবদ্ধতা নিশ্চিত করতে কনফিগারেশন ফাইল সেটআপ।
// 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 ফাংশন লগের আরেকটি গুরুত্বপূর্ণ দিক লগস ওয়ার্কস্পেস-এ প্রদর্শিত হচ্ছে না যা অ্যাপ্লিকেশন ইনসাইট দ্বারা ব্যবহৃত টেলিমেট্রি চ্যানেল কনফিগারেশন জড়িত। ডিফল্টরূপে, 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() কি করে?
- দ ConfigureFunctionsWorkerDefaults() পদ্ধতিটি Azure ফাংশন মিডলওয়্যার শুরু করে এবং লগিং সেট আপ করে।
Azure ফাংশন লগগুলিতে লগ দৃশ্যমানতা নিশ্চিত করা
মূল অন্তর্দৃষ্টি এবং পরবর্তী পদক্ষেপ
Azure ফাংশনে সঠিক লগ দৃশ্যমানতা নিশ্চিত করার জন্য host.json এর যত্নশীল কনফিগারেশন এবং সঠিক টেলিমেট্রি সেটিংস প্রয়োজন। মত বিষয় নমুনা এবং ডিফল্ট লগ লেভেল থ্রেশহোল্ড অনুপস্থিত লগ হতে পারে, এমনকি যখন পোর্টাল কনসোলে ডেটা উপস্থিত হয়। স্পষ্টভাবে নমুনা নিষ্ক্রিয় করা এবং টেলিমেট্রি ফ্লাশ পদ্ধতিতে কল করা প্রায়শই এই সমস্যার সমাধান করে।
উপরন্তু, অ্যাপ্লিকেশান অন্তর্দৃষ্টি সঠিকভাবে সংযুক্ত রয়েছে তা যাচাই করা এবং উভয় ক্ষেত্রেই যথাযথ লগ স্তর নিশ্চিত করা Program.cs এবং কনফিগারেশন ফাইলগুলি গুরুত্বপূর্ণ। এই সমন্বয়গুলির সাথে, তথ্য লগগুলি বিশ্বস্তভাবে লগস ওয়ার্কস্পেসে উপস্থিত হবে, Azure ফাংশন আচরণ সম্পর্কে স্পষ্ট অন্তর্দৃষ্টি প্রদান করবে। 🛠️
লগ
- অ্যাপ্লিকেশন অন্তর্দৃষ্টি কনফিগারেশনের অফিসিয়াল মাইক্রোসফ্ট ডকুমেন্টেশন - মাইক্রোসফট শিখুন
- Azure ফাংশন লগিং এর জন্য সর্বোত্তম অভ্যাস - Azure ফাংশন মনিটরিং