كيفية تكوين المراقبة لـ Azure Functions

تتكامل Azure Functions مع Application Insights لتمكينك من مراقبة تطبيقات الدوال بشكل أفضل. تُعد Application Insights، إحدى ميزات Azure Monitor، خدمة Application Performance Management (APM) التي تجمع البيانات التي يجري إنشاؤها من خلال تطبيق الدالة، بالإضافة إلى المعلومات التي ينشئها تطبيقك في السجلات. عادةً ما يتم تمكين تكامل Application Insights عند إنشاء تطبيق الدالة. إذا لم يحتوي التطبيق على مجموعة مفاتيح الأجهزة، فيجب عليك أولاً تمكين تكامل Application Insights.

يمكنك استخدام Application Insights بدون أي تكوين مخصص. يمكن أن يؤدي التكوين الافتراضي إلى كميات كبيرة من البيانات. إذا كنت تستخدم اشتراك Visual Studio Azure، فقد تصل إلى الحد الأقصى لبيانات Application Insights. للحصول على معلومات حول تكاليف Application Insights، راجع فواتير Application Insights. لمزيد من المعلومات، راجع الحلول التي تحتوي على حجم كبير من بيانات تتبع الاستخدام.

وفي مرحلة لاحقة في هذه المقالة، ستتعرف على كيفية تكوين وتخصيص البيانات التي ترسلها الدالة إلى Application Insights. يمكن تعيين تكوين التسجيل الشائع في ملف host.json. بشكل افتراضي، تحكم هذه الإعدادات أيضا السجلات المخصصة المنبعثة من التعليمات البرمجية الخاصة بك، على الرغم من أنه في بعض الحالات يمكن تعطيل هذا السلوك لصالح الخيارات التي تمنحك المزيد من التحكم في التسجيل. راجع سجلات التطبيقات المخصصة لمزيد من المعلومات.

إشعار

يمكنك استخدام إعدادات التطبيق المكونة بشكل خاص لتمثيل إعدادات معينة في ملف host.json لبيئة معينة. يتيح لك ذلك تغيير إعدادات host.json بشكل فعال دون الحاجة إلى إعادة نشر ملف host.json في مشروعك. لمزيد من المعلومات، يُرجى الرجوع إلى تجاوز قيم host.json.

سجلات التطبيقات المخصصة

بشكل افتراضي، يتم إرسال سجلات التطبيقات المخصصة التي تكتبها إلى مضيف الوظائف، والذي يرسلها بعد ذلك إلى Application Insights من خلال فئة "العامل". تسمح لك بعض مكدسات اللغات بإرسال السجلات مباشرة إلى Application Insights، مما يمنحك التحكم الكامل في كيفية إرسال السجلات التي تكتبها. يتغير مسار التسجيل من worker -> Functions host -> Application Insights إلى worker -> Application Insights.

يلخص الجدول التالي الخيارات المتوفرة لكل مكدس:

مكدس اللغة تكوين السجلات المخصصة
.NET (نموذج قيد المعالجة) host.json
.NET (نموذج معزول) بشكل افتراضي: host.json
خيار إرسال السجلات مباشرة: تكوين Application Insights في HostBuilder
Node.JS host.json
Python host.json
Java بشكل افتراضي: host.json
خيار إرسال السجلات مباشرة: تكوين وكيل Application Insights Java
PowerShell host.json

عند إرسال سجلات التطبيق المخصصة مباشرة، لم يعد المضيف يصدرها، host.json ولم يعد يتحكم في سلوكها. وبالمثل، تنطبق الخيارات التي يعرضها كل مكدس فقط على السجلات المخصصة، ولا تغير سلوك سجلات وقت التشغيل الأخرى الموضحة في هذه المقالة. للتحكم في سلوك جميع السجلات، قد تحتاج إلى إجراء تغييرات لكلا التكوينين.

تكوين الفئات

يحتوي مسجّل Azure Functions على فئة لكل سجل. تشير الفئة إلى أي جزء من التعليمة البرمجية لوقت التشغيل أو التعليمة البرمجية للدالة التي استُخدمت لكتابة السجل. تختلف الفئات بالنسبة للإصدار 1.x والإصدارات الأعلى.

يتم تعيين أسماء الفئات بشكل مختلف في Functions مقارنة أطر عمل .NET الأخرى. على سبيل المثال، عند استخدام ILogger<T> في ASP.NET، تكون الفئة هي اسم النوع العام. تستخدم ILogger<T>وظائف C# أيضا ، ولكن بدلا من تعيين اسم النوع العام كفئة، يقوم وقت التشغيل بتعيين فئات استنادا إلى المصدر. على سبيل المثال:

  • يتم تعيين فئة الإدخالات المتعلقة بتشغيل دالة إلى Function.<FUNCTION_NAME>.
  • يتم تعيين فئة الإدخالات التي تم إنشاؤها بواسطة التعليمات البرمجية للمستخدم داخل الدالة، مثل عند استدعاء logger.LogInformation()، لفئة Function.<FUNCTION_NAME>.User.

