如果 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 分钟和过去 7 天的失败百分比进行比较。 该算法是为了寻找超过标准偏差 X 倍的重大偏差。
- 该算法对最小失败百分比使用自适应限制,该限制因应用的请求/依赖项量而异。
- 该算法包含一个逻辑,如果问题在 8-24 小时内不再被检测到,则可以自动解决已触发的警报。 注意:在当前设计中。 智能检测警报解决后,不会发送任何通知或采取任何行动。 可以在 Azure 门户中检查是否已解决智能检测警报。
管理失败异常警报规则
警报规则创建
创建 Application Insights 资源时,会自动创建失败异常警报规则。 该规则会自动配置为分析该资源上的遥测数据。 可以使用 Azure REST API 或使用 资源管理器模板再次创建规则。 如果出于某种原因自动创建规则失败,或者删除了规则,那么创建规则的功能就有用了。
警报规则配置
要在门户中配置失败异常警报规则,请打开“警报”页并选择“警报规则”。 失败异常警报规则包含在你手动设置的任何警报内。
单击警报规则以配置它。
可以从门户或使用 Azure 资源管理器模板禁用智能检测警报规则。
此警报规则是使用名为“Application Insights 智能检测”的关联动作组创建的。默认情况下,此动作组包含电子邮件 Azure 资源管理器角色操作,并向订阅中具有监视参与者或监视读取者 Azure 资源管理器角色的用户发送通知。 可以移除、更改或添加规则触发的操作组,就像对待任何其他 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 警报页中找到失败异常警报。
某些警报与已知问题有关,我不想收到它们。
- 可以使用警报操作规则抑制功能。
后续步骤
这些诊断工具可帮助检查应用中的数据:
智能检测是自动的。 但是或许你想要设置更多的警报?