什么是 Application Insights?
Application Insights 可分析 Web 应用程序的性能,并在出现潜在问题时发出警告。
不需要对此功能进行任何特殊设置,只需在应用中配置 Application Insights 即可(在 ASP.NET、Java 或 Node.js 和网页代码中)。 一旦你的应用生成了足够的遥测数据,它便会激活。
我何时会收到智能检测通知?
Application Insights 在检测到应用程序的性能以下列方式之一下降时,将发送通知:
- 响应时间延长:应用响应请求的速度比平时要慢。 这种改变可能突然发生,例如,最新的部署中存在回归时,或者时间延长也可能是逐渐发生的,可能是因为存在内存泄漏。
- 依赖项持续时间延长 - 应用对 REST API、数据库或其他依赖项发出调用。 依赖项的响应速度比平时要慢。
- 性能模式缓慢:应用出现只会影响某些请求的性能问题。 例如,页面在某种浏览器中的加载速度比在其他浏览器中要慢,或者通过某个特定服务器处理请求的速度较慢。 Application Insights 算法会分析页面加载时间、请求响应时间,以及依赖项响应时间。
智能检测是一种 Application Insights 功能,可针对 Web 应用程序中潜在的性能问题和故障异常向你发出警告。 它需要至少 8 天的遥测数据以及足够的卷,以建立基线。 此时间段过后,任何重大问题都会发出通知。
警报是否始终表示存在问题?
警报并不一定意味着应用有问题。 它更像是关于你可能希望仔细研究的内容的建议。
我该如何解决问题?
每个警报通知都包含诊断信息。 下面是有关如何使用该信息的示例:
- 分类:通知会显示有多少用户或多少操作受到影响。 这可以帮助你对问题分配优先级。
- 确定范围:该问题是影响所有流量,还是只影响某些页面? 它是否只出现在特定的浏览器或位置中?
- 诊断:通常,通知中的诊断信息会提示问题的性质。 例如,如果在请求速率较高时响应时间变长,则表明服务器或依赖项过载。 如果需要详细信息,请在 Application Insights 中打开“性能”部分。 在其中可以找到探查器数据。 如果引发了异常,还可以尝试快照调试器。
配置电子邮件通知
默认情况下,智能检测通知处于启用状态,将发送到对 Application Insights 资源拥有所有者、参与者和读取者访问权限的用户。 若要更改此配置,请在电子邮件通知中选择“配置”,或者在 Application Insights 中打开“智能检测设置”。
可使用“智能检测”电子邮件中的“取消订阅”链接来停止接收电子邮件通知。
每天只会针对每个 Application Insights 资源发送一封有关智能检测性能异常的电子邮件。 仅当当天至少检测到一个新问题时,才会发送电子邮件。
如何提高性能?
慢速和失败的响应使网站用户感到沮丧。 快速解决此问题非常重要。 可用于提高性能的步骤包括:
- 会审
- 诊断
- 改进
让我们根据页面加载时间更仔细地查看这些步骤。
会审
查看问题时,首先要问的是:它重要吗? 如果页面的加载速度始终很慢,但是只有 1% 的网站用户曾经浏览过该页面,则该问题是低优先级问题。 另一方面,如果只有 1% 的用户打开过该页面,但每次都引发异常,则优先级较高。 可使用影响声明(受影响的用户或流量百分比)作为一般原则,但请注意,影响力并非全部。 应收集其他证据并考虑问题的参数。 如果问题取决于地理位置,请设置包括区域的可用性测试。
诊断缓慢页面加载
在诊断问题时,请问自己以下问题:
- 问题在哪儿?
- 服务器响应速度慢吗?
- 页面长吗?
- 浏览器是否需要做大量工作才能显示此页?
如果要调查浏览器响应时间,请打开“浏览器”指标。 浏览器页面加载时间的分段显示会显示时间的进展如何。
- 如果“发送请求时间”过高,则服务器响应速度缓慢,或者请求是包含大量数据的 POST 请求。 查看性能指标以调查响应时间。
- 设置依赖项跟踪以查看延迟是由于外部服务还是数据库引起的。
- 如果“接收响应”占主导地位,则页面及其依赖部分(JavaScript、CSS、图像等(但并非异步加载的数据))较长。 设置可用性测试,并确保设置用于加载依赖部分的选项。 当获得一些结果时,打开某一结果的详细信息,展开它以查看不同文件的加载时间。
- “高客户端处理”时间表明脚本运行缓慢。 如果原因不明显,请考虑添加一些计时代码,并在
trackMetric
调用中发送时间。
改进缓慢的页面
在考虑如何改善慢速页面时,可以从以下几点开始:
- 由于文件较大使得加载缓慢:以异步方式加载脚本和其他部分。 使用脚本捆绑。 将主页拆分为单独加载其数据的多个小组件。 对于长表格,不要发送普通旧 HTML;使用脚本以 JSON 或其他紧凑格式请求数据,并适当地填充表格。
- 缓慢的服务器依赖项:考虑组件的地理位置。 例如,如果使用的是 Azure,请确保 Web 服务器和数据库位于同一区域。 查询检索的信息是否超出自己所需的信息? 缓存或批处理是否有帮助?
- 容量问题:查看响应时间和请求计数的服务器指标。 如果响应时间的峰值与请求计数的峰值不成比例,则很有可能是服务器工作过度。 请考虑纵向扩展或横向扩展。
服务器响应时间延长
响应时间延长通知会通知你:
- 与此操作的正常响应时间相比的响应时间。
- 受影响的用户数量。
- 检测当天和 7 天前此操作的平均响应时间与第 90 百分位响应时间。
- 检测当天和 7 天前此操作的请求计数。
- 此操作的降级与相关依赖项的降级之间的关联。
- 有助于诊断问题的资源:
- Profiler 跟踪可帮助你查看在何处耗费了操作时间(如果在检测期间为此操作收集了 Profiler 跟踪示例,则该链接可用)。
- 指标资源管理器中的性能报告,可在其中检查此操作的时间范围和筛选器。
- 搜索以查找此调用,以查看特定调用属性。
- 失败报告。 如果计数大于 1,则表示此操作可能由于性能下降而发生失败。
依赖项持续时间延长
如果你的应用程序严重依赖于外部服务,则了解依赖项降级是个好主意。
下面是有关依赖项降级通知的示例:
这可告诉你:
- 与此操作的正常响应时间相比的持续时间。
- 受影响的用户数量。
- 检测当天和 7 天前此依赖项的平均持续时间与第 90 百分位持续时间。
- 检测当天和 7 天前的依赖项调用数。
- 有助于诊断问题的资源:
- 指标资源管理器中为此依赖项提供的性能报告。
- 搜索此依赖项调用以查看调用属性。
- 失败报告。 如果存在一个或多个失败,则表明在检测期间存在失败的依赖项调用,这可能导致持续时间延长。
- 打开 Analytics,其中包含用于计算此依赖项持续时间和计数的查询。
智能检测执行模式速度缓慢问题
Application Insights 可以找到只会影响一部分用户,或者只会在某些情况下影响用户的性能问题。 例如,你可能会发现,页面加载速度慢仅发生在一种浏览器或给定的地理区域。
仅通过检查数据很难检测到此类异常,但它们比你想象的要更为普遍。 通常,仅在收到客户投诉时,它们才会显现出来。
Application Insights 算法会分析页面加载时间、服务器上的请求响应时间,以及依赖项响应时间。 不必设置任何阈值或配置规则。 机器学习和数据挖掘算法用于检测异常模式。 以下是通知的示例:
“时间”字段显示检测到问题的时间。
“内容”字段描述:
- 检测到的问题。
- 导致问题行为的事件。
该表格会将性能较低的事件集与所有其他事件的平均行为进行比较。
选择链接以打开“指标资源管理器”和“搜索”,查找根据性能缓慢集的时间和属性筛选的相关报表,然后修改时间范围和筛选器以浏览遥测数据。