يصف الجدول التالي الفئات الرئيسية للسجلات التي ينشئها وقت التشغيل:

الفئة جدول ‏‏الوصف
Function traces يتضمن الدالة التي بدأت والسجلات المكتملة لجميع عمليات تشغيل الدالة. إذا كان نجح التنفيذ، فستكون هذه السجلات في المستوى Information. يتم تسجيل الاستثناءات على المستوى Error. يُنشئ وقت التشغيل أيضًا سجلات بمستوى Warning، على سبيل المثال ، عند إرسال الرسائل الموضوعة في قائمة الانتظار إلى قائمة انتظار الرسائل التي لم تتم معالجتها.
Function.<YOUR_FUNCTION_NAME> التبعيات يتم جمع بيانات التبعية تلقائيًا لبعض الخدمات. إذا كان نجح التنفيذ، فستكون هذه السجلات في المستوى Information. لمزيد من المعلومات، انظر التبعيات. يتم تسجيل الاستثناءات على المستوى Error. يُنشئ وقت التشغيل أيضًا سجلات بمستوى Warning، على سبيل المثال ، عند إرسال الرسائل الموضوعة في قائمة الانتظار إلى قائمة انتظار الرسائل التي لم تتم معالجتها.
Function.<YOUR_FUNCTION_NAME> customMetrics
customEvents
تتيح لك حزم C# و JavaScript SDKs جمع المقاييس المخصصة وتسجيل الأحداث المخصصة. لمزيد من المعلومات،راجع بيانات القياس عن بُعد المخصصة.
Function.<YOUR_FUNCTION_NAME> traces يحتوي على الدالة التي تم البدء فيها والسجلات المكتملة لعمليات تنفيذ دوال معينة. إذا كان نجح التنفيذ، فستكون هذه السجلات في المستوى Information. يتم تسجيل الاستثناءات على المستوى Error. يُنشئ وقت التشغيل أيضًا سجلات بمستوى Warning، على سبيل المثال ، عند إرسال الرسائل الموضوعة في قائمة الانتظار إلى قائمة انتظار الرسائل التي لم تتم معالجتها.
Function.<YOUR_FUNCTION_NAME>.User traces السجلات التي ينشئها المستخدم، والتي يمكن أن تكون على أي مستوى سجل. لمعرفة المزيد حول الكتابة إلى السجلات من الدوال، راجع الكتابة إلى السجلات.
Host.Aggregator customMetrics توفر هذه السجلات التي تم إنشاؤها في وقت التشغيل أعدادًا ومتوسطات لاستدعاءات الدوال على مدار فترة زمنية قابلة للتكوين. الفترة الافتراضية هي 30 ثانية أو 1000 نتيجة، أيهما يأتي أولاً. ومن الأمثلة على ذلك عدد مرات التشغيل ومعدل النجاح والفترة الزمنية. كل هذه السجلات مكتوبة على المستوى Information. إذا قمت بالتصفية عند Warning أو أعلى، فلن تجد أيًا من هذه البيانات.
Host.Results requests تشير هذه السجلات التي تم إنشاؤها في وقت التشغيل إلى نجاح أو فشل إحدى الدوال. كل هذه السجلات مكتوبة على المستوى Information. إذا قمت بالتصفية عند Warning أو أعلى، فلن تجد أيًا من هذه البيانات.
Microsoft traces فئة سجل مؤهلة بالكامل تعكس مكوّن وقت تشغيل .NET الذي دعا إليه المضيف.
Worker traces السجلات التي تم إنشاؤها من خلال عملية عامل اللغة بالنسبة للغات غير .NET. قد يتم أيضًا تسجيل سجلات العامل في اللغة في الفئة Microsoft.*، مثل Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcFunctionInvocationDispatcher. هذه السجلات مكتوبة عند المستوى Information.

إشعار

بالنسبة لوظائف مكتبة فئة .NET، تفترض هذه الفئات أنك تستخدم ILogger وليس ILogger<T>. لمزيد من المعلومات، راجع وثائق سجل الدوال.

يشير عمود Table إلى الجدول الذي تمت كتابة السجل إليه في Application Insights.

تكوين مستويات السجل

يتم تعيين مستوى سجل لكل سجل. تعبر القيمة عن عدد صحيح يشير إلى الأهمية النسبية:

