分享方式:


智慧型偵測 - 失敗異常

當 Web 應用程式的失敗要求比率異常增加時,Application Insights 會以幾乎即時的方式自動向您發出警示。 它偵測到回報為失敗的 HTTP 要求率異常提高或相依性呼叫。 對於要求,失敗的要求通常會有 400 或更高的回應碼。 為了協助您分級並診斷問題,警示詳細資料中會提供失敗的特性分析與相關應用程式資料。 其中也有 Application Insights 入口網站的連結,以供進一步診斷。 不需要設定該功能,因為它是使用機器學習演算法來預測一般失敗率。

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

設定專案的 Application Insights 之後,如果您的應用程式產生某些最少量的資料,「失敗異常的智慧偵測」會先花費 24 小時了解您應用程式的正常行為,然後才會啟動並傳送警示。

以下是警示範例:

樣本智慧偵測警示顯示失敗周圍的叢集分析。

注意

智慧偵測器失敗異常會針對每個 App Insights 中總要求的失敗率計算。 這些通知不會針對傳送這些要求的 API 或應用程式發出警示。 警示詳細資料會告訴您:

  • 相較於一般應用程式行為的失敗率。
  • 受影響的使用者人數 - 讓您知道應處理的數目。
  • 與失敗關聯的特性模式。 在此範例中,有特定的回應碼、要求名稱 (作業) 和應用程式版本。 可立即告訴您從何處開始了解程式碼。 其他可能性則可能是特定的瀏覽器或用戶端作業系統。
  • 看起來似乎與特色失敗相關聯的例外狀況、記錄追蹤和相依性失敗 (資料庫或其他外部元件)。
  • 直接連結到 Application Insights 的資料上相關搜尋。

智慧型偵測的優點

一般的 度量警示 會告訴您可能有問題。 但「智慧偵測」會為您啟動診斷工作,執行許多您原本必須自己執行的分析。 您達到幾近封裝完成的結果,幫助您快速取得問題的根源。

運作方式

「智慧偵測」會監視從應用程式收到的資料,特別是失敗率的資料。 此規則會計算 Successful request 屬性為 false 的要求數,以及 Successful call 屬性為 false 的相依性呼叫數。 若是要求,預設為 Successful request == (resultCode < 400) (除非您撰寫自訂程式碼進行篩選或產生您自己的 TrackRequest 呼叫)。

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

當資料從您的 Web 應用程式進入 Application Insights 時,「智慧偵測」會將目前的行為與過去幾天觀察到的模式做比較。 如果偵測程式發現與先前的效能相比,失敗率有異常提高的現象,偵測程式會觸發更深入的分析。

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

在前述範例中,分析已發現大部分的失敗是關於特定結果碼、要求名稱、伺服器 URL 主機和角色執行個體。

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

警示邏輯詳細資料

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

  • 分析要求/相依性在 20 分鐘累積時間範圍內的失敗百分比。
  • 過去 20 分鐘內失敗百分比與過去 40 分鐘和過去七天的比率比較。 演算法要尋找超過標準差 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-group/providers/microsoft.insights/components/test-rule",
            "targetResourceName": "test-rule",
            "targetResourceGroup": "test-group",
            "targetResourceType": "microsoft.insights/components",
            "sourceCreatedId": "1a0a5b6436a9b2a13377f5c89a3477855276f8208982e0f167697a2b45fcbb3e",
            "alertRule": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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\":\"aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e\",\"ResourceGroup\":\"test-group\",\"Name\":\"test-rule\"}/SelectedItemGroup/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-group/providers/microsoft.insights/components/test-rule/providers/Microsoft.AlertsManagement/alerts/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
    "type": "Microsoft.AlertsManagement/alerts",
    "name": "Failure Anomalies - test-rule"
}

針對警示進行分級和診斷

發出警示表示系統偵測到要求失敗率異常上升。 可能是您的應用程式或其環境有問題。

若要進一步調查,請按一下 [在 Application Insights 中檢視完整詳細資料]。 此頁面中的連結會直接將您帶至已篩選出相關要求、例外狀況、相依性或追蹤的搜尋頁面。 若要進一步調查,請按一下 [在 Application Insights 中檢視完整詳細資料]。此頁面中的連結會直接將您帶至已篩選出相關要求、例外狀況、相依性或追蹤的搜尋頁面

您也可以開啟 Azure 入口網站,瀏覽至應用程式的 Application Insights 資源,並開啟 [失敗] 頁面。

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

診斷搜尋。

您可以根據要求的百分比及受影響的使用者數目來決定此問題的緊急程度。 在前述範例中,78.5% 的失敗率與正常比率 2.2% 相比,表示有問題發生。 從另一方面來看,只有 46 位使用者受到影響。 此資訊可以協助您評估問題的嚴重性。

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

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

失敗的要求詳細資料。

檢閱最近的警示

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

警示摘要。

如果您收到「智慧型偵測」警示

為什麼會收到這個警示?

  • 我們偵測到要求失敗率相較於前一個期間正常基準異常上升。 在分析失敗及相關聯應用程式資料之後,我們認為有問題,您應該查看。

收到通知代表一定是有問題嗎?

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

所以,您要查看我的應用程式資料嗎?

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

我是否必須訂閱此警示?

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

我是否可以取消訂閱或改為傳送通知給我的同事?

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

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

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

部分警示與已知問題相關,我不想接收這些警示。

下一步

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

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