实时指标:以 1 秒的延迟进行监视和诊断

使用 Application Insights 中的实时指标(也称为 QuickPulse)来监视生产环境中的实时 Web 应用程序。 可以选择和筛选指标和性能计数器,以实时监视,而不会对服务造成任何干扰。 还可以检查来自示例失败请求和异常的堆栈跟踪。 实时指标与 ProfilerSnapshot Debugger 一同为实时网站提供功能强大的非入侵式诊断工具。

注意

实时指标仅支持 TLS 1.2。 有关详细信息,请参阅疑难解答

使用实时指标可执行以下操作:

  • 通过监视性能和故障计数,在修补程序发布时对其进行验证。
  • 监视测试负载的效果,并实时诊断问题。
  • 通过选择和筛选想要监视的指标,重点处理特定的测试会话或筛选出已知问题。
  • 发生异常时获取异常跟踪。
  • 试用筛选器,查找最相关的 KPI。
  • 实时监视任何 Windows 性能计数器。
  • 轻松识别有问题的服务器,并筛选出只与该服务器相关的所有 KPI/实时源。

Screenshot that shows the Live Metrics tab.

目前,ASP.NET、ASP.NET Core、Azure Functions、Java 和 Node.js 应用支持实时指标。

注意

实时指标显示的受监视服务器实例数可能低于为应用程序分配的实际实例数。 这种不匹配是因为许多新式 Web 服务器会卸载在一段时间内未收到请求的应用程序,从而节省资源。 由于实时指标仅对当前运行应用程序的服务器进行计数,因此已卸载进程的服务器不会包含在该总数中。

入门

重要

要启用 Application Insights,请确保它已在 Azure 门户中激活,并且应用使用的是最新版本的 Application Insights NuGet 包。 如果没有 NuGet 包,一些遥测数据将发送到 Application Insights,但该遥测数据不会显示在实时指标中。

  1. 遵循特定于语言的准则来启用实时指标:

  2. Azure 门户中,打开应用的 Application Insights 资源。 再打开实时流。

  3. 如果可能在筛选器中使用客户名称等敏感数据,请确保控制通道的安全

注意

对检测密钥引入的支持将于 2025 年 3 月 31 日结束。 检测密钥引入功能将会继续工作,但我们将不再为该功能提供更新或支持。 转换为连接字符串,以利用新功能

使用适用于任何 .NET 应用程序的代码启用实时指标

注意

按照 .NET 应用程序的推荐说明加入实时指标时,它是默认启用的。

若要手动配置实时指标,请执行以下操作:

  1. 安装 NuGet 包 Microsoft.ApplicationInsights.PerfCounterCollector
  2. 以下示例控制台应用代码显示了如何设置实时指标:
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;

// Create a TelemetryConfiguration instance.
TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
config.InstrumentationKey = "INSTRUMENTATION-KEY-HERE";
QuickPulseTelemetryProcessor quickPulseProcessor = null;
config.DefaultTelemetrySink.TelemetryProcessorChainBuilder
    .Use((next) =>
    {
        quickPulseProcessor = new QuickPulseTelemetryProcessor(next);
        return quickPulseProcessor;
    })
    .Build();

var quickPulseModule = new QuickPulseTelemetryModule();

// Secure the control channel.
// This is optional, but recommended.
quickPulseModule.AuthenticationApiKey = "YOUR-API-KEY-HERE";
quickPulseModule.Initialize(config);
quickPulseModule.RegisterTelemetryProcessor(quickPulseProcessor);

// Create a TelemetryClient instance. It is important
// to use the same TelemetryConfiguration here as the one
// used to set up Live Metrics.
TelemetryClient client = new TelemetryClient(config);

// This sample runs indefinitely. Replace with actual application logic.
while (true)
{
    // Send dependency and request telemetry.
    // These will be shown in Live Metrics.
    // CPU/Memory Performance counter is also shown
    // automatically without any additional steps.
    client.TrackDependency("My dependency", "target", "http://sample",
        DateTimeOffset.Now, TimeSpan.FromMilliseconds(300), true);
    client.TrackRequest("My Request", DateTimeOffset.Now,
        TimeSpan.FromMilliseconds(230), "200", true);
    Task.Delay(1000).Wait();
}

上述示例适用于控制台应用,但在所有 .NET 应用程序中都可以使用相同的代码。 如果启用了自动收集遥测数据的任何其他遥测模块,请务必确保用于初始化这些模块的相同配置也用于实时指标模块。

实时指标与指标资源管理器和 Log Analytics 有何差异?

功能 实时流 指标资源管理器和 Log Analytics
延迟 在一秒内显示数据。 在几分钟聚合。
无保留期 当数据在图表上显示时会得到保留,然后将被丢弃。 数据会保留 90 天。
按需 仅“实时指标”窗格处于打开状态时才会对数据进行流式处理。 每当安装并启用 SDK 时,都会发送数据。
免费 实时流数据不会产生费用。 遵从定价
采样 传输所有选择的指标和计数器。 对失败和堆栈跟踪进行采样。 可以对事件进行采样
控制通道 筛选器的控制信号会发送到 SDK。 建议确保此通道的安全。 通信为通向门户的单向通信。

选择和筛选指标

ASP.NET、ASP.NET Core 和 Azure Functions (v2) 可提供这些功能。

可以通过在门户中针对任何 Application Insights 遥测数据应用任意筛选器来实时监视自定义 KPI。 选择筛选器控件(将鼠标悬停在任何图表上时会显示)。 下图绘制了一个自定义请求计数 KPI,其中的数据已按“URL”和“持续时间”属性进行筛选。 借助“流预览”部分(显示与在任意时间点指定的条件匹配的实时遥测源)验证筛选器。

Screenshot that shows the Filter request rate.

可以监视与“计数”不同的值。 选项取决于流的类型,这可能是任何 Application Insights 遥测数据,如请求、依赖项、异常、跟踪、事件或指标。 也可能是自己的自定义度量

Screenshot that shows the Query Builder on Request Rate with a custom metric.

除了 Application Insights 遥测外,还可以监视任何 Windows 性能计数器。 从流选项中选择它,并提供性能计数器的名称。

实时指标在以下两个位置聚合:在每个服务器本地聚合,然后在所有服务器上聚合。 通过在相应的下拉列表中选择其他选项,可以在任一位置更改默认选项。

采样遥测数据:自定义实时诊断事件

默认情况下,事件实时源显示已失败的请求和依赖项调用、异常、事件与跟踪的样本。 选择筛选器图标可以查看在任意时间点应用的条件。

Screenshot that shows the Filter button.

与使用指标时一样,可以将任意条件指定为任何 Application Insights 遥测类型。 在本示例中,我们将选择特定的请求失败和事件。

Screenshot that shows the Query Builder.

注意

目前,对于基于异常消息的条件,请使用外部异常消息。 在上述示例中,若要筛选出具有内部异常消息(追随“<--”分隔符)“客户端已断开连接”的良性异常,请使用不包含“读取请求内容时出错”条件的消息。

若要查看实时源中某个项的详细信息,请选择它。 可以通过选择“暂停”或通过向下滚动并选择某个项来暂停源。 在实时源处于暂停状态时,滚回到顶部后,或者选择收集的项的计数器后,该实时源会恢复。

Screenshot that shows the Sample telemetry window with an exception selected and the exception details displayed at the bottom of the window.

按服务器实例筛选

如果要监视特定服务器角色实例,则可以按服务器进行筛选。 若要进行筛选,请在“服务器”下选择服务器名称。

Screenshot that shows the Sampled live failures.

确保控制通道的安全

借助实时指标自定义筛选器,你可以控制将应用程序的哪个遥测流式传输到 Azure 门户中的“实时指标”视图。 筛选器条件将被发送到使用 Application Insights SDK 进行检测的应用。 筛选器值可能包含客户 ID 之类的敏感信息。 若要保护此值,防止其泄露给未经授权的应用程序,可以使用两个选项:

  • 旧版(不再建议):通过配置机密 API 密钥来设置经身份验证的通道,如“旧版选项”中所述。

可以尝试自定义筛选器,无需设置经身份验证的通道。 选择任何筛选器图标,对连接的服务器进行授权。 如果你选择此选项,每当进行新会话时或有新服务器联机时,都必须对连接的服务器进行一次授权。

警告

但我们强烈反对使用不安全的通道,在你使用此选项 6 个月后,我们将禁用此选项。 “对连接的服务器进行授权”对话框将会显示一个日期,指明此选项将在此日期之后被禁用。

Screenshot that shows the Authorize connected servers dialog.

旧选项:创建 API 密钥

  1. 选择“API 访问”选项卡,然后选择“创建 API 密钥”。

    Screenshot that shows selecting the API Access tab and the Create API key button.

  2. 选择“对 SDK 控制通道进行身份验证”复选框,然后选择“生成密钥”。

    Screenshot that shows the Create API key pane. Select Authenticate SDK control channel checkbox and then select Generate key.

将 API 密钥添加到配置

可以向 ASP.NET、ASP.NET Core、WorkerService 和 Azure Functions 应用的配置添加 API 密钥。

Program.cs 文件中,添加以下命名空间:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;

然后添加以下服务注册:

// Existing code which includes services.AddApplicationInsightsTelemetry() to enable Application Insights.
builder.Services.ConfigureTelemetryModule<QuickPulseTelemetryModule> ((module, o) => module.AuthenticationApiKey = "YOUR-API-KEY-HERE");

有关如何配置 ASP.NET Core 应用程序的详细信息,请参阅在 ASP.NET Core 中配置遥测模块

WorkerService

对于 WorkerService 应用程序,请按照下面的说明进行操作。

添加以下命名空间:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;

接下来,在 services.AddApplicationInsightsTelemetryWorkerService 调用前添加以下行:

    services.ConfigureTelemetryModule<QuickPulseTelemetryModule> ((module, o) => module.AuthenticationApiKey = "YOUR-API-KEY-HERE");

有关如何配置 WorkerService 应用程序的详细信息,请参阅在 WorkerService 中配置遥测模块

Azure Functions 应用程序

对于 Azure Functions 应用 (v2),可以使用环境变量通过 API 密钥来保护通道。

从 Application Insights 资源中创建一个 API 密钥,并转到 Azure Functions 应用的“设置”>“配置”。 选择“新建应用程序设置”,输入名称 APPINSIGHTS_QUICKPULSEAUTHAPIKEY,并输入与你的 API 密钥对应的值。

支持的功能表

语言 基本指标 性能指标 自定义筛选 样本遥测数据 CPU 按进程划分
.NET Framework 支持 (LTS) 支持 (LTS) 支持 (LTS) 支持 (LTS) 支持 (LTS)
.NET Core(目标=.NET Framework) 支持 (LTS) 支持 (LTS) 支持 (LTS) 支持 (LTS) 支持 (LTS)
.NET Core(目标=.NET Core) 支持 (LTS) 支持* 支持 (LTS) 支持 (LTS) 不支持
Azure Functions v2 支持 受支持 受支持 受支持 不支持
Java 支持 (V2.0.0+) 支持 (V2.0.0+) 不支持 支持 (V3.2.0+) 不支持
Node.js 支持 (V1.3.0+) 支持 (V1.3.0+) 不支持 支持 (V1.3.0+) 不支持
Python 不支持 不支持 不支持 不支持 不支持

基本指标包括请求、依赖项和异常率。 性能指标(性能计数器)包括内存和 CPU。 示例遥测显示了有关失败的请求和依赖项、异常、事件和跟踪的详细信息流。

PerfCounters 支持在不针对 .NET Framework 的 .NET Core 版本之间略有不同:

  • 在适用于 Windows 的 Azure 应用服务中运行时(ASP.NET Core SDK 版本 2.4.1或更高版本),支持 PerfCounters 指标。
  • 对于面向 .NET Core LTS 或更高版本的应用,当应用在任何 Windows 计算机上运行时,支持 PerfCounters。
  • 当应用以最新版本在任意位置(例如 Linux、Windows、用于 Linux 的应用服务、容器等)运行时,支持 PerfCounters,但仅适用于针对 .NET Core LTS 或更高版本的应用。

疑难解答

实时指标使用不同于其他 Application Insights 遥测的 IP 地址。 请确保在防火墙中开放这些 IP 地址。 另外,请检查实时指标的传出端口在服务器的防火墙中是否为打开状态。

Azure TLS 1.2 迁移公告中所述,实时指标现在仅支持 TLS 1.2。 如果使用的是较旧版本的 TLS,则实时指标不会显示任何数据。 对于基于 .NET Framework 4.5.1 的应用程序,请参阅在客户端上启用传输层安全性 (TLS) 1.2 - Configuration Manager,以支持较新的 TLS 版本。

.NET 缺少配置

  1. 验证是否使用的是最新版本的 NuGet 包 Microsoft.ApplicationInsights.PerfCounterCollector

  2. 编辑 ApplicationInsights.config 文件:

    • 验证连接字符串是否指向正在使用的 Application Insights 资源。
    • 找到 QuickPulseTelemetryModule 配置选项。 如果不存在,请添加该选项。
    • 找到 QuickPulseTelemetryProcessor 配置选项。 如果不存在,请添加该选项。
    <TelemetryModules>
    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.
    QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector"/>
    </TelemetryModules>
    
    <TelemetryProcessors>
    <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.
    QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
    </TelemetryProcessors>
    
  3. 重新启动应用程序。

“数据暂时无法访问”状态消息

导航到“实时指标”时,可能会看到一个横幅,其中包含状态消息:数据暂时无法访问。 有关我们状态的更新发布在此处:https://aka.ms/aistatus

单击指向“Azure 状态”页面的链接,检查是否存在影响 Application Insights 的激活中断。 验证防火墙和浏览器扩展是否在未发生中断的情况下阻止对实时指标的访问。 例如,某些常用的广告拦截器扩展会阻止与 *.monitor.azure.cn 的连接。 若要使用实时指标的完整功能,请禁用广告拦截器扩展,或者在广告拦截器或防火墙等工具中添加针对 *.livediagnostics.monitor.azure.cn 域的排除规则。

发往 livediagnostics.monitor.azure.cn 的请求数量异常多

Application Insights SDK 使用 REST API 与 QuickPulse 终结点通信,这些终结点为 Web 应用程序提供实时指标。 默认情况下,SDK 每五秒轮询一次终结点,以检查你是否正在 Azure 门户中查看“实时指标”窗格。

如果打开“实时指标”窗格,SDK 将切换到更高频率的模式,并每秒将新指标发送到 QuickPulse。 这允许监视和诊断实时应用程序 1 秒延迟,但也会产生更多的网络流量。 若要恢复正常的流量流,请导航离开“实时指标”窗格。

注意

Application Insights 不会跟踪 SDK 对 QuickPulse 终结点进行的 REST API 调用,也不会影响依赖项调用或其他指标。 但是,你可能会在其他网络监视工具中看到它们。

后续步骤