LogLevel الرمز ‏‏الوصف
Trace 0 السجلات التي تحتوي على الرسائل الأكثر تفصيلاً. قد تحتوي هذه الرسائل على بيانات تطبيق حساسة. يتم تعطيل هذه الرسائل افتراضياً، ويجب ألا يتم تمكينها أبداً في بيئة إنتاج.
تصحيح 1 السجلات المستخدمة للتحقيق التفاعلي أثناء التطوير. يجب أن تحتوي هذه السجلات بشكل أساسي على معلومات مفيدة لتصحيح الأخطاء، وليس لها قيمة طويلة المدى.
‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏المعلومات 2 سجلات تتبع التدفق العام للتطبيق. يجب أن تكون لهذه السجلات قيمة طويلة الأجل.
تحذير 3 السجلات التي تبرز حدثاً غير طبيعي أو غير متوقع في تدفق التطبيق، ولكن لا تتسبب في توقف تنفيذ التطبيق.
خطأ 4 السجلات التي تبرز عند إيقاف التدفق الحالي للتنفيذ بسبب فشل. يجب أن تشير هذه السجلات إلى الإخفاقات في النشاط الحالي، وليس الفشل على مستوى التطبيق.
هام 5 يصف تطبيقاً غير قابل للاسترداد أو تعطلاً في النظام، أو فشلاً ذريعًا يتطلب اهتماماً فورياً.
بلا 6 تعطيل التسجيل للفئة المحددة.

يحدد تكوين ملف host.json مقدار تسجيل تطبيق الوظائف الذي يرسله إلى Application Insights.

لكل فئة ، تشير إلى مستوى السجل الأدنى للإرسال. تختلف إعدادات host.json بناءً على إصدار وقت تشغيل الدوال.

تحدد الأمثلة أدناه التسجيل استنادا إلى القواعد التالية:

  • يتم تعيين مستوى التسجيل الافتراضي إلى Warning لمنع التسجيل المفرط للفئات غير المتوقعة.
  • Host.Aggregator ويتم تعيينها Host.Results إلى مستويات أقل. يمكن أن يؤدي تعيينها إلى مستوى أعلى من اللازم (خاصة أعلى من Information) إلى فقدان المقاييس وبيانات الأداء.
  • يتم تعيين تسجيل تشغيل الدالة إلى Information. يمكن تجاوز هذا في التطوير المحلي إلى Debug أو Trace، عند الحاجة.
{
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "default": "Warning",
      "Host.Aggregator": "Trace",
      "Host.Results": "Information",
      "Function": "Information"
    }
  }
}

إذا تضمن host.json سجلات متعددة تبدأ بنفس السلسلة، فستتم مطابقة سجلات السجلات الأكثر تحديدًا أولاً. أمعن النظر في المثال التالي، حيث يتم تسجيل جميع عناصر وقت التشغيل، باستثناء Host.Aggregator، عند المستوى Error:

{
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

يمكنك استخدام إعداد مستوى السجل None واحد لمنع كتابة السجلات للفئة.

تنبيه

تتكامل Azure Functions مع Application Insights عن طريق تخزين أحداث بيانات تتبع الاستخدام في جداول Application Insights. سيؤدي تعيين مستوى سجل فئة إلى أي قيمة مختلفة عن Information ذلك إلى منع تدفق بيانات تتبع الاستخدام إلى تلك الجداول. ونتيجة لذلك، لن تتمكن من رؤية البيانات ذات الصلة في علامة التبويب رؤى التطبيقات أو مراقب الدوال .

ينطبق ما يلي على الأمثلة أعلاه:

  • إذا تم تعيين الفئة Host.Results على مستوى السجل Error، فستجمع فقط أحداث التتبع عن بعد لتنفيذ المضيف في الجدول requests لعمليات تنفيذ الوظائف الفاشلة، مما يمنع عرض تفاصيل تنفيذ المضيف لعمليات التنفيذ الناجحة في كل من التطبيق Insights وعلامة التبويب Function Monitor .
  • إذا تم تعيين فئة Functionعلى مستوى سجل Error، فسيتوقف جمع بيانات تتبع استخدام الدالة المتعلقة بـdependencies وcustomMetrics وcustomEvents لجميع الدوال، مما يمنع عرض أي من هذه البيانات في Application Insights. سيجمع فقط traces المسجلة بمستوى Error.

في كلتا الحالتين، ستستمر في جمع بيانات الأخطاء والاستثناءات في علامة التبويب Application Insights و Function Monitor . لمزيد من المعلومات، راجع الحلول ذات الحجم الكبير للقياس عن بُعد .

تكوين المجمع

كما هو مذكور في القسم السابق، يقوم وقت التشغيل بتجميع البيانات حول عمليات تنفيذ الدوال خلال فترة زمنية معينة. الفترة الافتراضية هي 30 ثانية أو 1000 مرة، أيهما يأتي أولاً. يمكنك تهيئة هذا الإعداد في ملف host.json . إليك مثال:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

تكوين أخذ العينات

يحتوي Application Insights على ميزة أخذ العينات التي يمكن أن تحميك من إنتاج الكثير من بيانات تتبع الاستخدام في عمليات التنفيذ المكتملة في أوقات ذروة التحميل. عندما يتجاوز معدل عمليات التنفيذ الواردة حدًا معينًا، يبدأ Application Insights في تجاهل بعض عمليات التنفيذ الواردة بشكل عشوائي. الإعداد الافتراضي لأقصى عدد من عمليات التنفيذ في الثانية هو 20 (five in version 1.x). يمكنك تهيئة أخذ العينات في host.json . إليك مثال:

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20,
        "excludedTypes": "Request;Exception"
      }
    }
  }
}

