智能检测 - 性能异常

注意

你可以将 Application Insights 资源迁移到基于警报的智能检测(预览版)。 迁移时会为各种智能检测模块创建警报规则。 创建后就可以管理和配置这些规则,就像任何其他 Azure Monitor 警报规则一样。 你还可以为这些规则配置操作组,从而启用多种方法来针对新的检测执行操作或触发通知。

有关迁移过程的详细信息,请参阅智能检测警报迁移

Application Insights 可自动分析 Web 应用程序的性能,并在出现潜在问题时发出警告。

不需要对此功能进行任何特殊设置,只需在应用中为支持的语言配置 Application Insights 即可。 在应用生成足够多的遥测后,此功能会激活。

我何时会收到智能检测通知?

Application Insights 已根据以下依据之一检测到应用程序出现性能下降:

  • 响应时间延长 - 应用响应请求的速度比平时要慢。 这种变化可能是在瞬间发生的,例如,最新的部署中出现回归。 也有可能是逐渐发生的,原因可能是内存泄漏。
  • 依赖项持续时间延长 - 应用对 REST API、数据库或其他依赖项发出调用。 依赖项的响应速度比平时要慢。
  • 性能模式变慢 - 应用似乎出现了只会影响某些请求的性能问题。 例如,页面在某种浏览器中的加载速度比在其他浏览器中要慢,或者通过某个特定服务器处理请求的速度较慢。 目前,我们的算法会分析页面加载时间、请求响应时间和依赖项响应时间。

若要建立正常性能的基线,智能检测需要至少 8 天的充足遥测量。 在运行应用程序这么长时间后,严重的异常都会导致发出通知。

收到通知是否意味着我的应用肯定有问题?

不是,通知并不意味着应用肯定有问题。 这只是关于可能需要密切关注的某些内容的建议。

如何解决问题?

通知包含诊断信息。 下面是一个示例:

Here is an example of Server Response Time Degradation detection

  1. 会审。 通知会显示有多少用户或多少操作受到影响。 此信息可以帮助你对问题分配优先级。

  2. 范围。 该问题是影响所有流量,还是只影响某些页面? 它是否只出现在特定的浏览器或位置中? 可以从通知中获取此信息。

  3. 诊断。 通常,通知的诊断信息会提示问题的性质。 例如,如果请求率较高时响应时间会变慢,则可能表示服务器或依赖项超出其容量。

    否则,在 Application Insights 中打开“性能”窗格。 你会在其中找到探查器数据。 如果引发了异常,还可以尝试快照调试器

配置电子邮件通知

默认情况下启用智能检测通知。 它们将发送给对 Application Insights 资源所在的订阅具有监视读取者监视参与者访问权限的用户。 若要更改默认通知,请在电子邮件通知中单击“配置”,或者在 Application Insights 中打开“智能检测”设置 。

Smart Detection Settings

  • 可以禁用默认通知,并将其替换为指定的电子邮件列表。

每天只会针对每个 Application Insights 资源发送一封有关智能检测性能异常的电子邮件。 只有当天至少检测到一个新问题时,才会发送电子邮件。 将不会收到任何重复的消息。

常见问题

  • 那么,Microsoft 员工会查看我的数据?

    • 不是。 该服务完全是自动的。 只有你会收到通知。 数据是私有数据。
  • 是否分析由 Application Insights 收集的所有数据?

    • 目前,我们分析请求响应时间、依赖项响应时间和页面加载时间。 其他指标的分析功能正在规划中,今后有望推出。
  • 此检测适用于哪些类型的应用程序?

    • 在生成相应遥测数据的任何应用程序中都可以检测到这些降级。 如果已在 Web 应用中安装 Application Insights,则可以自动跟踪请求和依赖项。 但在后端服务或其他应用中,如果插入 TrackRequest()TrackDependency 调用,智能检测以相同的方式工作。
  • 是否可以创建自己的异常检测规则或自定义现有的规则?

  • 执行分析的频率是多少?

    • 我们每天针对前一天(UTC 时区整天)的遥测数据运行分析。
  • 这是否会替换指标警报

    • 否。 我们不确定检测用户视为异常的每个行为。
  • 如果不执行任何操作来响应通知,是否会收到提醒?

    • 否,仅会收到关于每个问题的消息一次。 如果问题仍然存在,它会在“智能检测源”窗格中进行更新。
  • 我丢失了电子邮件。 在哪里可以找到门户中的通知?

    • 在应用的 Application Insights 概述中,单击“智能检测”磁贴。 在该磁贴中可以找到过去最长 90 天的所有通知。

如何提高性能?

正如你从自己的经验所知,缓慢和失败的响应对于网站用户而言是最大的困扰之一。 因此,必须解决问题。

会审

首先,这是否很重要? 如果某个页面的加载速度总是很慢,但仅 1% 的站点用户曾需要查看它,或许可以考虑更重要的事情。 但是,如果只有 1% 的用户打开该页面,但它每次都引发异常,这可能值得调查。

使用影响声明(例如受影响的用户或流量百分比)作为一般原则。 请注意,这可能不是事情的全貌。 收集其他证据以确认。

考虑问题的参数。 如果它是地理位置相关的,请设置包括该区域在内的可用性测试:该区域可能存在网络问题。

