智慧型偵測 - 失敗異常

如果您的 Web 應用程式遇到失敗要求率異常上升的情況,Application Insights 會自動以近乎即時的方式警示您。 它會偵測到 HTTP 要求或相依性呼叫的速率異常上升,這些要求或相依性呼叫回報為失敗。 對於要求,失敗的要求通常有 400 或更高的回應碼。 為了協助您分級和診斷問題,警示詳細數據中會提供失敗特性和相關應用程式數據的分析。 其中也有 Application Insights 入口網站的連結,以供進一步診斷。 此功能不需要設定或設定,因為它會使用機器學習演算法來預測一般失敗率。

這項功能適用於裝載於雲端或您自己的伺服器上,以產生應用程式要求或相依性數據的任何 Web 應用程式。 例如,如果您有呼叫 TrackRequest()TrackDependency() 的背景工作角色。

為項目設定 Application Insights 之後,如果應用程式產生特定最少的數據量,智慧偵測失敗異常需要 24 小時才能瞭解應用程式的正常行為,然後才開啟並傳送警示。

以下是範例警示:

顯示有關失敗的叢集分析的智慧偵測警示範例。

警示詳細資料會告訴您:

  • 與一般應用程序行為相比,失敗率。
  • 有多少使用者受到影響 - 因此您知道要擔心多少。
  • 與失敗相關聯的特性模式。 在此範例中,有特定的回應碼、要求名稱(作業)和應用程式版本。 這會立即告訴您開始在程式碼中尋找的位置。 其他可能性可能是特定的瀏覽器或用戶端操作系統。
  • 例外狀況、記錄追蹤和相依性失敗(資料庫或其他外部元件)似乎與特徵性失敗相關聯。
  • 直接連結到 Application Insights 中相關搜尋的數據。

智慧型手機偵測的優點

般計量警示 會告訴您可能有問題。 但智慧偵測會為您啟動診斷工作,執行您自己必須執行的大部分分析。 您可以整齊地封裝結果,協助您快速找出問題的根本。

運作方式

智慧偵測會監視從您的應用程式接收的數據,特別是失敗率。 此規則會計算屬性為 false 的要求 Successful request 數目,以及屬性為 false 的相依性呼叫 Successful call 數目。 針對要求, Successful request == (resultCode < 400) 預設為 (除非您撰寫自定義程式代碼來 篩選 或產生您自己的 TrackRequest 呼叫)。

您的應用程式效能具有一般的行為模式。 某些要求或相依性呼叫比其他要求更容易失敗;且當負載增加時,整體失敗率可能會上升。 智慧型手機偵測會使用機器學習來尋找這些異常狀況。

當來自 Web 應用程式的 Application Insights 數據時,智慧偵測會比較目前的行為與過去幾天所見的模式。 如果偵測器發現失敗率與先前效能的異常上升,偵測器就會觸發更深入的分析。

觸發分析時,服務會對失敗的要求執行叢集分析,以嘗試識別特徵失敗的值模式。

在先前顯示的範例中,分析發現大部分失敗都是關於特定結果碼、要求名稱、伺服器URL主機和角色實例。

當您使用這些呼叫檢測服務時,分析器會尋找與識別叢集中要求相關聯的例外狀況和相依性失敗。 它也會尋找與這些要求相關聯的任何追蹤記錄範例。 您收到的警示包含這項額外資訊,可提供偵測內容,以及偵測到問題的根本原因提示。

警示邏輯詳細數據

失敗異常偵測依賴專屬的機器學習演算法,因此警示引發或不引發的原因不一定是決定性的。 如此一來,演算法使用的主要因素如下:

  • 在20分鐘的滾動時間範圍中分析要求/相依性失敗百分比。
  • 過去 20 分鐘內失敗百分比與過去 40 分鐘和過去 7 天的速率比較。 演算法正在尋找超過標準偏差 X 倍的重大偏差。
  • 演算法會針對最小失敗百分比使用調適性限制,這會根據應用程式的要求/相依性量而有所不同。
  • 如果問題不再偵測到 8-24 小時,演算法包含可自動解決引發警示的邏輯。 注意:在目前的設計中。 當智慧偵測警示解決時,不會傳送通知或動作。 您可以檢查智慧偵測警示是否已在 Azure 入口網站 中解決。

管理失敗異常警示規則

警示規則建立

建立 Application Insights 資源時,會自動建立失敗異常警示規則。 此規則會自動設定為分析該資源上的遙測。 您可以使用 Azure REST API 或使用 Resource Manager 範本再次建立規則。 如果規則的自動建立因為某些原因而失敗,或如果您刪除規則,則建立規則可能會很有用。

警示規則設定

若要在入口網站中設定失敗異常警示規則,請開啟 [警示] 頁面,然後選取 [警示規則]。 失敗異常警示規則隨附於您手動設定的任何警示。

在 [Application Insights 資源] 頁面上,按兩下 [警示] 圖格,然後按兩下 [管理警示規則]。

按兩下警示規則進行設定。

規則設定畫面。

您可以從入口網站或使用 Azure Resource Manager 範本停用智慧偵測警示規則。

此警示規則是使用名為 「Application Insights 智慧偵測」 的相關聯 動作群組 所建立。根據預設,此動作群組包含電子郵件 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 入口網站,流覽至應用程式的 Application Insights 資源,然後開啟 [失敗] 頁面。

按兩下 [診斷失敗] 可協助您取得更多詳細數據並解決問題。

診斷搜尋。

從要求百分比和受影響的用戶數目,您可以決定問題有多緊急。 在先前顯示的範例中,失敗率 78.5% 與正常比率為 2.2%, 表示發生不良狀況。 另一方面,只有46位使用者受到影響。 此資訊可協助您評估問題有多嚴重。

在許多情況下,您可以從提供的要求名稱、例外狀況、相依性失敗和追蹤數據,快速診斷問題。

在此範例中,由於達到要求限制,SQL 資料庫 發生例外狀況。

失敗的要求詳細數據。

檢閱最近的警示

按兩下 Application Insights 資源頁面中的 [警示 ],以取得最近引發的警示:

警示摘要。

如果您收到智慧偵測警示

為什麼我收到此警示?

  • 我們偵測到與前一個期間一般基準相比,失敗的要求率異常上升。 分析失敗和相關聯的應用程式數據之後,我們認為您應該調查有問題。

通知是否表示我確實有問題?

  • 我們會嘗試對應用程式中斷或降低發出警示,但只有您可以完全瞭解語意和對應用程式或用戶的影響。

那麼,您正在查看我的應用程式數據?

  • 否。 服務完全是自動的。 只有您會收到通知。 您的資料是 不公開的

我是否必須訂閱此警示?

  • 否。 傳送要求數據的每個應用程式都有智慧偵測警示規則。

我可以取消訂閱或取得傳送給同事的通知嗎?

  • 是,在 [警示規則] 中,按兩下智慧偵測規則進行設定。 您可以停用警示,或變更警示的收件者。

我遺失了電子郵件。 在入口網站中哪裡可以找到通知?

  • 您可以在 Application Insights 警示頁面中的 Azure 入口網站 中找到失敗異常警示。

有些警示是關於已知問題,我不想收到這些警示。

下一步

這些診斷工具可協助您檢查來自應用程式的資料:

智慧偵測是自動的。 但是,或許您會想要再設定一些警示?