يمكنك استبعاد أنواع معينة من بيانات تتبع الاستخدام من أخذ العينات. في هذا المثال، يتم استبعاد البيانات من نوع Request و Exception من أخذ العينات. يعمل هذا على التأكد من تسجيل جميع عمليات تنفيذ الدوال (الطلبات) والاستثناءات بينما تظل الأنواع الأخرى من بيانات تتبع الاستخدام خاضعة لأخذ العينات.

إذا كان مشروعك يعتمد على Application Insights SDK للقيام بتتبع بيانات تتبع الاستخدام اليدوي، فقد تواجه سلوكا غريبا إذا كان تكوين أخذ العينات يختلف عن تكوين أخذ العينات في تطبيق الوظائف. في مثل هذه الحالات، استخدم نفس تكوين أخذ العينات مثل تطبيق الوظائف. لمزيد من المعلومات، راجع أخذ العينات في Application Insights.

تمكين مجموعة استعلام SQL

يجمع Application Insights تلقائيا البيانات على التبعيات لطلبات HTTP واستدعاءات قاعدة البيانات والعديد من الروابط. لمزيد من المعلومات، انظر التبعيات. بالنسبة لاستدعاءات SQL، يتم دائما تجميع اسم الخادم وقاعدة البيانات وتخزينها، ولكن لا يتم تجميع نص استعلام SQL بشكل افتراضي. يمكنك استخدام dependencyTrackingOptions.enableSqlCommandTextInstrumentation لتمكين تسجيل نص استعلام SQL عن طريق إعداد (كحد أدنى) ما يلي في ملف host.json:

"logging": {
    "applicationInsights": {
        "enableDependencyTracking": true,    
        "dependencyTrackingOptions": {
            "enableSqlCommandTextInstrumentation": true
        }
    }
}

لمزيد من المعلومات، راجع تعقب SQL المتقدم للحصول على استعلام SQL الكامل.

تكوين سجلات عنصر تحكم في التحجيم

هذه الميزة في مرحلة المعاينة.

يمكن لوحدة التحكم في تحجيم Azure Functions إرسال السجلات إلى Application Insights أو تخزين البيانات الثنائية الكبيرة حتى يتمكنوا من فهم القرارات التي تتخذها وحدة التحكم في التحجيم لتطبيق الدالة بشكل أفضل.

لتمكين هذه الميزة، يمكنك إضافة إعداد تطبيق يُسمى SCALE_CONTROLLER_LOGGING_ENABLED إلى إعدادات تطبيق الدالة. يجب أن تكون القيمة التالية للإعداد بالتنسيق <DESTINATION>:<VERBOSITY>:

الخاصية ‏‏الوصف
<DESTINATION> الوجهة التي يتم إرسال السجلات إليها. القيم الصالحة هي AppInsights و Blob.
عند استخدام AppInsights، تأكد من تمكين Application Insights في تطبيق وظيفتك.
عند تعيين الوجهة على Blob، يتم إنشاء السجلات في حاوية تخزين البيانات الثنائية الكبيرة المسماة azure-functions-scale-controller في حساب التخزين الافتراضي الذي تم تعيينه في إعداد التطبيق AzureWebJobsStorage.
<VERBOSITY> يحدد مستوى التسجيل. القيم المعتمدة هي None و Warning و Verbose.
عند ضبطه على Verbose، يسجل مراقب المقياس سببًا لكل تغيير في عدد العمال، ومعلومات حول المحفزات التي تدخل في تلك القرارات. تتضمن السجلات المطولة تحذيرات التشغيل والتجزئة المستخدمة بواسطة المشغلات قبل وبعد تشغيل وحدة التحكم في الميزان.

تلميح

ضع في اعتبارك أنه أثناء ترك تسجيل وحدة التحكم في الميزان ممكّناً، فإنه يؤثر على التكاليف المحتملة لمراقبة تطبيق وظيفتك. ضع في اعتبارك تمكين التسجيل حتى تقوم بجمع بيانات كافية لفهم كيفية تصرف وحدة تحكم المقياس، ثم تعطيلها.

على سبيل المثال، يقوم أمر Azure CLI التالي بتشغيل التسجيل المطول من وحدة التحكم في التحجيم إلى Application Insights:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:Verbose

