مراقبة التطبيق ل Azure App Service وPython (معاينة)

هام

للحصول على الشروط القانونية التي تنطبق على ميزات Azure الموجودة في الإصدار التجريبي، أو المعاينة، أو التي لم يتم إصدارها بعد في التوفر العام، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.

مراقبة تطبيقات ويب Python على Azure App Services دون تعديل التعليمات البرمجية. يوضح لك هذا الدليل كيفية تمكين Azure Monitor Application Insights ويقدم تلميحات لأتمتة عمليات النشر واسعة النطاق.

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

تقرير عن حالة النظام اسم المكتبة المدعومة الإصدارات المدعومة
OpenTelemetry Django Instrumentation django الرابط
OpenTelemetry FastApi Instrumentation fastapi الرابط
OpenTelemetry Flask Instrumentation flask الرابط
OpenTelemetry Psycopg2 Instrumentation psycopg2 الرابط
تقرير عن حالة النظام لطلبات القياس المفتوح requests الرابط
OpenTelemetry UrlLib Instrumentation urllib الكل
OpenTelemetry UrlLib3 Instrumentation urllib3 الرابط

إشعار

إذا كنت تستخدم Django، فشاهد قسم Django Instrumentation الإضافي في هذه المقالة.

يتم جمع بيانات تتبع الاستخدام للتسجيل على مستوى مسجل الجذر. لمعرفة المزيد حول التسلسل الهرمي للتسجيل الأصلي في Python، قم بزيارة وثائق تسجيل Python.

المتطلبات الأساسية

  • إصدار Python 3.11 أو إصدار سابق.
  • يجب نشر App Service كتعليق برمجي. الحاويات المخصصة غير مدعومة.

تمكين "Application Insights"

أسهل طريقة لمراقبة تطبيقات Python على Azure App Services هي من خلال مدخل Microsoft Azure.

تنشيط المراقبة في مدخل Microsoft Azure تلقائيا أدوات التطبيق الخاص بك مع Application Insights ولا يتطلب أي تغييرات في التعليمات البرمجية.

إشعار

يجب عليك استخدام البنية التلقائية على App Service فقط إذا كنت لا تستخدم الأجهزة اليدوية ل OpenTelemetry في التعليمات البرمجية الخاصة بك، مثل Azure Monitor OpenTelemetry Distro أو Azure Monitor OpenTelemetry Exporter. هذا لمنع إرسال البيانات المكررة. لمعرفة المزيد حول هذا الموضوع، راجع قسم استكشاف الأخطاء وإصلاحها في هذه المقالة.

البنية التلقائية من خلال مدخل Microsoft Azure

للحصول على قائمة كاملة بسيناريوهات البنية التلقائية المدعومة، راجع البيئات واللغات وموفري الموارد المعتمدين.

قم بالتبديل بين مراقبة تطبيقات Python في Azure App Service دون الحاجة إلى تغييرات في التعليمات البرمجية.

يتكامل Application Insights ل Python مع خدمة تطبيقات Linux Azure المستندة إلى التعليمات البرمجية.

التكامل في المعاينة العامة. يضيف Python SDK، وهو في GA.

  1. اختر Application Insights في لوحة تحكم Azure لخدمة التطبيق، ثم حدد Enable.

    لقطة شاشة لعلامة التبويب Application Insights مع تحديد تمكين.

  2. اختر إنشاء مورد جديد أو حدد موردا Insights للتطبيق لهذا التطبيق.

    إشعار

    عند تحديدموافقلإنشاء مورد جديد ستتم مطالبتكبتطبيق إعدادات المراقبة. سيؤدي تحديدمتابعةإلى ربط مورد Application Insights الجديد بخدمة التطبيق الخاص بك، وسيؤدي ذلك أيضاً إلىإعادة تشغيل خدمة التطبيق.

    لقطة شاشة لتغيير القائمة المنسدلة للموارد.

  3. يمكنك تحديد المورد، وهو جاهز للاستخدام.

    لقطة شاشة من تجهيز التطبيق الخاص بك.

التكوين

يمكنك التكوين باستخدام متغيرات بيئة OpenTelemetry مثل:

متغير البيئة الوصف
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES يحدد سمات مورد OpenTelemetry المقترنة بتطبيقك. يمكنك تعيين أي سمات مورد مع OTEL_RESOURCE_ATTRIBUTES أو استخدام OTEL_SERVICE_NAME لتعيين service.nameفقط .
OTEL_LOGS_EXPORTER إذا تم تعيينه إلى None، يعطل جمع وتصدير بيانات تتبع الاستخدام للتسجيل.
OTEL_METRICS_EXPORTER إذا تم تعيينه إلى None، يعطل جمع وتصدير القياس عن بعد القياسي.
OTEL_TRACES_EXPORTER إذا تم تعيينه إلى None، يعطل جمع وتصدير بيانات تتبع الاستخدام الموزعة.
OTEL_BLRP_SCHEDULE_DELAY تحديد الفاصل الزمني لتصدير التسجيل بالمللي ثانية. الافتراضيات إلى 5000.
OTEL_BSP_SCHEDULE_DELAY تحديد الفاصل الزمني لتصدير التتبع الموزع بالمللي ثانية. الافتراضيات إلى 5000.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS تحديد الأجهزة OpenTelemetry التي يجب تعطيلها. عند التعطيل، لا يتم تنفيذ الأجهزة كجزء من البنية التلقائية. يقبل قائمة مفصولة بفواصل بأسماء المكتبات الصغيرة. على سبيل المثال، قم بتعيينه إلى "psycopg2,fastapi" لتعطيل أجهزة Psycopg2 وFastAPI. يتم تعيينه افتراضيا إلى قائمة فارغة، مما يتيح جميع الأجهزة المدعومة.

إضافة مكتبة أجهزة المجتمع

يمكنك جمع المزيد من البيانات تلقائيا عند تضمين مكتبات الأجهزة من مجتمع OpenTelemetry.

تنبيه

نحن لا ندعم أو نضمن جودة مكتبات الأجهزة المجتمعية. اقتراح واحد لنشرنا أو نشره أو التصويت عليه في مجتمع الملاحظات لدينا. كن على علم، يعتمد بعضها على مواصفات OpenTelemetry التجريبية وقد يقدم تغييرات كسرية مستقبلية.

لإضافة مجتمع OpenTelemetry Instrumentation Library، قم بتثبيته عبر ملف التطبيق requirements.txt الخاص بك. يلتقط التثبيت التلقائي ل OpenTelemetry تلقائيا ويجهز جميع المكتبات المثبتة. ابحث عن قائمة مكتبات المجتمع هنا.

أتمتة المراقبة

لتمكين جمع القياس عن بعد باستخدام Application Insights، تحتاج فقط تعيين إعدادات التطبيق التالية:

لقطة شاشة لإعدادات تطبيق خدمة التطبيق باستخدام إعدادات Application Insights المتوفرة.

تعريفات إعدادات التطبيق

اسم إعداد التطبيق التعريف القيمة‬
APPLICATIONINSIGHTS_CONNECTION_STRING سلسلة الاتصال لمورد Application Insights مثال: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION التمديد الرئيسي، الذي يتحكم في مراقبة وقت التشغيل. ~3

إشعار

محلل ملفات التعريف ومصحح اللقطات غير متوفر لتطبيقات Python

إعدادات تطبيق App Service باستخدام Azure Resource Manager

يمكن إدارة إعدادات التطبيق ل Azure App Service وتكوينها باستخدام قوالب Azure Resource Manager. يمكنك استخدام هذا الأسلوب عند نشر موارد App Service جديدة مع أتمتة Resource Manager أو تعديل إعدادات الموارد الموجودة.

البنية الأساسية لإعدادات التطبيق JSON لمورد App Service:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

للحصول على مثال لقالب Resource Manager مع إعدادات التطبيق المكونة ل Application Insights، يمكن أن يكون هذا القالب مفيدا. على وجه التحديد، راجع القسم الذي يبدأ في السطر 238.

لإنشاء قالب Resource Manager مع إعدادات Application Insights الافتراضية، ابدأ العملية كما لو كنت ستنشئ تطبيق ويب جديدا مع تمكين Application Insights.

  1. إنشاء مورد خدمات التطبيق الجديد بمعلومات تطبيق الويب المطلوبة. تمكين Application Insights في علامة التبويب Monitoring .

  2. حدد "Review + create". ثم حدد تنزيل قالب للأتمتة.

    لقطة شاشة تعرض قائمة إنشاء تطبيق ويب App Service.

    ينشئ هذا الخيار أحدث قالب Resource Manager مع تكوين جميع الإعدادات المطلوبة.

    لقطة شاشة تعرض قالب تطبيق ويب App Service.

في النموذج التالي، استبدل كافة مثيلات AppMonitoredSite باسم موقعك:

إشعار

إذا كنت تستخدم Windows، فقم بتعيين ApplicationInsightsAgent_EXTENSION_VERSION إلى ~2. إذا كنت تستخدم Linux، فقم بتعيين ApplicationInsightsAgent_EXTENSION_VERSION إلى ~3.

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

تمكين من خلال PowerShell

لتمكين مراقبة التطبيق من خلال PowerShell، يجب تغيير إعدادات التطبيق الأساسية فقط. تمكن العينة التالية مراقبة التطبيق لموقع ويب يسمى AppMonitoredSite في مجموعة AppMonitoredRGالموارد . يقوم بتكوين البيانات لإرسالها إلى 012345678-abcd-ef01-2345-6789abcd مفتاح تقرير عن حالة النظام.

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. راجع تثبيت Azure PowerShell للبدء. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

إشعار

إذا كنت تستخدم Windows، فقم بتعيين ApplicationInsightsAgent_EXTENSION_VERSION إلى ~2. إذا كنت تستخدم Linux، فقم بتعيين ApplicationInsightsAgent_EXTENSION_VERSION إلى ~3.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Django Instrumentation

