تجميع الأحداث وجمعها باستخدام تشخيصات Windows Azure

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

تتمثل إحدى طرق تحميل السجلات وجمعها في استخدام ملحق Windows Azure Diagnostics (WAD)، الذي يقوم بتحميل السجلات إلى Azure Storage، ولديه أيضاً خيار إرسال السجلات إلى Azure Application Insights أو Event Hubs. يمكنك أيضاً استخدام عملية خارجية لقراءة الأحداث من التخزين ووضعها في أحد منتجات النظام الأساسي للتحليل، مثل سجلات المراقبة في Azure أو أي حل آخر لتحليل السجلات.

إشعار

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

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

يتم استخدام الأدوات التالية في هذه المقالة:

أحداث منصة Service Fabric

تقوم خدمة Service Fabric بإعداد عدد قليل من قنوات التسجيل out-of-the-box، والتي تم تكوين القنوات التالية منها مسبقاً مع الملحق لإرسال بيانات المراقبة والتشخيص إلى جدول تخزين أو في أي مكان آخر:

نشر ملحق التشخيص من خلال المدخل

تتمثل الخطوة الأولى في تجميع السجلات في نشر ملحق التشخيص على عقد مجموعة مقياس الجهاز الظاهري في نظام مجموعة Service Fabric. ملحق التشخيص بتجميع سجلات على كل VM وتحميلها إلى حساب التخزين الذي تحدده. توضح الخطوات التالية كيفية إنجاز ذلك لنظام المجموعة الجديدة والحالية من خلال مدخل Microsoft Azure وقوالب Azure Resource Manager.

نشر ملحق التشخيص كجزء من إنشاء نظام مجموعة من خلال مدخل Microsoft Azure

عند إنشاء المجموعة الخاصة بك، في خطوة تكوين نظام مجموعة، قم بتوسيع الإعدادات الاختيارية وتأكد من تعيين التشخيصات على On (الإعداد الافتراضي).

Azure Diagnostics settings in the portal for cluster creation

نوصي بشدة بتنزيل القالب قبل النقر فوق "Create" في الخطوة الأخيرة. للحصول على تفاصيل، راجع Set up a Service Fabric cluster by using an Azure Resource Manager template. أنت بحاجة إلى النموذج لإجراء تغييرات على القنوات (المدرجة أعلاه) لجمع البيانات منها.

Cluster Template

الآن بعد أن قمت بتجميع الأحداث في Azure Storage، يمكنك إعداد سجلات Azure Monitor لاكتساب نتيجة التحليلات والاستعلام عنها في مدخل سجلات Azure Monitor

إشعار

لا توجد حالياً طريقة لتصفية الأحداث التي يتم إرسالها إلى الجداول أو إعدادها. إذا لم تقم بتنفيذ عملية لإزالة الأحداث من الجدول، فسيستمر الجدول في التزايد (نقطة الارتكاز الافتراضية هي 50 غيغابايت). توجد إرشادات حول كيفية تغيير هذا أدناه في هذه المقالة. بالإضافة إلى ذلك، هناك مثال على خدمة تكوين البيانات التي يتم تشغيلها في نموذج مراقبة النظام، ويوصى بكتابة واحدة لنفسك أيضاً، ما لم يكن هناك سبب وجيه لتخزين السجلات التي تتجاوز 30 أو 90 يوماً في إطار زمني.

نشر ملحق التشخيص من خلال Azure Resource Manager

إنشاء نظام مجموعة بملحق التشخيص

لإنشاء نظام مجموعة باستخدام Resource Manager، تحتاج إلى إضافة تكوين التشخيص JSON إلى قالب Resource Manager الكامل. نحن نقدم نموذجاً من قالب Resource Manager لنظام المجموعة المكون من خمسة أجهزة ظاهرية مع تكوين تشخيص مضاف إليه كجزء من نماذج قالب Resource Manager الخاصة بنا. يمكنك رؤيته في هذا الموقع في معرض Azure Samples: نموذج نظام مجموعة مكونة من خمس عقد مع قالب Diagnostics Resource Manager.

لمشاهدة إعداد التشخيص في قالب Resource Manager، افتح ملف azuredeploy.json وابحث عن IaaSDiagnostics. لإنشاء نظام مجموعة باستخدام هذا القالب، حدد الزر Deploy to Azure المتاح على الارتباط السابق.

وبدلاً من ذلك، يمكنك تنزيل نموذج Resource Manager، وإجراء تغييرات عليه، وإنشاء نظام مجموعة بالقالب المعدل باستخدام الأمر New-AzResourceGroupDeployment في نافذة Azure PowerShell. راجع التعليمة البرمجية التالية للمعلمات التي تقوم بتمريرها إلى الأمر. للحصول على معلومات مفصلة حول كيفية نشر مجموعة موارد باستخدام PowerShell، راجع المقالة Deploy a resource group with the Azure Resource Manager template.