في هذا المثال، استبدل <FUNCTION_APP_NAME> و<RESOURCE_GROUP_NAME> باسم تطبيق وظيفتك دالتك واسم مجموعة الموارد، على التوالي.

يعمل الأمر Azure CLI التالي على تعطيل التسجيل عن طريق تعيين وضع التطويل على None:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:None

يمكنك أيضًا تعطيل التسجيل عن طريق إزالة إعداد SCALE_CONTROLLER_LOGGING_ENABLED باستخدام الأمر Azure CLI التالي:

az functionapp config appsettings delete --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--setting-names SCALE_CONTROLLER_LOGGING_ENABLED

مع تمكين تسجيل وحدة التحكم في التحجيم، يمكنك الآن الاستعلام عن سجلات وحدة التحكم في التحجيم.

تمكين تكامل نتائج تحليل التطبيق (Application Insights)

لكي يرسل تطبيق الوظائف البيانات إلى Application Insights، فإنه يحتاج إلى الاتصال بمورد Application Insights باستخدام أحد إعدادات التطبيق هذه فقط:

اسم الإعداد ‏‏الوصف
APPLICATIONINSIGHTS_CONNECTION_STRING هذا هو الإعداد الموصى به، وهو مطلوب عند تشغيل مثيل Application Insights في سحابة ذات سيادة. يدعم سلسلة الاتصال قدرات جديدة أخرى.
APPINSIGHTS_INSTRUMENTATIONKEY الإعداد القديم، الذي يتم إهماله بواسطة Application Insights لصالح إعداد سلسلة الاتصال.

سواء كنت تقوم بإنشاء تطبيق الدالة في مدخل Microsoft Azure، من سطر الأوامر باستخدام Azure Functions Core Tools، أو Visual Studio Code، فإن التكامل مع Application Insights يتم تمكينه تلقائيًا. يحمل مورد Application Insights نفس اسم تطبيق الدالة، ويتم إنشاؤه إما في نفس المنطقة أو في أقرب منطقة.

تطبيق دالة جديد في مدخل Microsoft Azure

لمراجعة مورد Application Insights الذي يتم إنشاؤه، حدده لتوسيع نافذة Application Insights. يمكنك تغيير New resource name أو اختيار Location مختلف في Azure geography حيث تريد تخزين بياناتك.

لقطة شاشة لتمكين رؤى التطبيقات أثناء إنشاء تطبيق دالة.

عندما تختار Create، يتم إنشاء مورد Application Insights باستخدام تطبيق الدالة، والذي تم تعيين APPLICATIONINSIGHTS_CONNECTION_STRING في إعدادات التطبيق. كل شيء أصبح جاهزًا.

إضافة إلى تطبيق دالة موجود

إذا لم يتم إنشاء مورد Application Insights باستخدام تطبيق الدالة، فاستخدم الخطوات التالية لإنشاء المورد. يمكنك بعد ذلك إضافة سلسلة الاتصال من هذا المورد كإعداد تطبيق في تطبيق الوظائف.

  1. في مدخل Microsoft Azure، ابحث عن تطبيق الدالة وحدده، ثم اختر تطبيق الدالة.

  2. حدد شعار Application Insights is not configured في أعلى النافذة. إذا لم تر هذا الشعار، فقد يكون تطبيق Application Insights ممكّنًا بالفعل لتطبيقك.

     لقطة شاشة لتمكين رؤى التطبيقات من المدخل.

  3. وسّع تغيير المورد خاصتك وأنشئ مورد Application Insights باستخدام الإعدادات المحددة في الجدول التالي:

    الإعدادات القيمة المقترحة ‏‏الوصف
    اسم المورد الجديد اسم التطبيق الفريد من الأسهل استخدام نفس اسم تطبيق الدالة، والذي يجب أن يكون فريدًا في اشتراكك.
    Location أوروبا الغربية إذا أمكن، استخدم نفس المنطقة التي يوجد بها تطبيق الدالة، أو منطقة قريبة من تلك المنطقة.

     لقطة شاشة لإنشاء مورد Application Insights.

  4. حدد تطبيق.

    يتم إنشاء مورد Application Insights في نفس مجموعة الموارد والاشتراك مثل تطبيق دالتك. بعد إنشاء المورد، أغلق نافذة Application Insights .

  5. في تطبيق الدالة، حدد Configuration ضمن Settings، ثم حدد Application settings. إذا وجدت إعدادًا يُسمى APPLICATIONINSIGHTS_CONNECTION_STRING، فسيتم تمكين تكامل Application Insights لتطبيق الدالة الذي يعمل في Azure. إذا لم يكن هذا الإعداد موجودا لسبب ما، أضفه باستخدام Application Insights سلسلة الاتصال كقيمة.

إشعار

