$lang['tuto'] = "سبق"; ?> لاگز ورک اسپیس میں Azure فنکشن

لاگز ورک اسپیس میں Azure فنکشن انفارمیشن لاگز کیوں غائب ہیں؟

لاگز ورک اسپیس میں Azure فنکشن انفارمیشن لاگز کیوں غائب ہیں؟
References for Azure Function Logging Solutions

ایپلی کیشن انسائٹس میں گم ہونے والے Azure فنکشن لاگز کا ٹربل شوٹنگ

Azure Functions کے ساتھ کام کرنا اکثر ایسا محسوس ہوتا ہے جیسے ایک اچھی طرح سے تیل والا آٹومیشن انجن بنانا۔ لیکن کیا ہوتا ہے جب کچھ اہم لاگز آپ کے Application Insights ورک اسپیس سے غائب ہوجاتے ہیں؟ 🤔 یہ ایک چیلنج ہے جس کا سامنا میں نے حال ہی میں Timer Trigger Azure فنکشن کو تیار کرتے ہوئے کیا۔ میرے انفارمیشن لیول لاگز، جو Azure Portal لاگ کنسول میں بالکل کام کرتے تھے، لاگز ورک اسپیس میں پراسرار طور پر غائب تھے۔

سب سے پہلے، میں نے فرض کیا کہ سب کچھ صحیح طریقے سے ترتیب دیا گیا تھا. بہر حال، میں نے اپنی فنکشن ایپ کی تخلیق کے دوران ایپلی کیشن انسائٹس سیٹ کر لی تھیں، اور ٹیلی میٹری سیٹ اپ باکس سے باہر کام کر رہا تھا۔ ایک ڈویلپر کے طور پر، انتباہ اور خرابی لاگز درست طریقے سے ظاہر ہوتے ہوئے دیکھنے سے زیادہ پریشان کن کوئی چیز نہیں ہے جبکہ معلوماتی لاگز کہیں نہیں مل رہے ہیں۔ وہ کہاں چھپے ہوئے تھے؟

ویب ایپلیکیشن کو ڈیبگ کرتے وقت اس مسئلے نے مجھے اسی طرح کے لمحے کی یاد دلائی۔ خرابی کے نوشتہ جات نے چیخا "مجھے ٹھیک کرو!" جبکہ ٹھیک ٹھیک معلومات کی سطح کے لاگ ریڈار کے نیچے پھسل گئے۔ یہ کچھ ایسا ہی ہے جیسے کسی گمشدہ پہیلی کے ٹکڑے کو تلاش کرنا — یہ جانتے ہوئے کہ یہ موجود ہے لیکن اسے ڈھیر میں نہیں دیکھنا۔ 🧩 Azure کی host.json اور ٹیلی میٹری کی ترتیبات اکثر یہاں ایک کردار ادا کرتی ہیں۔

اس مضمون میں، میں اس مسئلے کی بنیادی وجہ اور اسے مرحلہ وار حل کرنے کا طریقہ بتاؤں گا۔ host.json کنفیگریشنز سے لے کر لاگ لیول تھریش ہولڈز کی تصدیق تک، میں حل کے لیے آپ کی رہنمائی کروں گا۔ آئیے اس بات کو یقینی بنائیں کہ وہ گمشدہ معلوماتی لاگز آپ کے لاگز ورک اسپیس میں واپسی کا راستہ تلاش کریں۔

حکم استعمال کی مثال
ConfigureFunctionsWorkerDefaults() Azure فنکشنز ورکر پائپ لائن کو شروع اور کنفیگر کرتا ہے۔ یہ یقینی بناتا ہے کہ مڈل ویئر اور خدمات Azure فنکشنز کے عمل کے لیے درست طریقے سے ترتیب دی گئی ہیں۔
Configure<LoggerFilterOptions>() لاگز کو ان کے لاگ لیول کی بنیاد پر فلٹر کرنے کے لیے استعمال کیا جاتا ہے، جیسے کہ انفارمیشن، وارننگ، یا ایرر۔ یہ یقینی بناتا ہے کہ صرف مطلوبہ لاگ لیولز پر کارروائی کی جاتی ہے۔
services.AddApplicationInsightsTelemetryWorkerService() کارکن کی خدمات کے لیے درخواست کی بصیرت کا اندراج کرتا ہے۔ یہ ٹیلی میٹری کو جمع کرنے اور لاگنگ کرنے کے قابل بناتا ہے خاص طور پر Azure فنکشنز کے لیے غیر HTTP سے متحرک سیاق و سباق میں۔
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 فنکشن کے ذریعہ تیار کردہ Logs ورک اسپیس میں ظاہر نہیں ہوتے ہیں، حالانکہ وہ Azure Portal لاگ کنسول میں ظاہر ہوتے ہیں۔ یہ تفاوت اکثر host.json فائل میں غلط کنفیگریشن، ناکافی ٹیلی میٹری سیٹنگز، یا Application Insights کے انضمام کے مسائل کی وجہ سے ہوتا ہے۔ جیسے کمانڈز کا استعمال کرکے اور ، ہم اس بات کو یقینی بناتے ہیں کہ درخواست کی بصیرتیں توقع کے مطابق لاگز کیپچر کرتی ہیں۔ یہ اسکرپٹ ٹیلی میٹری ڈیٹا اکٹھا کرنے اور اس کے انتظام کے لیے ایک مضبوط بنیاد قائم کرتے ہیں۔

