الكشف الذكي - شذوذ الفشل

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

تعمل هذه الميزة لأي تطبيق ويب، مستضاف في السحابة أو على الخوادم الخاصة بك التي تنشئ طلب التطبيق أو بيانات التبعية. على سبيل المثال، إذا كان لديك دور عامل يستدعي TrackRequest() أو TrackDependency().

بعد إعداد Application Insights لمشروعك، وإذا كان تطبيقك ينشئ حدا أدنى معينا من البيانات، فإن الكشف الذكي عن حالات الفشل الشاذة يستغرق 24 ساعة لمعرفة السلوك العادي لتطبيقك، قبل تشغيله ويمكنه إرسال التنبيهات.

إليك مثالاً على التنبيه:

عينة تنبيه الكشف الذكية التي تظهر تحليل الكتلة حول الفشل.

تخبرك تفاصيل التنبيه بما يلي:

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

فوائد الكشف الذكي

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

كيف تعمل هذه الميزة

يراقب Smart Detection البيانات المتلقاة من تطبيقك، ولا سيما معدلات الفشل. تحسب هذه القاعدة عدد الطلبات التي Successful requestتكون الخاصية غير صحيحة لها، وعدد استدعاءات التبعية التي تكون الخاصية غير صحيحة Successful callلها. للطلبات، بشكل افتراضي، Successful request == (resultCode < 400) (ما لم تكتب تعليمات برمجية مخصصة لتصفيةمكالمات TrackRequest الخاصة بك أو إنشاؤها).

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

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

عند تشغيل تحليل، تقوم الخدمة بإجراء تحليل نظام مجموعة على الطلب الفاشل، في محاولة لتحديد نمط القيم التي تميز الفشل.

في المثال الموضح سابقا، اكتشف التحليل أن معظم حالات الفشل تتعلق برمز نتيجة معين واسم الطلب ومضيف عنوان URL للخادم ومثيل الدور.

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

تفاصيل منطق التنبيه

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

  • تحليل نسبة فشل الطلبات/التبعيات في إطار زمني متجدد من 20 دقيقة.
  • مقارنة بين نسبة الفشل في آخر 20 دقيقة والمعدل في آخر 40 دقيقة والأيام السبعة الماضية. تبحث الخوارزمية عن انحرافات كبيرة تتجاوز أوقات X للانحراف المعياري.
  • تستخدم الخوارزمية حدا موائما للنسبة المئوية للفشل الأدنى، والذي يختلف بناء على حجم الطلبات/التبعيات للتطبيق.
  • تتضمن الخوارزمية منطقا يمكنه حل التنبيه الذي تم تشغيله تلقائيا، إذا لم يعد يتم الكشف عن المشكلة لمدة 8-24 ساعة. ملاحظة: في التصميم الحالي. لا يتم إرسال إعلام أو إجراء عند حل تنبيه الكشف الذكي. يمكنك التحقق مما إذا تم حل تنبيه الكشف الذكي في مدخل Azure.

إدارة قواعد تنبيه حالات الفشل الخارجة عن المألوف

إنشاء قاعدة التنبيه

يتم إنشاء قاعدة تنبيه حالات الفشل الخارجة عن المألوف تلقائيا عند إنشاء مورد Application Insights. يتم تكوين القاعدة تلقائيا لتحليل بيانات تتبع الاستخدام على هذا المورد. يمكنك إنشاء القاعدة مرة أخرى باستخدام Azure REST API أو باستخدام قالب Resource Manager. يمكن أن يكون إنشاء القاعدة مفيدا إذا فشل الإنشاء التلقائي للقاعدة لسبب ما، أو إذا قمت بحذف القاعدة.

تكوين قاعدة التنبيه

لتكوين قاعدة تنبيه حالات الفشل الخارجة عن المألوف في المدخل، افتح صفحة Alerts وحدد Alert Rules. يتم تضمين قواعد تنبيه حالات الفشل الشاذة مع أي تنبيهات قمت بتعيينها يدويا.

في صفحة مورد التطبيق Insights، انقر فوق لوحة التنبيهات، ثم إدارة قواعد التنبيه.

انقر فوق قاعدة التنبيه لتكوينها.

شاشة تكوين القاعدة.

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

يتم إنشاء قاعدة التنبيه هذه مع مجموعة إجراءات مقترنة تسمى "Application Insights Smart Detection". بشكل افتراضي، تحتوي مجموعة الإجراءات هذه على إجراءات دور Email Azure Resource Manager وترسل إشعارا إلى المستخدمين الذين لديهم أدوار مساهم المراقبة أو اشتراك قارئ المراقبة Azure Resource Manager في اشتراكك. يمكنك إزالة مجموعات الإجراءات التي تقوم القاعدة بتشغيلها أو تغييرها أو إضافتها، كما هو الحال مع أي قاعدة تنبيه Azure أخرى. تتبع الإشعارات المرسلة من قاعدة التنبيه هذه مخطط التنبيه الشائع.