قد تستخدم APPINSIGHTS_INSTRUMENTATIONKEY تطبيقات الوظائف القديمة بدلا من APPLICATIONINSIGHTS_CONNECTION_STRING. عندما يكون ذلك ممكنا، يجب تحديث تطبيقك لاستخدام سلسلة الاتصال بدلا من مفتاح الأجهزة.

تعطيل التسجيل المضمن

لقد استخدمت الإصدارات السابقة من Azure Functions المراقبة المضمنة، والتي لم يعد موصى بها. عند تمكين Application Insights، عطّل التسجيل المضمن الذي يستخدم Azure Storage. يُعد التسجيل المدمج مفيدًا للاختبار باستخدام أحمال العمل الخفيفة، ولكنه غير مخصص للاستخدام الإنتاجي عالي الأحمال. لمراقبة الإنتاج، نوصي باستخدام Application Insights. إذا تم استخدام التسجيل المضمن في الإنتاج، فقد يكون سجل التسجيل غير مكتمل بسبب تقييد Azure Storage.

لتعطيل التسجيل المضمن، احذف إعداد التطبيق AzureWebJobsDashboard. للحصول على معلومات حول كيفية حذف إعدادات التطبيق في مدخل Microsoft Azure، راجع القسم Application settings في كيفية إدارة تطبيق الدالة. قبل حذف إعداد التطبيق، تأكد من عدم وجود دالة حالية في نفس تطبيق الدالة والتي تستخدم الإعداد لمشغلات أو روابط Azure Storage.

الحلول التي تحتوي على حجم كبير من بيانات تتبع الاستخدام

تطبيقات الوظائف هي جزء أساسي من الحلول التي يمكن أن تسبب كميات كبيرة من بيانات تتبع الاستخدام مثل حلول IoT والحلول السريعة التي تحركها الأحداث والأنظمة المالية ذات التحميل العالي وأنظمة التكامل. في هذه الحالة، يجب أن تفكر في تكوين إضافي لتقليل التكاليف مع الحفاظ على إمكانية المراقبة.

يمكن استهلاك بيانات تتبع الاستخدام التي تم إنشاؤها في لوحات المعلومات في الوقت الحقيقي والتنبيه والتشخيص التفصيلي وما إلى ذلك. اعتمادًا على كيفية استهلاك القياس عن بُعد المتولد، ستحتاج إلى تحديد استراتيجية لتقليل حجم البيانات المتولدة. ستسمح لك هذه الإستراتيجية بمراقبة تطبيقات الدالة في الإنتاج وتشغيلها وتشخيصها بشكل صحيح. يمكنك التفكير في الخيارات التالية:

  • استخدام أخذ العينات: كما ذكرنا سابقًا، سيساعد بشكل كبير على تقليل حجم أحداث بيانات تتبع الاستخدام التي يتم تناولها مع الحفاظ على التحليلات الصحيحة إحصائيًا. قد يحدث أنه حتى باستخدام أخذ العينات، لا تزال تحصل على حجم كبير من بيانات تتبع الاستخدام. افحص الخيارات التي يوفرها لك أخذ العينات التكيفية. على سبيل المثال، قم بتعيين maxTelemetryItemsPerSecond على قيمة توازن الحجم الذي تم إنشاؤه مع احتياجات المراقبة خاصتك. ضع في اعتبارك أنه يتم تطبيق أخذ عينات بيانات تتبع الاستخدام لكل مضيف يقوم بتنفيذ تطبيق الدالة.

  • مستوى السجل الافتراضي: استخدم Warning أو Error كقيمة افتراضية لجميع فئات بيانات تتبع الاستخدام. يمكنك الآن تحديد الفئات التي تريد تعيينها في Information حتى تتمكن من مراقبة الدالة وتشخيصها بشكل صحيح.

  • ضبط بيانات تتبع استخدام الدالة: مع ضبط مستوى السجل الافتراضي عند Error أو Warning، لن يتم جمع أي معلومات مفصلة من كل دالة (التبعيات، والمقاييس المخصصة، والأحداث المخصصة، والتتبعات). بالنسبة لهده الدوال التي تعتبر أساسية لمراقبة الإنتاج، حدد إدخالاً صريحًا للفئة Function.<YOUR_FUNCTION_NAME> واضبطه عند Information، حتى تتمكن من جمع معلومات مفصلة. في هذه المرحلة، لتجنب جمع السجلات التي أنشأها المستخدم عند المستوى Information، قم بتعيين الفئة Function.<YOUR_FUNCTION_NAME>.User لمستوى السجل Error أو Warning.

  • فئة Host.Aggregator: كما هو موضح في تكوين الفئات، توفر هذه الفئة معلومات مجمعة لاستدعاءات الدوال. يتم جمع المعلومات من هذه الفئة في جدول Application Insights customMetrics، ويتم عرضها في علامة تبويب الوظيفة نظرة عامة في مدخل Azure. اعتمادًا على كيفية تكوين المُجمِّع، ضع في اعتبارك أنه سيكون هناك تأخير في بيانات تتبع الاستخدام الذي تم تجميعه، كما هو محدد من خلال flushTimeout. إذا قمت بتعيين هذه الفئة على قيمة أخرى مختلفة عن Information، فستتوقف عن جمع البيانات في جدول customMetrics ولن تعرض المقاييس في علامة تبويب الدالة نظرة عامة .

    تعرض لقطة الشاشة التالية Host.Aggregator بيانات القياس عن بُعد المعروضة في علامة التبويب نظرة عامة الخاصة بالوظيفة:

     لقطة شاشة لـ Host.Aggregator معروضة في علامة التبويب

    تعرض لقطة الشاشة التالية Host.Aggregator بيانات القياس عن بُعد في جدول رؤى التطبيقات customMetrics:

    توضح لقطة الشاشة التالية بيانات تتبع الاستخدام لـ Host.Aggregator في جدول المقاييس المخصصة لتطبيق Application Insights.

  • الفئة Host.Results: كما هو موضح في تكوين الفئات، توفر هذه الفئة السجلات التي تم إنشاؤها في وقت التشغيل والتي تشير إلى نجاح أو فشل استدعاء الدالة. يتم جمع المعلومات من هذه الفئة في جدول Application Insights requests، ويتم عرضها في علامة تبويب الدالة المراقبة وفي لوحات معلومات Application Insights المختلفة (الأداء والفشل وما إلى ذلك). إذا قمت بتعيين هذه الفئة إلى قيمة أخرى مختلفة عن Information، فستجمع فقط بيانات تتبع الاستخدام التي تم إنشاؤها على مستوى السجل المحدد (أو أعلى). على سبيل المثال، يؤدي تعيينه إلى error تتبع بيانات الطلبات لعمليات التنفيذ الفاشلة فقط.

    تُظهر لقطة الشاشة التالية Host.Results بيانات القياس عن بُعد المعروضة في علامة تبويب الدالة المراقبة :

     لقطة شاشة للمضيف. نتائج القياس عن بُعد في علامة تبويب مراقب الدالة.

    تعرض لقطة الشاشة التالية Host.Results بيانات القياس عن بُعد المعروضة في لوحة بيانات أداء مؤشرات التطبيق:

    توضح لقطة الشاشة التالية بيانات تتبع الاستخدام Host.Results المعروضة في لوحة معلومات Application Insights Performance.

  • Host.Aggregator مقابل Host.Results: توفر كلتا الفئتين رؤى جيدة حول عمليات تنفيذ الوظائف. إذا لزم الأمر، يمكنك إزالة المعلومات التفصيلية من إحدى هذه الفئات، بحيث يمكنك استخدام الأخرى للمراقبة والتنبيه. إليك مثال على هذا الأمر:

{
  "version": "2.0",  
  "logging": {
    "logLevel": {
      "default": "Warning",
      "Function": "Error",
      "Host.Aggregator": "Error",
      "Host.Results": "Information", 
      "Function.Function1": "Information",
      "Function.Function1.User": "Error"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond": 1,
        "excludedTypes": "Exception"
      }
    }
  }
} 

مع هذا التكوين، سيكون لديك:

  • يتم تعيين القيمة الافتراضية لجميع الدوال وفئات القياس عن بُعد إلى Warning (بما في ذلك فئات Microsoft وWorker). لذلك، بشكل افتراضي، يتم جمع جميع الأخطاء والتحذيرات التي تم إنشاؤها بواسطة وقت التشغيل والتسجيل المخصص.

  • يتم تعيين مستوى سجل الفئة Function عند Error، لذلك بالنسبة لجميع الدوال، بشكل افتراضي، سيتم جمع الاستثناءات وسجلات الأخطاء فقط (سيتم تخطي التبعيات والمقاييس التي ينشئها المستخدم والأحداث التي ينشئها المستخدم).

  • بالنسبة للفئة Host.Aggregator، نظرًا لتعيينها على مستوى السجل Error، فلن يتم جمع المعلومات المجمعة من استدعاءات الدوال في customMetrics جدول Application Insights، ومعلومات حول عدد عمليات التنفيذ (الإجمالي، والناجح، والفاشل) لن تظهر في لوحة معلومات النظرة العامة على الدالة.

  • بالنسبة للفئة Host.Results، يتم تجميع جميع معلومات تنفيذ المضيف في الجدول requests Application Insights . سيتم عرض جميع نتائج الاستدعاءات في لوحة معلومات "function Monitor" وفي لوحات معلومات Application Insights.

  • بالنسبة للدالة التي تسمى Function1، قمنا بتعيين مستوى السجل إلى Information. لذلك، بالنسبة لهذه الدالة الملموسة، يتم تجميع جميع القياسات عن بُعد (التبعية والمقاييس المخصصة والأحداث المخصصة). بالنسبة للدالة نفسها، يتم تعيين الفئة Function1.User (عمليات التتبع التي ينشئها المستخدم) عند Error، لذلك سيتم فقط تجميع تسجيل الأخطاء المخصص.

    إشعار

    التكوين لكل وظيفة غير مدعوم في v1.x.

  • تم تكوين أخذ العينات لإرسال عنصر بيانات تتبع الاستخدام في الثانية لكل نوع، واستبعاد الاستثناءات. سيحدث أخذ العينات هذا لكل مضيف خادم يقوم بتشغيل تطبيق الوظائف الخاص بنا. لذا، إذا كان لدينا أربعة أمثلة، فإن هذا التكوين سيصدر أربعة عناصر قياس عن بعد في الثانية لكل نوع وجميع الاستثناءات التي قد تحدث.

    إشعار

    يتم تعديل أعداد المقاييس مثل معدل الطلب ومعدل الاستثناء للتعويض عن معدل أخذ العينات، بحيث تُظهر القيم الصحيحة تقريبًا في Metric Explorer.