إضافة ملحق التشخيص إلى نظام مجموعة موجود

إذا كان لديك كتلة موجودة لا تحتوي على تشخيصات منشورة، يمكنك إضافتها أو تحديثها عبر قالب نظام المجموعة. قم بتعديل قالب Resource Manager المستخدم لإنشاء نظام المجموعة الموجود، أو قم بتنزيل القالب من المدخل كما هو موضح سابقاً. تعديل template.jsعلى الملف عن طريق تنفيذ المهام التالية:

قم بإضافة مورد تخزين جديد إلى القالب عن طريق الإضافة إلى قسم الموارد.

{
	"apiVersion": "2018-07-01",
	"type": "Microsoft.Storage/storageAccounts",
	"name": "[parameters('applicationDiagnosticsStorageAccountName')]",
	"location": "[parameters('computeLocation')]",
	"sku": {
	"name": "[parameters('applicationDiagnosticsStorageAccountType')]"
	"tier": "standard"
  },
	"tags": {
	"resourceType": "Service Fabric",
	"clusterName": "[parameters('clusterName')]"
  }
},

بعد ذلك، أضف إلى قسم المعلمات بعد تعريفات حساب التخزين مباشرة، بين supportLogStorageAccountName. استبدل نص العنصر النائب يظهر اسم حساب التخزين هنا باسم حساب التخزين الذي تريده.

    "applicationDiagnosticsStorageAccountType": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "Replication option for the application diagnostics storage account"
      }
    },
    "applicationDiagnosticsStorageAccountName": {
      "type": "string",
      "defaultValue": "**STORAGE ACCOUNT NAME GOES HERE**",
      "metadata": {
        "description": "Name for the storage account that contains application diagnostics data from the cluster"
      }
    },

بعد ذلك، قم بتحديث قسم VirtualMachineProfile من ملف template.json بإضافة التعليمة البرمجية التالية داخل صفيف الملحقات. تأكد من إضافة فاصلة في البداية أو النهاية، حسب مكان إدخالها.

{
    "name": "[concat(parameters('vmNodeType0Name'),'_Microsoft.Insights.VMDiagnosticsSettings')]",
    "properties": {
        "type": "IaaSDiagnostics",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
        "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
        "storageAccountEndPoint": "https://core.windows.net/"
        },
        "publisher": "Microsoft.Azure.Diagnostics",
        "settings": {
        "WadCfg": {
            "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": "50000",
            "EtwProviders": {
                "EtwEventSourceProviderConfiguration": [
                {
                    "provider": "Microsoft-ServiceFabric-Actors",
                    "scheduledTransferKeywordFilter": "1",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableActorEventTable"
                    }
                },
                {
                    "provider": "Microsoft-ServiceFabric-Services",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableServiceEventTable"
                    }
                }
                ],
                "EtwManifestProviderConfiguration": [
                {
                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                },
                {
                    "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                }
                ]
            }
            }
        },
        "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
        },
        "typeHandlerVersion": "1.5"
    }
}

بعد تعديل ملف template.json كما هو موضح، أعد نشر قالب Resource Manager. إذا تم تصدير القالب، فإن تشغيل ملف publish.ps1 يعيد نشر القالب. بعد النشر، تأكد من أن ProvisioningStateنجح.

تلميح

إذا كنت تنوي نشر الحاويات إلى نظام المجموعة الخاص بك، فقم بتمكين WAD لالتقاط إحصائيات عامل الإرساء عن طريق إضافتها إلى قسم WadCfg>DiagnosticMonitorConfiguration.

"DockerSources": {
    "Stats": {
        "enabled": true,
        "sampleRate": "PT1M"
    }
},

تحديث حصة التخزين النسبية

نظراً لأن الجداول التي يتم ملؤها بالملحق تنمو حتى الوصول إلى الحصة النسبية، فقد تحتاج إلى التفكير في تقليل حجم الحصة النسبية. القيمة الافتراضية هي 50 غيغابايت، ويمكن تكوينها في القالب ضمن الحقل overallQuotaInMBضمنDiagnosticMonitorConfiguration

"overallQuotaInMB": "50000",

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

