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

使用 Application Insights 中的实时指标流(也称为 QuickPulse)来监视生产环境中的实时 Web 应用。 选择并筛选指标和性能计数器进行实时监视,且服务不会受到任何干扰。 从失败请求和异常的样本中检查堆栈跟踪。 实时指标流与探查器快照调试程序一同为实时网站提供了功能强大的非入侵式诊断工具。

使用实时指标流可实现以下操作:

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

“实时指标”选项卡

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

入门

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

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

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

使用适用于所有 .NET 应用程序的代码启用 LiveMetrics

即使在按照 .NET 应用程序的推荐说明加入时默认会启用 LiveMetrics,但以下内容说明了如何手动设置实时指标。

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

namespace LiveMetricsDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 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 setup 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 stream.
                // 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 应用程序中都可以使用相同的代码。 如果启用了自动收集遥测的任何其他 TelemetryModules,请务必确保用于初始化这些模块的相同配置也用于实时指标模块。

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

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

选择和筛选指标

(适用于 ASP.NET、ASP.NET Core 和 Azure Functions (v2)。)

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

筛选请求速率

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

针对请求速率的查询生成器(使用自定义指标)

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

实时指标分别在以下两个点上聚合:在每个服务器本地,并在所有服务器上。 可以通过在相应的下拉列表中选择其他选项来更改默认选项。

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

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

“筛选器”按钮

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

查询生成器

注意

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

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

屏幕截图显示了“遥测示例”窗口,其中选择了异常且窗口底部显示了异常详细信息。

按服务器实例筛选

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

采样的实时失败

确保控制通道的安全

注意

目前,只能使用手动检测 (SDK) 设置经过身份验证的通道,而无法使用 Azure 服务集成(或自动检测)对服务器进行身份验证。

在实时指标门户中指定的自定义筛选器条件将发回到 Application Insights SDK 中的“实时指标”组件。 筛选器可能包含 customerID 等敏感信息。 可以使用机密 API 密钥以及检测密钥来保护通道的安全。

创建 API 密钥

API 密钥  创建 api 密钥

将 API 密钥添加到配置中

ASP.NET

在 applicationinsights.config 文件中,将 AuthenticationApiKey 添加到 QuickPulseTelemetryModule:

<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector">
      <AuthenticationApiKey>YOUR-API-KEY-HERE</AuthenticationApiKey>
</Add>

ASP.NET Core

对于 ASP.NET Core 应用程序,请遵照以下说明进行操作。

如下所述修改 startup.cs 文件的 ConfigureServices

添加以下命名空间。

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;

然后按如下所示修改 ConfigureServices 方法。

public void ConfigureServices(IServiceCollection services)
{
    // existing code which include services.AddApplicationInsightsTelemetry() to enable Application Insights.
    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 应用程序的详细信息,请参阅有关在 WorkerServices 中配置遥测模块的指南。

Azure 函数应用

对于使用 API 密钥保护通道的 Azure 函数应用 (v2),可以通过一个环境变量来实现。

从应用程序资源资源Insights API 密钥,并转到设置 Function App的"配置"。 选择 "新建应用程序 设置", 然后输入 的名称和与 API 密钥对应的值。

但是,如果认识并信任所有连接的服务器,则可以尝试使用不包含经过身份验证的通道的自定义筛选器。 可以使用此选项六个月。 每建立一个新的会话或者新服务器联机时,都需要进行这种替代。

实时指标身份验证选项

注意

在筛选条件中输入 CustomerID 等潜在的敏感信息之前,我们强烈建议设置经过身份验证的通道。

支持的功能表

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

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

* PerfCounters 支持在不面向以下版本的 .NET Core 版本之间略有不同.NET Framework:

  • 在适用于 Windows 的 Azure 应用服务中运行时,支持 PerfCounters 指标。 (AspNetCore SDK 版本 2.4.1 或更高版本)
  • 当应用在 VM、云服务或Windows等虚拟机 (运行时,支持 PerfCounters ) (AspNetCore SDK 版本 2.7.1 或更高版本) ,但适用于面向 .NET Core 2.0 或更高版本的应用。
  • 当应用在 Linux、Windows、适用于 Linux 的应用服务、容器等 ANYWHERE (运行时,支持 PerfCounters ) 在最新版本中 (即 AspNetCore SDK 版本 2.8.0 或更高版本) ,但仅适用于面向 .NET Core 2.0 或更高版本的应用。

疑难解答

实时指标流使用不同于其他 Application Insights 遥测功能的 IP 地址。 请确保在防火墙中开放这些 IP 地址

后续步骤