تلميح

جرب تكوينات مختلفة للتأكد من أنك تغطي متطلباتك للتسجيل والمراقبة والتنبيه. تأكد من أن لديك تشخيصات مفصلة في حالة حدوث أخطاء غير متوقعة أو عطل.

تجاوز تكوين المراقبة في وقت التشغيل

أخيرًا، قد تكون هناك مواقف تحتاج فيها إلى تغيير سلوك التسجيل لفئة معينة في الإنتاج بسرعة، ولا تريد إجراء نشر كامل فقط لتغيير ملف host.json . في هذه الحالات، يمكنك تجاوز القيم الموجودة في ملف host.json.

لتهيئة هذه القيم على مستوى إعدادات التطبيق (وتجنب إعادة النشر على تغييرات host.json فقط)، يجب تجاوز قيم host.json معينة عن طريق إنشاء قيمة مكافئة كإعداد للتطبيق. عندما يكتشف وقت التشغيل أحد إعدادات التطبيق بتنسيقAzureFunctionsJobHost__path__to__setting، يتم تجاوز إعداد host.json المقابل في ملف path.to.setting ضمن إعداد JSON. عند التعبير عنها كإعداد تطبيق، يتم استبدال النقطة (.) المستخدمة للإشارة إلى التسلسل الهرمي لـ JSON بشرطة سفلية مزدوجة (__). على سبيل المثال، يمكنك استخدام إعدادات التطبيق أدناه لتكوين مستويات سجل الدوال الفردية كما هو مذكور أعلاه host.json.

مسار Host.json إعداد التطبيق
logging.logLevel.default AzureFunctionsJobHost__logging__logLevel__default
logging.logLevel.Host.Aggregator AzureFunctionsJobHost__logging__logLevel__Host__Aggregator
logging.logLevel.Function AzureFunctionsJobHost__logging__logLevel__Function
logging.logLevel.Function.Function1 AzureFunctionsJobHost__logging__logLevel__Function__Function1
logging.logLevel.Function.Function1.User AzureFunctionsJobHost__logging__logLevel__Function__Function1__User

يمكنك تجاوز الإعدادات مباشرة في نافذة "Azure portal Function App Configuration" أو باستخدام Azure CLI أو PowerShell النصي.

az functionapp config appsettings set --name MyFunctionApp --resource-group MyResourceGroup --settings "AzureFunctionsJobHost__logging__logLevel__Host__Aggregator=Information"

إشعار

سيؤدي تجاوز host.json من خلال تغيير إعدادات التطبيق إلى إعادة تشغيل تطبيق الدالة. لا يتم دعم إعدادات التطبيق التي تحتوي على فترة عند التشغيل على Linux في خطة Elastic Premium أو خطة مخصصة (App Service). في بيئات الاستضافة هذه، يجب الاستمرار في استخدام ملف host.json .

مراقبة تطبيقات الوظائف باستخدام التحقق من الصحة

يمكن استخدام ميزة Health Check لمراقبة تطبيقات الوظائف على خطط Premium (Elastic Premium) و Dedicated (App Service). التحقق من الصحة ليس خيارًا لخطة الاستهلاك. لمعرفة كيفية تكوينه، راجع مراقبة مثيلات App Service باستخدام التحقق من الصحة. يجب أن يحتوي تطبيق الوظائف على وظيفة مشغل HTTP تستجيب برمز حالة HTTP 200 على نفس نقطة النهاية كما تم تكوينها على معلمة "المسار" للتحقق من الصحة. يمكنك أيضًا أن تقوم هذه الوظيفة بإجراء فحوصات إضافية لضمان إمكانية الوصول إلى الخدمات التابعة والعمل عليها.

الخطوات التالية

للحصول على مزيدٍ من المعلومات حول المراقبة، راجع: