استكشاف أخطاء سجلات وظائف Azure المفقودة وإصلاحها في رؤى التطبيق
غالبًا ما يبدو العمل مع Azure Functions وكأنه بناء محرك آلي جيد التزييت. ولكن ماذا يحدث عندما تختفي بعض السجلات المهمة من مساحة عمل Application Insights الخاصة بك؟ 🤔 إنه تحدٍ واجهته مؤخرًا أثناء تطوير وظيفة Timer Trigger Azure. كانت سجلات مستوى المعلومات الخاصة بي، والتي عملت بشكل مثالي في وحدة تحكم سجل Azure Portal، غائبة بشكل غامض في مساحة عمل السجلات.
في البداية، افترضت أن كل شيء تم تكوينه بشكل صحيح. بعد كل شيء، لقد قمت بإعداد Application Insights أثناء إنشاء تطبيق الوظائف الخاص بي، ويبدو أن إعداد القياس عن بعد يعمل خارج الصندوق. كمطور، ليس هناك ما يثير الحيرة أكثر من رؤية سجلات التحذير و الخطأ تظهر بشكل صحيح بينما لا يمكن العثور على سجلات المعلومات في أي مكان. أين كانوا يختبئون؟
ذكّرتني هذه المشكلة بلحظة مماثلة عند تصحيح أخطاء تطبيق ويب. صرخت سجلات الأخطاء "أصلحني!" بينما انزلقت سجلات مستوى المعلومات الدقيقة تحت الرادار. إنه يشبه إلى حد ما البحث عن قطعة أحجية مفقودة، مع العلم أنها موجودة ولكن لا يمكن رؤيتها تمامًا في الكومة. 🧩 غالبًا ما تلعب إعدادات host.json في Azure وإعدادات القياس عن بُعد دورًا هنا.
في هذه المقالة، سأشرح السبب الجذري لهذه المشكلة وكيفية حلها خطوة بخطوة. بدءًا من تكوينات host.json وحتى التحقق من حدود مستوى السجل، سأرشدك خلال الحل. دعونا نتأكد من أن تلك سجلات المعلومات المفقودة ستجد طريقها مرة أخرى إلى مساحة عمل السجلات.
يأمر | مثال للاستخدام |
---|---|
ConfigureFunctionsWorkerDefaults() | تهيئة وتكوين مسار عامل Azure Functions. فهو يضمن إعداد البرامج الوسيطة والخدمات بشكل صحيح لتنفيذ وظائف Azure. |
Configure<LoggerFilterOptions>() | يُستخدم لتصفية السجلات بناءً على مستوى السجل الخاص بها، مثل المعلومات أو التحذير أو الخطأ. وهذا يضمن معالجة مستويات السجل المطلوبة فقط. |
services.AddApplicationInsightsTelemetryWorkerService() | تسجيل رؤى التطبيق لخدمات العمال. فهو يتيح جمع القياس عن بعد وتسجيله خصيصًا لوظائف Azure في السياقات التي لا يتم تشغيلها بواسطة HTTP. |
options.MinLevel = LogLevel.Information | يضبط الحد الأدنى لمستوى السجل. على سبيل المثال، تضمن "المعلومات" التقاط سجلات مستويات المعلومات والتحذير والخطأ. |
ConfigureServices() | يوفر طريقة لإضافة خدمات مخصصة أو تكوين التبعيات، مثل التسجيل أو Application Insights أو أي مكونات متعلقة بحاوية DI. |
samplingSettings: { isEnabled: false } | تعطيل أخذ عينات القياس عن بعد لضمان التقاط جميع السجلات، بما في ذلك سجلات مستوى المعلومات، دون تصفيتها. |
host.Run() | ينفذ المضيف الذي تم تكوينه لتشغيل العملية المنفذة لـ Azure Functions ويبدأ الاستماع للأحداث أو المشغلات الواردة. |
builder.SetMinimumLevel(LogLevel.Information) | يضبط بشكل صريح الحد الأدنى لمستوى السجل لتكوين المسجل لضمان معالجة السجلات التفصيلية على مستوى المعلومات وما فوق. |
Assert.True(condition, message) | يستخدم في اختبار الوحدة للتحقق من صحة الشرط. وفي هذه الحالة، يتم التحقق من أنه تم التقاط سجلات المعلومات بنجاح. |
LogInformation("Message") | يسجل رسالة إعلامية. يعد ذلك ضروريًا لتصحيح الأخطاء ومراقبة الأنشطة غير المهمة في وظائف Azure. |
فهم سجلات وظائف Azure المفقودة وكيفية حلها
تهدف البرامج النصية المقدمة سابقًا إلى حل مشكلة شائعة حيث لا تظهر التي تم إنشاؤها بواسطة وظيفة Azure في مساحة عمل السجلات، على الرغم من ظهورها في وحدة تحكم سجل Azure Portal. يحدث هذا التناقض غالبًا بسبب التكوين غير الصحيح في الملف host.json، أو عدم كفاية إعدادات القياس عن بعد، أو مشكلات في تكامل Application Insights. باستخدام أوامر مثل و ، فإننا نضمن أن Application Insights يلتقط السجلات كما هو متوقع. تنشئ هذه البرامج النصية أساسًا قويًا لجمع بيانات القياس عن بعد وإدارتها.
أولاً، يقوم `HostBuilder` في Program.cs بإعداد بيئة عامل Azure Function. الطريقة يضمن تهيئة جميع البرامج الوسيطة المطلوبة لوظائف Azure. كما يسمح أيضًا بالتسجيل المخصص وتكوين حقن التبعية. بعد ذلك، نسجل رؤى التطبيق بشكل صريح باستخدام AddApplicationInsightsTelemetryWorkerService(). تضمن هذه الخطوة تكوين مجموعة القياس عن بعد بشكل صحيح لوظائف Azure التي لا يتم تشغيلها بواسطة HTTP. على سبيل المثال، تخيل تصحيح أخطاء وظيفة تشغيل المؤقت: بدون رؤى التطبيق، يصبح تتبع الأداء وتحديد المشكلات عملية يدوية وتستغرق وقتًا طويلاً. 🔧
يلعب الملف host.json دورًا رئيسيًا في التحكم في مستويات السجل التي يتم التقاطها. من خلال تعيين `LogLevel` على معلومات في كل من القسم الافتراضي وقسم Application Insights، فإننا نحدد بوضوح أنه يجب معالجة سجلات مستوى المعلومات. ومع ذلك، يمكن لخاصية samplingSettings في بعض الأحيان تصفية السجلات، مما يؤدي إلى فقدان الإدخالات في مساحة عمل السجلات. من خلال تعطيل أخذ العينات ("isEnabled": false`)، فإننا نضمن التقاط جميع بيانات القياس عن بعد، بما في ذلك سجلات المعلومات. يعد هذا مهمًا بشكل خاص عند استكشاف مشكلات الإنتاج وإصلاحها حيث قد تكشف التفاصيل البسيطة عن السبب الجذري. لقد واجهت ذات مرة موقفًا حيث ساعدت رسالة LogInformation الصغيرة في الكشف عن برنامج جدولة تم تكوينه بشكل خاطئ. 🎯
وأخيرًا، يتحقق البرنامج النصي لاختبار الوحدة من أن السجلات على مستويات مختلفة - المعلومات والتحذير والخطأ - يتم إصدارها والتقاطها بشكل صحيح. استخدام ، نحن نضمن أن يقوم المسجل بمعالجة جميع السجلات عند الحد المطلوب أو أعلى منه. في مثالنا، تحققنا من ظهور سجلات المعلومات عند تكوينها بشكل صريح. تضمن كتابة اختبارات الوحدة مثل هذه أن سلوك التسجيل متسق عبر البيئات، مما يمنع المفاجآت أثناء النشر. توفر هذه البرامج النصية معًا حلاً شاملاً لاستكشاف أخطاء سجلات Azure Function المفقودة وإصلاحها وتحسين مجموعة القياس عن بعد في تطبيقات السحابة الخاصة بك.
التأكد من ظهور سجلات وظائف Azure في مساحة عمل السجلات
فيما يلي حل خلفي لـ C# لمعالجة مشكلة سجلات المعلومات المفقودة، مما يضمن التكوين الصحيح لـ Application Insights.
// 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 Function التي لا تظهر في مساحة عمل السجلات يتضمن تكوين قناة القياس عن بعد الذي تستخدمه Application Insights. افتراضيًا، تستخدم وظائف Azure حزمة Application Insights SDK، التي تقوم بتخزين السجلات مؤقتًا قبل إرسالها إلى نقطة نهاية القياس عن بعد. ومع ذلك، يمكن أن يؤدي هذا التخزين المؤقت إلى تأخير أو حذف بعض إدخالات السجل مثل سجلات مستوى المعلومات بسبب أخذ العينات أو المسح غير الصحيح لبيانات القياس عن بعد. يعد ضمان السلوك المناسب لقناة القياس عن بعد أمرًا ضروريًا للحفاظ على سجلات متسقة.
أحد العوامل التي يتم تجاهلها غالبًا هو التكوين في host.json. عند تمكين أخذ العينات، يتم إرسال جزء صغير فقط من السجلات إلى Application Insights لتقليل حجم البيانات والتكاليف. ومع ذلك، إذا كانت سجلات المعلومات ضرورية لتصحيح الأخطاء، فيجب عليك إما تعطيل أخذ العينات بالكامل ("isEnabled": false`) أو ضبط منطق أخذ العينات لضمان التقاط جميع السجلات الضرورية. على سبيل المثال، واجهت مشكلة حيث تسبب تمكين أخذ العينات في حدوث انخفاض عشوائي في سجلات المعلومات غير الهامة، مما أدى إلى الإحباط أثناء تصحيح أخطاء الإنتاج. 💻
بالإضافة إلى ذلك، باستخدام تضمن الأوامر إرسال كافة بيانات القياس عن بعد المخزنة مؤقتًا على الفور، مما يؤدي إلى تجنب فقدان البيانات. في السيناريوهات التي يتم فيها تشغيل وظائف Azure تحت مشغلات عالية التحميل مثل طلبات HTTP أو مشغلات المؤقت، يمكن أن يتراكم التخزين المؤقت للقياس عن بعد بسرعة، مما يتسبب في حدوث تأخيرات. من خلال استدعاء TelemetryClient.Flush() بشكل صريح أو التحقق من اتصال نقطة نهاية القياس عن بعد، يمكن للمطورين تقليل حالات عدم تناسق السجل والحفاظ على بيئة مراقبة دقيقة. وفي نهاية المطاف، تتيح الموازنة بين أخذ العينات والتخزين المؤقت والمسح رؤية مثالية للسجل مع تقليل التكاليف.
- لماذا تكون سجلات المعلومات الخاصة بي مفقودة من مساحة عمل السجلات؟
- قد لا تظهر سجلات المعلومات بسبب في . تعطيل أخذ العينات مع لالتقاط كافة السجلات.
- ماذا يفعل تكوين LogLevel في host.json؟
- ال يحدد الحد الأدنى لخطورة السجل الذي تم التقاطه، مثل ، مما يضمن معالجة السجلات عند هذا المستوى أو أعلى.
- كيف يمكنني التأكد من تدفق بيانات القياس عن بعد إلى Application Insights؟
- استخدم الطريقة في رمز وظيفتك لإجبار جميع القياسات عن بعد المخزنة مؤقتًا على الإرسال على الفور.
- لماذا تكون سجلات التحذير والأخطاء مرئية وليس سجلات المعلومات؟
- تحدث هذه المشكلة عندما تم تكوينه بشكل خاطئ أو إسقاط سجلات المعلومات بسبب التحسين.
- هل يمكنني تعديل منطق أخذ العينات ليشمل سجلات محددة؟
- نعم، يمكنك تخصيص الملكية تحت لاستبعاد أنواع محددة من القياس عن بعد مثل أو Exception.
- ما هو دور AddApplicationInsightsTelemetryWorkerService()؟
- ال تقوم الطريقة بتسجيل رؤى التطبيق للقياس عن بعد في وظائف Azure.
- كيف يمكنني التحقق من ربط Application Insights بشكل صحيح؟
- تحقق من مفتاح الأجهزة أو سلسلة الاتصال في تكوين تطبيق الوظيفة الخاص بك ضمن إعدادات Application Insights.
- هل يمكنني تسجيل الرسائل على مستوى المعلومات برمجياً؟
- نعم يمكنك استخدام طريقة لتسجيل رسائل المعلومات بشكل صريح في رمز وظيفتك.
- كيف يمكنني استكشاف أخطاء السجلات المفقودة وإصلاحها في وظيفة تشغيل المؤقت؟
- التحقق من التكوين، وتأكد من توصيل القياس عن بعد، ثم اتصل في نهاية الوظيفة.
- ماذا يفعل ConfigureFunctionsWorkerDefaults()؟
- ال تقوم الطريقة بتهيئة البرنامج الوسيط لـ Azure Functions وإعداد التسجيل.
ضمان رؤية السجل في سجلات وظائف Azure
يتطلب ضمان الرؤية الصحيحة للسجل في Azure Functions تكوينًا دقيقًا لـ host.json وإعدادات القياس عن بعد المناسبة. قضايا مثل ويمكن أن تؤدي حدود مستوى السجل الافتراضية إلى فقدان السجلات، حتى عند ظهور البيانات في وحدة تحكم البوابة الإلكترونية. غالبًا ما يؤدي التعطيل الصريح لأخذ العينات واستدعاء طرق تدفق القياس عن بعد إلى حل هذه المشكلة.
بالإضافة إلى ذلك، التحقق من صحة اتصال Application Insights والتأكد من مستويات السجل المناسبة في كليهما وملفات التكوين أمر بالغ الأهمية. من خلال هذه التعديلات، ستظهر سجلات المعلومات بشكل موثوق في مساحة عمل السجلات، مما يوفر رؤى واضحة حول سلوك وظيفة Azure. 🛠️
- وثائق Microsoft الرسمية حول تكوين رؤى التطبيقات - مايكروسوفت تعلم
- أفضل الممارسات لتسجيل وظائف Azure - مراقبة وظائف Azure