لاستخدام OpenTelemetry Django Instrumentation، تحتاج إلى تعيين DJANGO_SETTINGS_MODULE متغير البيئة في إعدادات App Service للإشارة من مجلد التطبيق إلى وحدة الإعدادات. لمزيد من المعلومات، راجع وثائق Django.

الأسئلة الشائعة

ما الفرق بين المقاييس القياسية من Application Insights مقابل مقاييس Azure App Service؟

تجمع Application Insights بيانات تتبع الاستخدام للطلبات التي قدمتها إلى التطبيق. إذا حدث الفشل في WebApps/WebServer، ولم يصل الطلب إلى تطبيق المستخدم، فلن يكون لدى Application Insights أي بيانات تتبع الاستخدام عنه.

لا تتطابق مدة serverresponsetime الحساب بواسطة Application Insights بالضرورة مع وقت استجابة الخادم الذي لاحظته تطبيقات الويب. هذا السلوك لأن Application Insights تحسب المدة فقط عندما يصل الطلب فعليا إلى تطبيق المستخدم. إذا كان الطلب عالقا أو في قائمة الانتظار في WebServer، يتم تضمين وقت الانتظار في مقاييس Web Apps ولكن ليس في مقاييس Application Insights.

استكشاف الأخطاء وإصلاحها

نقدم هنا دليل استكشاف الأخطاء وإصلاحها لمراقبة تطبيقات Python على Azure App Services باستخدام الإتلاف التلقائي.

بيانات تتبع الاستخدام المكررة

يجب عليك استخدام البنية التلقائية على App Service فقط إذا كنت لا تستخدم الأجهزة اليدوية ل OpenTelemetry في التعليمات البرمجية الخاصة بك، مثل Azure Monitor OpenTelemetry Distro أو Azure Monitor OpenTelemetry Exporter. قد يؤدي استخدام البنى التلقائية أعلى الأجهزة اليدوية إلى تكرار القياس عن بعد وزيادة التكلفة. لاستخدام البنية التلقائية ل App Service OpenTelemetry، قم أولا بإزالة الأجهزة اليدوية ل OpenTelemetry من التعليمات البرمجية الخاصة بك.

بيانات تتبع الاستخدام المفقودة

إذا كنت تفتقد بيانات تتبع الاستخدام، فاتبع هذه الخطوات للتأكد من تمكين البنى التلقائية بشكل صحيح.

الخطوة 1: تحقق من شفرة Application Insights على مورد App Service

تأكد من تمكين التثبيت التلقائي في شفرة Application Insights على مورد App Service:

لقطة شاشة لعلامة التبويب Application Insights مع تحديد تمكين.

الخطوة 2: تأكد من صحة الإعدادات التطبيق

تأكد من ApplicationInsightsAgent_EXTENSION_VERSION تعيين إعداد التطبيق إلى قيمة ~3 وأن يشير APPLICATIONINSIGHTS_CONNECTION_STRING إلى مورد Application Insights المناسب.

لقطة شاشة لإعدادات تطبيق خدمة التطبيق باستخدام إعدادات Application Insights المتوفرة.

الخطوة 3: التحقق من تشخيصات البنية التلقائية وسجلات الحالة

انتقل إلى /var/log/applicationinsights/ وافتح status_*.json.

تأكد من AgentInitializedSuccessfully تعيين إلى true وأن IKey يكون لديك iKey صالح.

فيما يلي مثال لملف JSON:

    "AgentInitializedSuccessfully":true,
            
    "AppType":"python",
            
    "MachineName":"c89d3a6d0357",
            
    "PID":"47",
            
    "IKey":"00000000-0000-0000-0000-000000000000",
            
    "SdkVersion":"1.0.0"

applicationinsights-extension.log قد يعرض الملف الموجود في المجلد نفسه تشخيصات مفيدة أخرى.

تطبيقات Django

إذا كان تطبيقك يستخدم Django وكان إما يفشل في بدء تشغيل إعدادات غير صحيحة أو استخدامها، فتأكد من تعيين DJANGO_SETTINGS_MODULE متغير البيئة. راجع قسم Django Instrumentation للحصول على التفاصيل.


اختبار الاتصال بين مضيف التطبيق وخدمة الاستيعاب

ترسل Application Insights SDKs والوكلاء بيانات تتبع الاستخدام للحصول على استيعابها كمكالمات REST إلى نقاط نهاية الاستيعاب الخاصة بنا. يمكنك اختبار الاتصال من خادم الويب أو الجهاز المضيف للتطبيق إلى نقاط نهاية خدمة الاستيعاب باستخدام عملاء REST الخام من أوامر PowerShell أو curl. راجع استكشاف أخطاء بيانات تتبع استخدام التطبيق المفقودة وإصلاحها في Azure Monitor Application Insights.

للحصول على آخر التحديثات وإصلاحات الأخطاء، راجع ملاحظات الإصدار. -->

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