سب سے پہلے، 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 Functions Application Insights SDK کا استعمال کرتے ہیں، جو لاگز کو ٹیلی میٹری اینڈ پوائنٹ پر بھیجنے سے پہلے بفر کرتا ہے۔ تاہم، یہ بفرنگ کچھ لاگ اندراجات جیسے کہ معلومات کی سطح کے لاگز میں سیمپلنگ یا ٹیلی میٹری ڈیٹا کی غلط فلشنگ کی وجہ سے تاخیر یا خارج کر سکتی ہے۔ مستقل لاگ کو برقرار رکھنے کے لیے ٹیلی میٹری چینل کے مناسب رویے کو یقینی بنانا بہت ضروری ہے۔

ایک اکثر نظر انداز کرنے والا عنصر ہے۔ host.json میں کنفیگریشن۔ جب نمونے لینے کو فعال کیا جاتا ہے، تو لاگز کا صرف ایک حصہ ایپلی کیشن انسائٹس کو ڈیٹا کے حجم اور اخراجات کو کم کرنے کے لیے بھیجا جاتا ہے۔ تاہم، اگر انفارمیشن لاگز ڈیبگنگ کے لیے اہم ہیں، تو آپ کو یا تو سیمپلنگ کو مکمل طور پر غیر فعال کرنا چاہیے (`"isEnabled": false`) یا اس بات کو یقینی بنانے کے لیے کہ تمام ضروری لاگز کیپچر کیے گئے ہیں نمونے لینے کی منطق کو ایڈجسٹ کریں۔ مثال کے طور پر، مجھے ایک مسئلہ کا سامنا کرنا پڑا جہاں نمونے لینے کو فعال کرنے سے غیر اہم معلوماتی لاگز میں بے ترتیب کمی واقع ہوئی، جس سے پروڈکشن ڈیبگنگ کے دوران مایوسی پیدا ہوئی۔ 💻

اس کے علاوہ، استعمال کرتے ہوئے کمانڈ اس بات کو یقینی بناتا ہے کہ تمام بفر شدہ ٹیلی میٹری کو فوری طور پر بھیج دیا جائے، ڈیٹا کے نقصان سے بچا جائے۔ ایسے حالات میں جہاں Azure فنکشنز ہائی لوڈ ٹرگرز جیسے HTTP درخواستوں یا ٹائمر ٹرگرز کے تحت چلتے ہیں، ٹیلی میٹری بفرنگ تیزی سے جمع ہو سکتی ہے، جس سے تاخیر ہوتی ہے۔ واضح طور پر TelemetryClient.Flush() پر کال کرکے یا ٹیلی میٹری اینڈ پوائنٹ کنیکٹیویٹی کی تصدیق کرکے، ڈویلپر لاگ ان تضادات کو کم کرسکتے ہیں اور نگرانی کے درست ماحول کو برقرار رکھ سکتے ہیں۔ بالآخر، نمونے لینے، بفرنگ، اور فلشنگ میں توازن لاگت کو کم کرتے ہوئے لاگ ان کی زیادہ سے زیادہ مرئیت کی اجازت دیتا ہے۔

  1. لاگز ورک اسپیس سے میرے انفارمیشن لاگز کیوں غائب ہیں؟
  2. کی وجہ سے معلومات کے نوشتہ جات ظاہر نہیں ہوسکتے ہیں۔ میں . کے ساتھ نمونے لینے کو غیر فعال کریں۔ تمام نوشتہ جات پر قبضہ کرنے کے لیے۔
  3. host.json میں لاگ لیول کنفیگریشن کیا کرتی ہے؟
  4. دی کیپچر شدہ لاگ ان کی کم از کم شدت کی وضاحت کرتا ہے، جیسے , اس سطح پر یا اس سے اوپر کے لاگز پر عملدرآمد کو یقینی بنانا۔
  5. میں یہ کیسے یقینی بنا سکتا ہوں کہ ٹیلی میٹری ڈیٹا کو ایپلی کیشن انسائٹس میں فلش کیا گیا ہے؟
  6. استعمال کریں۔ تمام بفر شدہ ٹیلی میٹری کو فوری طور پر بھیجنے پر مجبور کرنے کے لیے آپ کے فنکشن کوڈ میں طریقہ۔
  7. وارننگ اور ایرر لاگز کیوں نظر آتے ہیں لیکن انفارمیشن لاگز کیوں نہیں؟
  8. یہ مسئلہ اس وقت ہوتا ہے جب غلط کنفیگرڈ ہے یا اصلاح کی وجہ سے انفارمیشن لاگز کو چھوڑ دیں۔
  9. کیا میں مخصوص لاگز کو شامل کرنے کے لیے نمونے لینے کی منطق کو ایڈجسٹ کر سکتا ہوں؟
  10. جی ہاں، آپ اپنی مرضی کے مطابق کر سکتے ہیں کے تحت جائیداد مخصوص ٹیلی میٹری اقسام کو خارج کرنے کے لیے جیسے یا Exception.
  11. AddApplicationInsightsTelemetryWorkerService() کا کیا کردار ہے؟
  12. دی طریقہ Azure فنکشنز میں ٹیلی میٹری کے لیے ایپلیکیشن انسائٹس کو رجسٹر کرتا ہے۔
  13. میں اس بات کی تصدیق کیسے کروں کہ درخواست کی بصیرت صحیح طریقے سے منسلک ہے؟
  14. اپنی فنکشن ایپ کی کنفیگریشن میں ایپلی کیشن انسائٹس سیٹنگز کے تحت انسٹرومینٹیشن کی یا کنکشن سٹرنگ کو چیک کریں۔
  15. کیا میں معلوماتی سطح کے پیغامات کو پروگرام کے مطابق لاگ کر سکتا ہوں؟
  16. جی ہاں، آپ استعمال کر سکتے ہیں آپ کے فنکشن کوڈ میں واضح طور پر معلوماتی پیغامات کو لاگ کرنے کا طریقہ۔
  17. میں ٹائمر ٹرگر فنکشن میں گمشدہ لاگز کو کیسے حل کر سکتا ہوں؟
  18. کی تصدیق کریں۔ کنفیگریشن، یقینی بنائیں کہ ٹیلی میٹری منسلک ہے، اور کال کریں۔ فنکشن کے آخر میں
  19. ConfigureFunctionsWorkerDefaults() کیا کرتا ہے؟
  20. دی طریقہ Azure فنکشنز مڈل ویئر کو شروع کرتا ہے اور لاگنگ سیٹ کرتا ہے۔

Azure فنکشن لاگز میں لاگ کی مرئیت کو یقینی بنانا

Azure Functions میں لاگ ان کی مناسب نمائش کو یقینی بنانے کے لیے host.json کی محتاط ترتیب اور مناسب ٹیلی میٹری سیٹنگز کی ضرورت ہوتی ہے۔ جیسے مسائل اور ڈیفالٹ لاگ لیول تھریشولڈز لاپتہ لاگز کا باعث بن سکتے ہیں، یہاں تک کہ جب ڈیٹا پورٹل کنسول میں ظاہر ہو۔ واضح طور پر نمونے لینے کو غیر فعال کرنا اور ٹیلی میٹری فلش طریقوں کو کال کرنا اکثر اس مسئلے کو حل کرتا ہے۔

مزید برآں، اس بات کی توثیق کرنا کہ ایپلیکیشن بصیرت صحیح طریقے سے منسلک ہے اور دونوں میں لاگ ان کی مناسب سطح کو یقینی بنانا اور کنفیگریشن فائلیں اہم ہیں۔ ان ایڈجسٹمنٹ کے ساتھ، انفارمیشن لاگز قابل اعتماد طور پر لاگز ورک اسپیس میں ظاہر ہوں گے، جو Azure فنکشن کے رویے کے بارے میں واضح بصیرت فراہم کرتے ہیں۔ 🛠️

  1. ایپلیکیشن انسائٹس کنفیگریشن پر مائیکروسافٹ کی آفیشل دستاویزات - مائیکروسافٹ سیکھیں۔
  2. Azure فنکشن لاگنگ کے لیے بہترین پریکٹسز - Azure افعال کی نگرانی