تتوفر السجلات من القنوات الإضافية أيضاً للتجميع، وفيما يلي بعض التكوينات الأكثر شيوعاً التي يمكنك إجراؤها في القالب لنظام المجموعة التي تشغل في Azure.

  • قناة التشغيل - القاعدة: يتم تمكينها افتراضياً، العمليات عالية المستوى التي يتم إجراؤها بواسطة Service Fabric ونظام مجموعة، بما في ذلك الأحداث الخاصة بالعقدة القادمة، أو تطبيق جديد يتم نشره، أو عودة إلى الحالة السابقة للترقية، وما إلى ذلك. للحصول على قائمة بالأحداث، يُرجى الرجوع إلى Operational Channel Events.

      "scheduledTransferKeywordFilter": "4611686018427387904"
    
  • قناة التشغيل - مفصلة: يتضمن ذلك التقارير الصحية، وقرارات موازنة الحمل، بالإضافة إلى كل شيء في القناة التشغيلية الأساسية. يتم إنشاء هذه الأحداث إما عن طريق النظام أو التعليمة البرمجية الخاصة بك عن طريق استخدام واجهات برمجة تطبيقات تقارير الصحة أو التحميل مثل ReportPartitionHealth أو ReportLoad. لعرض هذه الأحداث في عارض الأحداث التشخيصي لـ Visual Studio، أضف "Microsoft-ServiceFabric: 4: 0x4000000000000008" إلى قائمة موفري ETW.

      "scheduledTransferKeywordFilter": "4611686018427387912"
    
  • قناة البيانات والرسائل - القاعدة: السجلات والأحداث الهامة التي تم إنشاؤها في المراسلة (حالياً فقط ReverseProxy) ومسار البيانات، بالإضافة إلى سجلات قناة التشغيل التفصيلية. هذه الأحداث هي طلبات فشل معالجة وغيرها من القضايا الهامة في ReverseProxy، فضلاً عن الطلبات التي تمت معالجتها. هذه توصيتنا للتسجيل الشامل. لعرض هذه الأحداث في عارض الأحداث التشخيصي لـ Visual Studio، أضف "Microsoft-ServiceFabric: 4: 0x4000000000000010" إلى قائمة موفري ETW.

      "scheduledTransferKeywordFilter": "4611686018427387928"
    
  • قناة البيانات والمراسلة - مفصلة: قناة مطولة تحتوي على جميع السجلات غير الهامة من البيانات والمراسلة في نظام المجموعة والقناة التشغيلية التفصيلية. للحصول على تفاصيل استكشاف الأخطاء وإصلاحها لجميع أحداث الوكيل العكسي، راجع reverse proxy diagnostics guide. لعرض هذه الأحداث في عارض الأحداث التشخيصية لـ Visual Studio، أضف "Microsoft-ServiceFabric: 4: 0x4000000000000020" إلى قائمة موفري ETW.

      "scheduledTransferKeywordFilter": "4611686018427387944"
    

إشعار

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

لتمكين Base Operational Channel، توصيتنا للتسجيل الشامل بأقل قدر من الضوضاء، سيبدو EtwManifestProviderConfiguration في WadCfg النموذج كما يلي:

  "WadCfg": {
        "DiagnosticMonitorConfiguration": {
          "overallQuotaInMB": "50000",
          "EtwProviders": {
            "EtwEventSourceProviderConfiguration": [
              {
                "provider": "Microsoft-ServiceFabric-Actors",
                "scheduledTransferKeywordFilter": "1",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableActorEventTable"
                }
              },
              {
                "provider": "Microsoft-ServiceFabric-Services",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableServiceEventTable"
                }
              }
            ],
            "EtwManifestProviderConfiguration": [
              {
                "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricSystemEventTable"
                }
              },
              {
                "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                "eventDestination": "ServiceFabricSystemEventTable"
                }
              }
            ]
          }
        }
      },

الجمع من قنوات EventSource الجديدة

لتحديث التشخيص لتجميع السجلات من قنوات EventSource جديدة تمثل تطبيقاً جديداً أنت على وشك نشره، نفِّذ نفس الخطوات الموضحة سابقاً لإعداد التشخيصات لنظام مجموعة موجود.

حدِّث قسم EtwEventSourceProviderConfigurationفي ملف template.json لإضافة إدخالات لقنوات EventSource الجديدة قبل تطبيق تحديث التكوين باستخدام الأمرNew-AzResourceGroupDeployment PowerShell. يتم تعريف اسم مصدر الحدث كجزء من التعليمة البرمجية الخاصة بك في ملف ServiceEventSource.cs الذي تم إنشاؤه بواسطة Visual Studio.

على سبيل المثال، إذا تمت تسمية مصدر الحدث الخاص بك My-Eventsource، فأضف التعليمة البرمجية التالية لوضع الأحداث من My-Eventsource في جدول يسمى MyDestinationTableName.

