스마트 감지 - 실패

Application Insights는 웹앱에서 실패한 요청이 비정상적으로 증가하는 경우 거의 실시간으로 자동으로 경고합니다. 실패했다고 보고된 HTTP 요청 또는 종속성 호출의 비율이 비정상적으로 증가하는 것을 감지합니다. 요청의 경우 실패한 요청의 일반적인 응답 코드는 400 이상입니다. 문제를 심사하고 진단할 수 있도록 실패 및 관련된 애플리케이션 데이터의 특성에 대한 분석이 경고 정보에 제공됩니다. 또한 추가 진단을 위해 Application Insights 포털에 링크가 제공됩니다. 기능이 Machine Learning 알고리즘을 사용하여 일반 실패율을 예측하려면 설정 또는 구성이 필요하지 않습니다.

이 기능은 애플리케이션 요청이나 종속성 데이터를 생성하는 클라우드 또는 자체 서버에서 호스트되는 모든 웹앱에 대해 작동합니다. 예를 들어 TrackRequest() 또는 TrackDependency()를 호출하는 작업자 역할이 있다고 가정합니다.

프로젝트에 대한 Application Insights를 설정한 후에 앱이 일정량의 최소 데이터를 생성하면 실패에 대한 스마트 검색은 전환되고 경고를 보낼 수 있기 전에 앱의 일반적인 동작을 알아보는 데 24시간이 걸립니다.

샘플 경고는 다음과 같습니다.

실패에 대한 클러스터 분석을 보여 주는 샘플 스마트 검색 경고

경고 정보는 다음을 알려 줍니다.

  • 일반 앱 동작과 비교한 실패율
  • 영향을 받는 사용자 수 - 얼마나 고려해야 할지 알 수 있습니다.
  • 오류와 관련된 특성 패턴. 이 예제에는 특정 응답 코드, 요청 이름(작업) 및 애플리케이션 버전이 있습니다. 코드의 어디부터 살펴보아야 하는지 즉시 알려 줍니다. 다른 가능성으로 특정 브라우저 또는 클라이언트 운영 체제가 있을 수 있습니다.
  • 특징지어진 실패와 관련된 것으로 보이는 예외, 로그 추적 및 종속성 오류(데이터베이스 또는 다른 외부 구성 요소).
  • Application Insights에서 데이터에 대한 관련 검색 직접 링크

스마트 감지의 이점

일반 메트릭 경고 는 문제일 수 있음을 알려 줍니다. 하지만 스마트 감지는 진단 작업을 시작하여, 그렇지 않은 경우 사용자가 직접 수행해야 할 상당한 양의 분석을 수행합니다. 깔끔하게 정리된 결과를 얻고 문제의 원인을 신속하게 파악할 수 있습니다.

작동 방식

스마트 감지는 앱, 특히 실패 속도에서 받은 데이터를 모니터링합니다. 이 규칙은 Successful request 속성이 false인 요청 수와 Successful call 속이 false인 종속성 호출 수를 계산합니다. 요청의 경우 기본적으로 Successful request == (resultCode < 400)입니다(사용자 지정 코드를 필터에 작성하거나 사용자 고유 TrackRequest 호출을 생성하지 않는 한).

앱의 성능에는 일반적인 동작의 패턴이 있습니다. 일부 요청 또는 종속성 호출은 다른 요청보다 오류 발생 가능성이 높으며 로드가 증가함에 따라 전체 실패율이 상승할 수 있습니다. 스마트 감지는 이러한 이상을 발견하는 데 기계 학습을 사용합니다.

웹앱에서 Application Insights로 데이터를 가져오면 스마트 검색에서 현재 동작을 과거 며칠 동안 확인된 패턴과 비교합니다. 탐지기는 이전 성능과 비교하여 실패율에서 비정상적인 증가를 발견하면 보다 심층적인 분석을 트리거합니다.

분석이 트리거되는 경우 서비스는 실패의 특성을 만드는 값의 패턴을 확인하기 위해 실패한 요청에 대한 클러스터 분석을 수행합니다.

이전에 표시된 예에서 분석은 대부분의 오류가 특정 결과 코드, 요청 이름, 서버 URL 호스트 및 역할 인스턴스에 대한 것임을 발견했습니다.

이러한 호출로 서비스를 계측하는 경우 분석기는 확인된 클러스터의 요청과 관련된 예외 및 종속성 오류를 찾습니다. 또한 해당 요구와 연결된 추적 로그의 예를 찾습니다. 수신하는 경고에는 검색에 대한 컨텍스트를 제공하고 검색된 문제의 근본 원인에 대한 힌트를 제공할 수 있는 이러한 추가 정보가 포함됩니다.