حذف التنبيهات

يمكنك حذف قاعدة تنبيه حالات الفشل الخارجة عن المألوف.

يمكنك القيام بذلك يدويًا في صفحة قواعد التنبيه أو باستخدام أمر Azure CLI التالي:

az resource delete --ids <Resource ID of Failure Anomalies alert rule>

لاحظ أنه إذا حذفت مورد Application Insights، فلن يتم حذف قاعدة تنبيه حالات الفشل الخارجة عن المألوف المقترنة تلقائيًا.

مثال على فشل شذوذ تنبيه حمولة webhook

{
    "properties": {
        "essentials": {
            "severity": "Sev3",
            "signalType": "Log",
            "alertState": "New",
            "monitorCondition": "Resolved",
            "monitorService": "Smart Detector",
            "targetResource": "/subscriptions/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/resourcegroups/test-group/providers/microsoft.insights/components/test-rule",
            "targetResourceName": "test-rule",
            "targetResourceGroup": "test-group",
            "targetResourceType": "microsoft.insights/components",
            "sourceCreatedId": "1a0a5b6436a9b2a13377f5c89a3477855276f8208982e0f167697a2b45fcbb3e",
            "alertRule": "/subscriptions/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/resourcegroups/test-group/providers/microsoft.alertsmanagement/smartdetectoralertrules/failure anomalies - test-rule",
            "startDateTime": "2019-10-30T17:52:32.5802978Z",
            "lastModifiedDateTime": "2019-10-30T18:25:23.1072443Z",
            "monitorConditionResolvedDateTime": "2019-10-30T18:25:26.4440603Z",
            "lastModifiedUserName": "System",
            "actionStatus": {
                "isSuppressed": false
            },
            "description": "Failure Anomalies notifies you of an unusual rise in the rate of failed HTTP requests or dependency calls."
        },
        "context": {
            "DetectionSummary": "An abnormal rise in failed request rate",
            "FormattedOccurenceTime": "2019-10-30T17:50:00Z",
            "DetectedFailureRate": "50.0% (200/400 requests)",
            "NormalFailureRate": "0.0% (over the last 30 minutes)",
            "FailureRateChart": [
                [
                    "2019-10-30T05:20:00Z",
                    0
                ],
                [
                    "2019-10-30T05:40:00Z",
                    100
                ],
                [
                    "2019-10-30T06:00:00Z",
                    0
                ],
                [
                    "2019-10-30T06:20:00Z",
                    0
                ],
                [
                    "2019-10-30T06:40:00Z",
                    100
                ],
                [
                    "2019-10-30T07:00:00Z",
                    0
                ],
                [
                    "2019-10-30T07:20:00Z",
                    0
                ],
                [
                    "2019-10-30T07:40:00Z",
                    100
                ],
                [
                    "2019-10-30T08:00:00Z",
                    0
                ],
                [
                    "2019-10-30T08:20:00Z",
                    0
                ],
                [
                    "2019-10-30T08:40:00Z",
                    100
                ],
                [
                    "2019-10-30T17:00:00Z",
                    0
                ],
                [
                    "2019-10-30T17:20:00Z",
                    0
                ],
                [
                    "2019-10-30T09:00:00Z",
                    0
                ],
                [
                    "2019-10-30T09:20:00Z",
                    0
                ],
                [
                    "2019-10-30T09:40:00Z",
                    100
                ],
                [
                    "2019-10-30T10:00:00Z",
                    0
                ],
                [
                    "2019-10-30T10:20:00Z",
                    0
                ],
                [
                    "2019-10-30T10:40:00Z",
                    100
                ],
                [
                    "2019-10-30T11:00:00Z",
                    0
                ],
                [
                    "2019-10-30T11:20:00Z",
                    0
                ],
                [
                    "2019-10-30T11:40:00Z",
                    100
                ],
                [
                    "2019-10-30T12:00:00Z",
                    0
                ],
                [
                    "2019-10-30T12:20:00Z",
                    0
                ],
                [
                    "2019-10-30T12:40:00Z",
                    100
                ],
                [
                    "2019-10-30T13:00:00Z",
                    0
                ],
                [
                    "2019-10-30T13:20:00Z",
                    0
                ],
                [
                    "2019-10-30T13:40:00Z",
                    100
                ],
                [
                    "2019-10-30T14:00:00Z",
                    0
                ],
                [
                    "2019-10-30T14:20:00Z",
                    0
                ],
                [
                    "2019-10-30T14:40:00Z",
                    100
                ],
                [
                    "2019-10-30T15:00:00Z",
                    0
                ],
                [
                    "2019-10-30T15:20:00Z",
                    0
                ],
                [
                    "2019-10-30T15:40:00Z",
                    100
                ],
                [
                    "2019-10-30T16:00:00Z",
                    0
                ],
                [
                    "2019-10-30T16:20:00Z",
                    0
                ],
                [
                    "2019-10-30T16:40:00Z",
                    100
                ],
                [
                    "2019-10-30T17:30:00Z",
                    50
                ]
            ],
            "ArmSystemEventsRequest": "/subscriptions/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/resourceGroups/test-group/providers/microsoft.insights/components/test-rule/query?query=%0d%0a++++++++++++++++systemEvents%0d%0a++++++++++++++++%7c+where+timestamp+%3e%3d+datetime(%272019-10-30T17%3a20%3a00.0000000Z%27)+%0d%0a++++++++++++++++%7c+where+itemType+%3d%3d+%27systemEvent%27+and+name+%3d%3d+%27ProactiveDetectionInsight%27+%0d%0a++++++++++++++++%7c+where+dimensions.InsightType+in+(%275%27%2c+%277%27)+%0d%0a++++++++++++++++%7c+where+dimensions.InsightDocumentId+%3d%3d+%27718fb0c3-425b-4185-be33-4311dfb4deeb%27+%0d%0a++++++++++++++++%7c+project+dimensions.InsightOneClassTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightExceptionCorrelationTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightDependencyCorrelationTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightRequestCorrelationTable%2c+%0d%0a++++++++++++++++++++++++++dimensions.InsightTraceCorrelationTable%0d%0a++++++++++++&api-version=2018-04-20",
            "LinksTable": [
                {
                    "Link": "<a href=\"https://portal.azure.com/#blade/AppInsightsExtension/ProactiveDetectionFeedBlade/ComponentId/{\"SubscriptionId\":\"4f9b81be-fa32-4f96-aeb3-fc5c3f678df9\",\"ResourceGroup\":\"test-group\",\"Name\":\"test-rule\"}/SelectedItemGroup/718fb0c3-425b-4185-be33-4311dfb4deeb/SelectedItemTime/2019-10-30T17:50:00Z/InsightType/5\" target=\"_blank\">View full details in Application Insights</a>"
                }
            ],
            "SmartDetectorId": "FailureAnomaliesDetector",
            "SmartDetectorName": "Failure Anomalies",
            "AnalysisTimestamp": "2019-10-30T17:52:32.5802978Z"
        },
        "egressConfig": {
            "displayConfig": [
                {
                    "rootJsonNode": null,
                    "sectionName": null,
                    "displayControls": [
                        {
                            "property": "DetectionSummary",
                            "displayName": "What was detected?",
                            "type": "Text",
                            "isOptional": false,
                            "isPropertySerialized": false
                        },
                        {
                            "property": "FormattedOccurenceTime",
                            "displayName": "When did this occur?",
                            "type": "Text",
                            "isOptional": false,
                            "isPropertySerialized": false
                        },
                        {
                            "property": "DetectedFailureRate",
                            "displayName": "Detected failure rate",
                            "type": "Text",
                            "isOptional": false,
                            "isPropertySerialized": false
                        },
                        {
                            "property": "NormalFailureRate",
                            "displayName": "Normal failure rate",
                            "type": "Text",
                            "isOptional": false,
                            "isPropertySerialized": false
                        },
                        {
                            "chartType": "Line",
                            "xAxisType": "Date",
                            "yAxisType": "Percentage",
                            "xAxisName": "",
                            "yAxisName": "",
                            "property": "FailureRateChart",
                            "displayName": "Failure rate over last 12 hours",
                            "type": "Chart",
                            "isOptional": false,
                            "isPropertySerialized": false
                        },
                        {
                            "defaultLoad": true,
                            "displayConfig": [
                                {
                                    "rootJsonNode": null,
                                    "sectionName": null,
                                    "displayControls": [
                                        {
                                            "showHeader": false,
                                            "columns": [
                                                {
                                                    "property": "Name",
                                                    "displayName": "Name"
                                                },
                                                {
                                                    "property": "Value",
                                                    "displayName": "Value"
                                                }
                                            ],
                                            "property": "tables[0].rows[0][0]",
                                            "displayName": "All of the failed requests had these characteristics:",
                                            "type": "Table",
                                            "isOptional": false,
                                            "isPropertySerialized": true
                                        }
                                    ]
                                }
                            ],
                            "property": "ArmSystemEventsRequest",
                            "displayName": "",
                            "type": "ARMRequest",
                            "isOptional": false,
                            "isPropertySerialized": false
                        },
                        {
                            "showHeader": false,
                            "columns": [
                                {
                                    "property": "Link",
                                    "displayName": "Link"
                                }
                            ],
                            "property": "LinksTable",
                            "displayName": "Links",
                            "type": "Table",
                            "isOptional": false,
                            "isPropertySerialized": false
                        }
                    ]
                }
            ]
        }
    },
    "id": "/subscriptions/4f9b81be-fa32-4f96-aeb3-fc5c3f678df9/resourcegroups/test-group/providers/microsoft.insights/components/test-rule/providers/Microsoft.AlertsManagement/alerts/7daf8739-ca8a-4562-b69a-ff28db4ba0a5",
    "type": "Microsoft.AlertsManagement/alerts",
    "name": "Failure Anomalies - test-rule"
}