{
  "provider": "My-Eventsource",
  "scheduledTransferPeriod": "PT5M",
  "DefaultEvents": {
    "eventDestination": "MyDestinationTableName"
  }
}

لتجميع عدادات الأداء أو سجلات الأحداث، قم بتعديل قالب Resource Manager باستخدام الأمثلة المتوفرة في إنشاء جهاز ظاهري Windows مع المراقبة والتشخيصات باستخدام قالب Azure Resource Manager. بعد ذلك، أعد نشر قالب Resource Manager.

جمع عدادات الأداء

لتجميع مقاييس الأداء من نظام المجموعة، أضف عدادات الأداء إلى "WadCfg >DiagnosticMonitorConfiguration" في قالب Azure Resource Manager لنظام مجموعة الخاص بك. راجع Performance monitoring with WAD للتعرف على خطوات تعديل WadCfg لتجميع عدادات أداء محددة. راجع Service Fabric Performance Counters للحصول على قائمة عدادات الأداء التي نوصي بتجميعها.

إذا كنت تستخدم متلقي Application Insights، كما هو موضح في القسم أدناه، وكنت تريد أن تظهر هذه المقاييس في Application Insights، فتأكد من إضافة اسم المتلقي في قسم "sinks" كما هو موضح أعلاه. سيؤدي ذلك إلى إرسال عدادات الأداء التي تم تكوينها بشكل فردي لمورد Application Insights تلقائياً.

إرسال السجلات إلى Application Insights

تكوين Application Insights باستخدام WAD

إشعار

هذا ينطبق فقط على أنظمة مجموعات Windows في الوقت الحالي.

هناك طريقتان أساسيتان لإرسال البيانات من WAD إلى Azure Application Insights، واللتان يتم إنجازهما عن طريق إضافة مصدر Application Insights إلى تكوين WAD، من خلال مدخل Microsoft Azure أو من خلال قالب Azure Resource Manager.

أضف مفتاح Application Insights Instrumentation عند إنشاء نظام مجموعة في مدخل Microsoft Azure

Adding an AIKey

عند إنشاء نظام مجموعة، إذا تم تشغيل "التشخيصات"، فسيظهر حقل اختياري لإدخال مفتاح Application Insights Instrumentation. إذا قمت بلصق Application Insights Key الخاص بك هنا، فسيتم تكوين مصدر Application Insights تلقائياً لك في قالب Resource Manager الذي يتم استخدامه لنشر نظام المجموعة الخاص بك.

إضافة Application Insights Sink إلى قالب Resource Manager

في "WadCfg" لقالب Resource Manager، أضف "متلقٍّ" بتضمين التغييرين التاليين:

  1. أضف تكوين المتلقي مباشرة بعد اكتمال التصريح عن DiagnosticMonitorConfiguration:

    "SinksConfig": {
        "Sink": [
            {
                "name": "applicationInsights",
                "ApplicationInsights": "***ADD INSTRUMENTATION KEY HERE***"
            }
        ]
    }
    
    
  2. قم بتضمين المتلقي في DiagnosticMonitorConfigurationعن طريق إضافة السطر التالي فيDiagnosticMonitorConfiguration من WadCfg(قبل إعلان EtwProviders مباشرة):

    "sinks": "applicationInsights"
    

في كل من القصاصتين البرمجيتين السابقتين، تم استخدام الاسم "applicationInsights" لوصف المتلقي. هذا ليس مطلباً، وطالما أن اسم المتلقي مضمن في "sinks"، يمكنك تعيين الاسم على أي سلسلة.

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

إشعار

إذا كنت تستخدم مفتاح Application Insights غير الصحيح إما في المدخل أو في قالب Resource Manager الخاص بك، فسيتعين عليك تغيير المفتاح يدوياً وتحديث المجموعة/إعادة نشرها.

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

بمجرد تكوين تشخيصات Azure بشكل صحيح، سترى البيانات في جداول التخزين الخاصة بك من سجلات ETW وEventSource. إذا اخترت استخدام سجلات Azure Monitor أو Kibana أو أي نظام أساسي آخر لتحليلات البيانات والتصور الذي لم يتم تكوينه بشكل مباشر في قالب Resource Manager، فتأكد من إعداد النظام الأساسي الذي تختاره لقراءة البيانات من جداول التخزين هذه. يعد إجراء ذلك لسجلات Azure Monitor أمراً تافهاً نسبياً، ويتم شرحه في تحليل الأحداث والسجلات. تعتبر Application Insights حالة خاصة إلى حد ما بهذا المعنى، حيث يمكن تهيئتها كجزء من تكوين ملحق التشخيص؛ لذا راجع appropriate article إذا اخترت استخدام الذكاء الاصطناعي.

إشعار

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