경고 논리 세부 정보

오류 변칙 검색은 독점적인 기계 학습 알고리즘을 사용하므로 경고가 발생하거나 발생하지 않는 이유가 항상 결정적이지는 않습니다. 이 경우 알고리즘에서 사용하는 주요 요소는 다음과 같습니다.

  • 20분의 롤링 시간 범위에서 요청/종속성의 실패율을 분석합니다.
  • 최근 20분 동안 실패율을 최근 40분 및 최근 7일 동안과 비교합니다. 이 알고리즘은 표준 편차의 X배를 초과한 심각한 편차를 찾습니다.
  • 이 알고리즘은 최소 실패율에 대해 앱 요청/종속성의 볼륨에 따라 달라지는 적응형 제한을 사용합니다.
  • 이 알고리즘에는 8-24시간 동안 문제가 더 이상 감지되지 않는 경우 발생한 경고를 자동으로 해결할 수 있는 논리가 있습니다. 참고: 현재 디자인에서 스마트 검색 경고가 해결되면 알림 또는 작업이 전송되지 않습니다. Azure Portal에서 스마트 검색 경고가 해결되었는지 확인할 수 있습니다.

오류 이상 경고 규칙 관리

경고 규칙 만들기

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 Portal을 열고 앱에 대한 Application Insights 리소스로 이동한 후 오류 페이지를 열 수 있습니다.

'진단 오류'를 클릭하면 자세한 정보를 얻고 문제를 해결하는 데 도움을 얻을 수 있습니다.

진단 검색

영향을 받는 요청의 백분율 및 사용자 수에서 문제가 얼마나 긴급한지 결정할 수 있습니다. 앞서 표시된 예에서 78.5%의 실패율은 일반 비율 2.2%와 비교했을 때 무엇인가 잘못되었음을 나타냅니다. 반면에 46명의 사용자만 영향을 받았습니다. 이 정보는 문제가 얼마나 심각한지 평가하는 데 도움이 될 수 있습니다.

대부분의 경우 요청 이름, 예외, 종속성 오류 및 제공된 추적 데이터에서 신속하게 문제를 진단할 수 있습니다.

이 예제에서는 요청 제한에 도달하여 SQL Database에서 예외가 발생했습니다.

실패한 요청 세부 정보

최근 경고 검토

Application Insights 리소스 페이지에서 경고를 클릭하여 가장 최근에 발생한 경고를 가져옵니다.

경고 요약

스마트 감지 경고를 받은 경우

이 경고를 받은 이유는 무엇인가요?

  • 이전 기간의 일반적인 기준선에 비해 실패한 요청 속도가 비정상적으로 증가했음을 감지했습니다. 오류 및 관련 애플리케이션 데이터를 분석한 후 살펴보아야 하는 문제가 있다는 것을 알게 됩니다.

알림은 분명히 문제가 있음을 의미합니까?

  • 앱 또는 사용자에 대한 의미 체계와 영향을 완전히 이해할 수 있는데도 앱 중단 또는 성능 저하에 대한 경고를 시도합니다.

애플리케이션 데이터를 살펴보고 있나요?

  • 아니요. 서비스는 완전 자동입니다. 사용자는 알림만 받게 됩니다. 사용자의 데이터는 프라이빗입니다.

이 경고를 구독해야 하나요?

  • 아니요. 요청 데이터를 보내는 모든 애플리케이션에 스마트 검색 경고 규칙이 있습니다.

구독을 취소하거나 동료에게 대신 보낸 알림을 가져올 수 있습니까?

  • 예, 경고 규칙에서 이를 구성하려면 스마트 감지 규칙을 클릭합니다. 경고를 사용하지 않도록 설정하거나 경고에 대한 받는 사람을 변경할 수 있습니다.

메일이 삭제되었습니다. 포털의 어디에서 알림을 찾을 수 있나요?

  • Azure Portal의 Application Insights 경고 페이지에서 오류 이상 경고를 찾을 수 있습니다.

경고의 일부가 알려진 문제이고 수신하고 싶지 않습니다.

다음 단계

이러한 진단 도구를 사용하면 앱에서 데이터를 검사할 수 있습니다.

스마트 검색은 자동으로 수행됩니다. 하지만 보다 많은 경고를 설정하고 싶을 수 있습니다.