فرز وتشخيص تنبيه

يشير التنبيه إلى أنه تم الكشف عن ارتفاع غير طبيعي في معدل الطلب الفاشل. من المحتمل أن يكون هناك بعض المشاكل في تطبيقك أو بيئته.

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

يمكنك أيضًا فتح مدخل Azure، والانتقال إلى مورد تطبيق Insights للتطبيق الخاص بك، وفتح صفحة الفشل.

يمكن أن يساعدك النقر فوق "تشخيص حالات الفشل" في الحصول على مزيد من التفاصيل وحل المشكلة.

البحث التشخيصي.

من النسبة المئوية للطلبات وعدد المستخدمين المتأثرين، يمكنك تحديد مدى أهمية المشكلة. في المثال الموضح من قبل، يشير معدل الفشل بنسبة 78.5٪ مقارنة بمعدل عادي قدره 2.2٪، إلى أن شيئا سيئا يحدث. ومن ناحية أخرى، لم يتأثر سوى 46 مستخدمًا. يمكن أن تساعدك هذه المعلومات في تقييم مدى خطورة المشكلة.

في كثير من الحالات، يمكنك تشخيص المشكلة بسرعة من اسم الطلب والاستثناء وفشل التبعية وبيانات التتبع المتوفرة.

في هذا المثال، كان هناك استثناء من قاعدة بيانات SQL بسبب حد الطلب الذي يتم الوصول إليه.

تفاصيل الطلب الفاشلة.

مراجعة التنبيهات الأخيرة

انقر فوق التنبيهات في صفحة مورد التطبيق Insights للوصول إلى أحدث التنبيهات التي تم إطلاقها:

ملخص التنبيهات.

إذا تلقيت تنبيه الكشف الذكي

لماذا تلقيت هذا التنبيه؟

  • اكتشفنا ارتفاعًا غير طبيعي في معدل الطلبات الفاشلة مقارنة بخطوط الأساس العادية للفترة السابقة. بعد تحليل حالات الفشل وبيانات التطبيق المرتبطة بها، نعتقد أن هناك مشكلة يجب أن تنظر فيها.

هل يعني الإخطار أن لدي مشكلة بالتأكيد؟

  • نحن نحاول التنبيه بشأن تعطيل التطبيق أو تدهوره، ولكن فقط يمكنك فهم الدلالات والتأثير على التطبيق أو المستخدمين بشكل كامل.

إذا، أنت تنظر إلى بيانات تطبيقي؟

  • ‏‏لا. الخدمة تلقائية بالكامل. أنت فقط تحصل على الإخطارات. بياناتك خاصة.

هل يجب علي الاشتراك في هذا التنبيه؟

  • ‏‏لا. كل تطبيق يرسل بيانات الطلب لديه قاعدة تنبيه الكشف الذكي.

هل يمكنني إلغاء الاشتراك أو إرسال الإشعارات إلى زملائي بدلاً من ذلك؟

  • نعم، في قواعد التنبيه، انقر فوق قاعدة الكشف الذكي لتكوينه. يمكنك تعطيل التنبيه أو تغيير المستلمين للتنبيه.

لقـد فقدت البريد الإلكتروني. أين يمكنني العثور على الإخطارات فـي المدخل؟

  • يمكنك العثور على تنبيهات حالات الفشل الخارجة عن المألوف في مدخل Microsoft Azure، في صفحة تنبيهات Application Insights.

بعض التنبيهات تتعلق بالمشكلات المعروفة ولا أريد تلقيها.

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

تساعدك أدوات التشخيص هذه في فحص البيانات من التطبيق:

الكشف الذكي تلقائي. ولكن ربما ترغب في إعداد المزيد من التنبيهات؟