诊断缓慢页面加载

问题在哪儿? 是服务器响应缓慢、页面过长,还是浏览器需要执行大量工作才能显示它?

打开“浏览器指标”窗格。 浏览器页面加载时间的分段显示会显示时间的进展如何。

  • 如果“发送请求时间”过高,则服务器响应速度缓慢,或者请求是包含大量数据的报文。 查看性能指标以调查响应时间。
  • 设置依赖项跟踪以查看缓慢是否由于外部服务或数据库引起的。
  • 如果“接收响应”占主导地位,则页面及其依赖部分(JavaScript、CSS、图像等(但并非异步加载的数据))较长。 设置可用性测试,并确保设置用于加载依赖部分的选项。 当获得一些结果时,打开某一结果的详细信息,展开它以查看不同文件的加载时间。
  • 客户端处理时间表明脚本运行缓慢。 如果原因并不明显,请考虑添加一些计时代码并发送 trackMetric 调用中的时间。

改进缓慢的页面

存在其上充满关于改进服务器响应和页面加载时间的建议的 Web,因此我们不尝试在此处全都重复一遍。 以下是一些你可能已经知道的提示,仅供考虑:

  • 由于文件较大使得加载缓慢:以异步方式加载脚本和其他部分。 使用脚本捆绑。 将主页拆分为单独加载其数据的多个小组件。 对于长表格,不要发送普通旧 HTML:使用脚本以 JSON 或其他紧凑格式请求数据,并适当地填充表格。 有很好的框架,可以帮助实现这些任务。 (当然,它们还包括大型脚本。)
  • 缓慢的服务器依赖项:考虑组件的地理位置。 例如,如果使用的是 Azure,请确保 Web 服务器和数据库位于同一区域。 查询检索的信息是否超出自己所需的信息? 缓存或批处理是否有帮助?
  • 容量问题:查看响应时间和请求计数的服务器指标。 如果响应时间的峰值与请求计数的峰值不成比例,则服务器很有可能是外延式。

服务器响应时间延长

响应时间延长通知提供以下信息:

  • 与此操作的正常响应时间相比的响应时间。
  • 受影响的用户数量。
  • 检测当天和 7 天前此操作的平均响应时间与第 90 百分位响应时间。
  • 检测当天和 7 天前此操作的请求计数。
  • 此操作的降级与相关依赖项的降级之间的关联。
  • 帮助你诊断问题的链接。
    • 探查器跟踪可以帮助你查看哪些地方需要花费操作时间。 如果此操作存在探查器跟踪示例,则会提供链接。
    • 指标资源管理器中的性能报告,可在其中分解此操作的时间范围/筛选器。
    • 搜索此调用以查看特定调用属性。
    • 故障报告 - 如果计数大于 1,则表示此操作中出现故障,并可能已导致性能降低。

依赖项持续时间延长

新型应用程序通常采用微服务设计方案,这在许多情况下严重依赖于外部服务。 例如,如果应用程序依赖于某个数据平台,或者依赖于关键服务提供程序(例如 Azure AI 服务)。

依赖项降级通知的示例:

Here is an example of Dependency Duration Degradation detection

请注意,它会指示:

  • 与此操作的正常响应时间相比的持续时间
  • 受影响的用户数量
  • 检测当天和 7 天前此依赖项的平均持续时间与第 90 百分位持续时间
  • 检测当天和 7 天前的依赖项调用数
  • 帮助你诊断问题的链接
    • 指标资源管理器中为此依赖项提供的性能报告
    • 搜索此依赖项调用以查看调用属性
    • 失败报告 - 如果计数大于 1,则表示在检测期间可能由于持续时间延长而导致依赖项调用失败。
    • 打开 Analytics,其中包含用于计算此依赖项持续时间和计数的查询

智能检测执行模式速度缓慢问题

Application Insights 可以找到只会影响一部分用户,或者只会在某些情况下影响用户的性能问题。 例如,与其他浏览器类型相比,特定浏览器类型上某页的加载速度较慢,或者特定服务器处理请求的速度比其他服务器慢。 它还可以发现与属性组合关联的问题,例如在某个地理区域中使用特定操作系统的客户端上加载页面的速度缓慢。

类似于这样的异常现象,仅通过检查数据难以检测,但它们比你想象的更为普遍。 通常仅在收到客户投诉时,它们才会显现出来。 到那时就为时已晚:受影响用户已转用竞争对手的产品!

目前,我们的算法关注页面加载时间、服务器上的请求响应时间和依赖项响应时间。

不必设置任何阈值或配置规则。 机器学习和数据挖掘算法用于检测异常模式。

From the email alert, click the link to open the diagnostic report in Azure

  • When 显示检测到问题的时间。
  • What 描述检测到的问题,以及我们发现的事件集的特征,这些特征显示了问题行为。
  • 该表格会将性能较低的事件集与所有其他事件的平均行为进行比较。

单击这些链接,打开指标资源管理器以查看报告,按缓慢执行集的时间和属性进行筛选。

修改时间范围和筛选器以浏览遥测。

后续步骤

这些诊断工具可帮助检查应用中的遥测数据:

智能检测是自动进行的。 但是或许你想要设置更多的警报?