你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 ASP.NET Core 应用程序的 Application Insights

本文介绍如何为 ASP.NET Core 应用程序启用和配置 Application Insights。

Application Insights 可以从你的 ASP.NET Core 应用程序收集以下遥测数据:

  • 请求
  • 依赖项
  • 异常
  • 性能计数器
  • 检测信号
  • 日志

我们将使用一个 MVC 应用程序示例。 如果你使用的是辅助角色服务,请使用此处的说明。

注意

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

支持的方案

无论在何处以何种方式运行你的应用程序,适用于 ASP.NET Core 的 Application Insights SDK 都可对其进行监视。 如果应用程序正在运行并与 Azure 建立了网络连接,则可以收集遥测数据。 Application Insights 监视在任何支持 .NET Core 的地方都受支持,并涵盖以下方案:

  • 操作系统:Windows、Linux 或 Mac
  • 托管方法:进程内或进程外
  • 部署方法:框架依赖或自包含
  • Web 服务器:IIS(Internet 信息服务器)或 Kestrel
  • 托管平台:Azure 应用服务的 Web 应用功能、Azure VM、Docker、Azure Kubernetes 服务 (AKS) 等
  • .NET Core 版本:所有正式支持的不在预览中的 .NET Core 版本
  • IDE:Visual Studio、Visual Studio Code 或命令行

注意

先决条件

  • 一个正常运行的 ASP.NET Core 应用程序。 如果需要创建 ASP.NET Core 应用程序,请遵循此 ASP.NET Core 教程
  • 一个有效的 Application Insights 连接字符串。 将任何遥测数据发送到 Application Insights 时,都需要使用此字符串。 如果你需要创建新的 Application Insights 资源来获取连接字符串,请参阅创建 Application Insights 资源

启用 Application Insights 服务器端遥测 (Visual Studio)

对于 Visual Studio for Mac,请使用手动指南。 只有 Windows 版本的 Visual Studio 支持此过程。

  1. 在 Visual Studio 中打开项目。

  2. 转到“项目”>“添加 Application Insights 遥测”。

  3. 选择“Azure 应用程序见解”,然后选择“下一步”。

  4. 选择订阅和 Application Insights 实例(或使用“新建”创建新实例),然后选择“下一步”。

  5. 添加或确认 Application Insights 连接字符串(应根据你在上一步中的选择预先填充此字符串),然后选择“完成”。

  6. 将 Application Insights 添加到项目后,确认使用的是最新稳定版本的 SDK。 转到“项目”>“管理 NuGet 包...”>“Microsoft.ApplicationInsights.AspNetCore”。 如果需要,请选择“更新”。

    显示在何处选择要更新的 Application Insights 包的屏幕截图。

启用 Application Insights 服务器端遥测(不使用 Visual Studio)

  1. 安装适用于 ASP.NET Core 的 Application Insights SDK NuGet 包

    我们建议始终使用最新稳定版本。 在开源 GitHub 存储库中可以找到 SDK 的完整发行说明。

    以下代码示例演示了要添加到项目的 .csproj 文件中的更改。

    <ItemGroup>
        <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
    </ItemGroup>
    
  2. AddApplicationInsightsTelemetry() 添加到 startup.csprogram.cs 类(取决于 .NET Core 版本)

    Program 类中的 WebApplication.CreateBuilder() 方法之后添加 builder.Services.AddApplicationInsightsTelemetry();,如以下示例所示:

    // This method gets called by the runtime. Use this method to add services to the container.
    var builder = WebApplication.CreateBuilder(args);
    
    // The following line enables Application Insights telemetry collection.
    builder.Services.AddApplicationInsightsTelemetry();
    
    // This code adds other services for your application.
    builder.Services.AddMvc();
    
    var app = builder.Build();
    
  3. 设置连接字符串

    尽管可以将连接字符串作为 ApplicationInsightsServiceOptions 参数的一部分提供给 AddApplicationInsightsTelemetry,但我们建议你在配置中指定连接字符串。 以下代码示例展示了如何在 appsettings.json 中指定连接字符串。 在发布期间,请确保将 appsettings.json 复制到应用程序根文件夹。

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "ApplicationInsights": {
        "ConnectionString": "Copy connection string from Application Insights Resource Overview"
      }
    }
    

    或者,在“APPLICATIONINSIGHTS_CONNECTION_STRING”环境变量或 JSON 配置文件中的“ApplicationInsights:ConnectionString”中指定连接字符串。

    例如:

    • SET ApplicationInsights:ConnectionString = <Copy connection string from Application Insights Resource Overview>

    • SET APPLICATIONINSIGHTS_CONNECTION_STRING = <Copy connection string from Application Insights Resource Overview>

    • 通常 APPLICATIONINSIGHTS_CONNECTION_STRINGAzure Web 应用中使用,但也可以在所有支持此 SDK 的平台使用。

    注意

    在代码中指定的连接字符串优先于环境变量 APPLICATIONINSIGHTS_CONNECTION_STRING,而后者又优先于其他选项。

用户机密和其他配置提供程序

如果你要将连接字符串存储在 ASP.NET Core 用户机密中,或者要从其他配置提供程序中检索它,可以将重载与 Microsoft.Extensions.Configuration.IConfiguration 参数一起使用。 例如,services.AddApplicationInsightsTelemetry(Configuration);。 在 Microsoft.ApplicationInsights.AspNetCore 版本 2.15.0 及更高版本中,调用 services.AddApplicationInsightsTelemetry() 将自动从应用程序的 Microsoft.Extensions.Configuration.IConfiguration 中读取连接字符串。 无需显式提供 IConfiguration

如果 IConfiguration 已从多个提供程序加载配置,则无论添加提供程序的顺序如何,services.AddApplicationInsightsTelemetry 都会优先考虑 appsettings.json 中的配置。 使用 services.AddApplicationInsightsTelemetry(IConfiguration) 方法从 IConfiguration 读取配置,而无需对 appsettings.json 进行这种优先处理。

运行应用程序

运行应用程序并向其发出请求。 现在,遥测数据应会流入 Application Insights。 Application Insights SDK 自动将传入的 Web 请求收集到应用程序,并收集以下遥测数据。

实时指标

实时指标可用于快速验证是否正确配置了 Application Insights 监视。 遥测数据可能需要几分钟才能出现在门户和分析中,但实时指标会近乎实时地显示正在运行的进程的 CPU 使用情况。 它还可以显示其他遥测数据,例如请求、依赖项和跟踪。

ILogger 日志

默认配置收集 ILoggerWarning 日志和严重性级别更高的日志。 查看常见问题解答,以自定义此配置

依赖项

默认情况已启用依赖项收集。 此文介绍了自动收集的依赖项,并提供了执行手动跟踪的步骤。

性能计数器

对 ASP.NET Core 中的性能计数器的支持限制如下:

  • 如果应用程序在 Azure Web 应用 (Windows) 中运行,则 SDK 2.4.1 和更高版本将收集性能计数器。
  • 如果应用程序在 Windows 中运行,并且面向 NETSTANDARD2.0 或更高版本,则 SDK 2.7.1 和更高版本将收集性能计数器。
  • 对于面向 .NET Framework 的应用程序,所有版本的 SDK 都支持性能计数器。
  • SDK 2.8.0 及更高版本在 Linux 中支持 cpu/memory 计数器, 但不在 Linux 中支持其他计数器。 在 Linux(和其他非 Windows 环境)中,获取系统计数器的建议方法是使用 EventCounter

EventCounter

默认情况下,启用 EventCounterCollectionModule。 若要了解如何配置要收集的计数器列表,请参阅 EventCounters 简介

通过 HTTP 扩充数据

HttpContext.Features.Get<RequestTelemetry>().Properties["myProp"] = someData

为 Web 应用程序启用客户端遥测

完成前面所述的步骤足以开始收集服务器端遥测数据。 如果应用程序包含客户端组件,请遵循后续步骤开始收集使用情况遥测数据

  1. _ViewImports.cshtml 中添加注入代码:

    @inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet
    
  2. _Layout.cshtml 中,将 HtmlHelper 插入到 <head> 节的末尾、任何其他脚本的前面。 若要从页面报告任何自定义 JavaScript 遥测数据,请将其注入到此片段的后面:

    @Html.Raw(JavaScriptSnippet.FullScript)
    </head>
    

作为使用 FullScript 的替代方法,ScriptBody 从 Application Insights SDK for ASP.NET Core 版本 2.14 开始提供。 如果需要控制 <script> 标记以设置内容安全策略,请使用 ScriptBody

<script> // apply custom changes to this script tag.
 @Html.Raw(JavaScriptSnippet.ScriptBody)
</script>

前面引用的 .cshtml 文件名取自默认的 MVC 应用程序模板。 从根本上讲,若要为应用程序正确启用客户端监视,JavaScript 代码片段必须出现在所要监视的应用程序的每个页面的 <head> 节中。 在应用程序模板中,将 JavaScript 代码片段添加到 _Layout.cshtml 以启用客户端监视。

如果你的项目不包含 _Layout.cshtml,仍可通过将 JavaScript 代码片段添加到控制应用内所有页面的 <head> 的等效文件来添加客户端监视。 或者,可将代码片段添加到多个页面中,但我们不建议这样做。

注意

JavaScript 注入提供默认配置体验。 如果需要设置连接字符串以外的配置,需要删除上述自动注入并手动添加 JavaScript SDK

配置 Application Insights SDK

可以自定义适用于 ASP.NET Core 的 Application Insights SDK 以更改默认配置。 Application Insights SDK ASP.NET 的用户可以使用 ApplicationInsights.config 或通过修改 TelemetryConfiguration.Active 来熟悉配置更改。 对于 ASP.NET Core,除非另有说明,否则在 Startup.cs 类的 ConfigureServices() 方法中进行几乎所有配置更改。 以下部分提供了详细信息。

注意

在 ASP.NET Core 应用程序中,不支持通过修改 TelemetryConfiguration.Active 来更改配置。

使用 ApplicationInsightsServiceOptions

可以通过向 AddApplicationInsightsTelemetry 传递 ApplicationInsightsServiceOptions 来修改一些通用设置,如以下示例所示:

var builder = WebApplication.CreateBuilder(args);

var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();

// Disables adaptive sampling.
aiOptions.EnableAdaptiveSampling = false;

// Disables QuickPulse (Live Metrics stream).
aiOptions.EnableQuickPulseMetricStream = false;

builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();

此表包含 ApplicationInsightsServiceOptions 设置的完整列表:

设置 说明 默认
EnablePerformanceCounterCollectionModule 启用/禁用 PerformanceCounterCollectionModule
EnableRequestTrackingTelemetryModule 启用/禁用 RequestTrackingTelemetryModule
EnableEventCounterCollectionModule 启用/禁用 EventCounterCollectionModule
EnableDependencyTrackingTelemetryModule 启用/禁用 DependencyTrackingTelemetryModule
EnableAppServicesHeartbeatTelemetryModule 启用/禁用 AppServicesHeartbeatTelemetryModule
EnableAzureInstanceMetadataTelemetryModule 启用/禁用 AzureInstanceMetadataTelemetryModule
EnableQuickPulseMetricStream Enable/Disable LiveMetrics feature
EnableAdaptiveSampling 启用/禁用自适应采样
EnableHeartbeat 启用/禁用检测信号功能,该功能定期(默认间隔为 15 分钟)发送名为“HeartbeatState”的自定义指标,其中包含有关运行时等的信息,例如 .NET 版本、Azure 环境信息(如果适用)等。
AddAutoCollectedMetricExtractor 启用/禁用 AutoCollectedMetrics 提取程序 - 一个 TelemetryProcessor,在采样发生之前发送有关请求/依赖项的聚合前指标。
RequestCollectionOptions.TrackExceptions 启用/禁用请求收集模块的未经处理的异常跟踪报告。 在 NETSTANDARD2.0 中为 false(因为异常是通过 ApplicationInsightsLoggerProvider 跟踪的),否则为 true。
EnableDiagnosticsTelemetryModule 启用/禁用 DiagnosticsTelemetryModule。 禁用将导致以下设置被忽略:EnableHeartbeatEnableAzureInstanceMetadataTelemetryModuleEnableAppServicesHeartbeatTelemetryModule

有关最新列表,请参阅 ApplicationInsightsServiceOptions 中的可配置设置

针对 Microsoft.ApplicationInsights.AspNetCore SDK 2.15.0 及更高版本的配置建议

在 Microsoft.ApplicationInsights.AspNetCore SDK 版本 2.15.0 及更高版本中,建议配置 ApplicationInsightsServiceOptions 中提供的每个设置,包括使用应用程序 IConfiguration 实例的“ConnectionString”。 设置必须位于“ApplicationInsights”部分下,如以下示例中所示。 appsettings.json 的以下部分配置连接字符串,并禁用自适应采样和性能计数器收集。

{
    "ApplicationInsights": {
    "ConnectionString": "Copy connection string from Application Insights Resource Overview",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
    }
}

如果使用 builder.Services.AddApplicationInsightsTelemetry(aiOptions) (适用于 ASP.NET Core 6.0)或 services.AddApplicationInsightsTelemetry(aiOptions)(适用于 ASP.NET Core 3.1 及更早版本),它会覆盖来自 Microsoft.Extensions.Configuration.IConfiguration 的设置。

采样

适用于 ASP.NET Core 的 Application Insights SDK 支持固定频率和自适应采样。 默认情况下,启用自适应采样。

有关详细信息,请参阅 配置 ASP.NET Core 应用程序的自适应采样

添加 TelemetryInitializer

如果要使用其他信息来丰富遥测数据,请使用遥测初始化表达式

将任何新的 TelemetryInitializer 添加到 DependencyInjection 容器,如以下代码所示。 SDK 会自动拾取添加到 DependencyInjection 容器的任何 TelemetryInitializer

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();

var app = builder.Build();

注意

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>(); 适用于简单的初始化程序。 对于其他程序,则需要以下内容:builder.Services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" });

删除 TelemetryInitializer

默认情况下,提供遥测初始化表达式。 若要删除所有或特定的遥测初始化表达式,请在调用 AddApplicationInsightsTelemetry() 之后使用以下示例代码。

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// Remove a specific built-in telemetry initializer
var tiToRemove = builder.Services.FirstOrDefault<ServiceDescriptor>
                    (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
if (tiToRemove != null)
{
    builder.Services.Remove(tiToRemove);
}

// Remove all initializers
// This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
builder.Services.RemoveAll(typeof(ITelemetryInitializer));

var app = builder.Build();

添加遥测处理程序

可以使用 IServiceCollection 中的扩展方法 AddApplicationInsightsTelemetryProcessor 将自定义遥测处理程序添加到 TelemetryConfiguration。 在高级筛选方案中使用遥测处理器。 使用以下示例。

var builder = WebApplication.CreateBuilder(args);

// ...
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();

// If you have more processors:
builder.Services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();

var app = builder.Build();

配置或删除默认的 TelemetryModule

Application Insights 自动收集有关特定工作负荷的遥测数据,无需用户手动跟踪。

默认情况下,启用以下自动收集模块。 这些模块负责自动收集遥测数据。 可以禁用或配置这些模块,以改变其默认行为。

  • RequestTrackingTelemetryModule:从传入的 Web 请求收集 RequestTelemetry
  • DependencyTrackingTelemetryModule:从传出的 http 调用和 sql 调用收集 DependencyTelemetry
  • PerformanceCollectorModule:收集 Windows PerformanceCounters
  • QuickPulseTelemetryModule:收集遥测数据以便在实时指标门户中显示
  • AppServicesHeartbeatTelemetryModule:收集有关托管应用程序的 Azure 应用服务环境的检测信号(以自定义指标的形式发送)
  • AzureInstanceMetadataTelemetryModule:收集有关托管应用程序的 Azure VM 环境的检测信号(以自定义指标的形式发送)
  • EventCounterCollectionModule :收集 EventCounters;此模块是一项新功能,在 SDK 版本 2.8.0 及更高版本中提供

若要配置任何默认的 TelemetryModule,请按以下示例中所示使用 IServiceCollection 中的扩展方法 ConfigureTelemetryModule<T>

using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures DependencyTrackingTelemetryModule.
// Similarly, any other default modules can be configured.
builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) =>
        {
            module.EnableW3CHeadersInjection = true;
        });

// The following removes all default counters from EventCounterCollectionModule, and adds a single one.
builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, o) =>
        {
            module.Counters.Add(new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
        });

// The following removes PerformanceCollectorModule to disable perf-counter collection.
// Similarly, any other default modules can be removed.
var performanceCounterService = builder.Services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
if (performanceCounterService != null)
{
    builder.Services.Remove(performanceCounterService);
}

var app = builder.Build();

在版本 2.12.2 及更高版本中,ApplicationInsightsServiceOptions 包含一个简单选项,用于禁用任何默认模块。

配置遥测通道

默认遥测通道ServerTelemetryChannel。 下面的示例演示如何对其进行替代。

using Microsoft.ApplicationInsights.Channel;

var builder = WebApplication.CreateBuilder(args);

// Use the following to replace the default channel with InMemoryChannel.
// This can also be applied to ServerTelemetryChannel.
builder.Services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });

builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

注意

如果你想刷新缓冲区,请参阅刷新数据,例如在关闭的应用程序中使用 SDK 时。

动态禁用遥测

如果要有条件和动态地禁用遥测,可以在代码中的任何位置使用 ASP.NET Core 依赖项注入容器解析 TelemetryConfiguration 实例,并在其上设置 DisableTelemetry 标志。

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// any custom configuration can be done here:
builder.Services.Configure<TelemetryConfiguration>(x => x.DisableTelemetry = true);

var app = builder.Build();

前面的代码示例阻止将遥测数据发送到 Application Insights。 它不会阻止任何自动收集模块收集遥测数据。 如果要删除特定的自动收集模块,请参阅删除遥测模块

常见问题

Application Insights 是否支持 ASP.NET Core 3.X?

是的。 请更新到 Application Insights SDK for ASP.NET Core 2.8.0 或更高版本。 较早的 SDK 版本不支持 ASP.NET Core 3.X。

此外,如果要启用基于 Visual Studio 的服务器端遥测,请更新到最新版本的 Visual Studio 2019 (16.3.0) 以加入。 较早版本的 Visual Studio 不支持 ASP.NET Core 3.X 应用的自动加入。

如何跟踪不会自动收集的遥测数据?

使用构造函数注入获取 TelemetryClient 的实例,然后对其调用所需的 TrackXXX() 方法。 不建议在 ASP.NET Core 应用程序中创建新的 TelemetryClientTelemetryConfiguration 实例。 DependencyInjection 容器中已注册了 TelemetryClient 的单一实例,该实例与剩余的遥测功能共享 TelemetryConfiguration。 仅当需要与剩余的遥测功能使用不同的配置时,才建议创建新的 TelemetryClient 实例。

以下示例展示了如何从控制器跟踪更多遥测数据。

using Microsoft.ApplicationInsights;

public class HomeController : Controller
{
    private TelemetryClient telemetry;

    // Use constructor injection to get a TelemetryClient instance.
    public HomeController(TelemetryClient telemetry)
    {
        this.telemetry = telemetry;
    }

    public IActionResult Index()
    {
        // Call the required TrackXXX method.
        this.telemetry.TrackEvent("HomePageRequested");
        return View();
    }

有关 Application Insights 中自定义数据报告的详细信息,请参阅 Application Insights 自定义指标 API 参考。 使用 GetMetric API 将自定义指标发送到 Application Insights 时,可使用类似的方法。

如何自定义 ILogger 日志收集?

默认情况下,仅自动捕获 Warning 日志和严重级别更高的日志。 若要更改此行为,请显式替代提供程序 ApplicationInsights 的日志记录配置,如以下代码所示。 以下配置使 Application Insights 可以捕获所有 Information 日志及严重级别更高的日志。

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

请务必注意,以下示例不会导致 Application Insights 提供程序捕获 Information 日志。 它不会对其进行捕获,因为 SDK 添加了一个默认日志记录筛选器,该筛选器指示 ApplicationInsights 仅捕获 Warning 日志和严重级别更高的日志。 Application Insights 需要显式替代。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

有关详细信息,请参阅 ILogger 配置

某些 Visual Studio 模板使用 IWebHostBuilder 中的 UseApplicationInsights() 扩展方法来启用 Application Insights。 这种用法是否仍然有效?

尽管 UseApplicationInsights() 扩展方法仍受支持,但它在 Application Insights SDK 版本 2.8.0 和更高版本中已标记为弃用。 在下一个 SDK 主要版本中,将会删除此方法。 若要启用 Application Insights 遥测,建议使用 AddApplicationInsightsTelemetry(),因为它提供用于控制一些配置的重载。 此外,在 ASP.NET Core 3.X 应用中,services.AddApplicationInsightsTelemetry() 是启用 Application Insights 的唯一方式。

我正在将 ASP.NET Core 应用程序部署到 Web 应用。 是否仍要从 Web 应用启用 Application Insights 扩展?

如果在生成时已按本文所示安装了 SDK,则无需从应用服务门户启用 Application Insights 扩展。 如果安装了扩展,在检测到已添加 SDK 时,该扩展将回退。 如果从扩展启用 Application Insights,则无需安装和更新 SDK。 但是,遵照本文中的说明启用 Application Insights 会更灵活,原因如下:

  • Application Insights 遥测功能将在以下位置或模式下继续运行:
    • 所有操作系统,包括 Windows、Linux 和 Mac。
    • 所有发布模式,包括“独立”或“框架相关”。
    • 所有目标框架,包括完整的 .NET Framework。
    • 所有托管选项,包括 Web 应用、VM、Linux、容器、Azure Kubernetes 服务和非 Azure 托管。
    • 所有 .NET Core 版本,包括预览版。
  • 从 Visual Studio 调试时,可在本地查看遥测数据。
  • 可以使用 TrackXXX() API 跟踪更多自定义遥测数据。
  • 可以完全控制配置。

是否可以使用 Azure Monitor Application Insights 代理(以前称为“状态监视器 v2”)等工具启用 Application Insights 监视?

是的。 在 Application Insights Agent 2.0.0-beta1 及更高版本中,支持在 IIS 中托管的 ASP.NET Core 应用程序。

如果在 Linux 中运行应用程序,是否支持所有功能?

是的。 SDK 的功能支持在所有平台中是相同的,不过存在以下例外情况:

  • 该 SDK 在 Linux 上收集事件计数器,因为性能计数器仅在 Windows 中受支持。 大多数指标是相同的。
  • 尽管默认已启用 ServerTelemetryChannel,但如果应用程序在 Linux 或 macOS 中运行,出现网络问题时,通道不会自动创建本地存储文件夹来暂时保留遥测数据。 由于这种限制,在出现暂时性的网络或服务器时,遥测数据将会丢失。 若要解决此问题,请为通道配置一个本地文件夹:
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

var builder = WebApplication.CreateBuilder(args);

// The following will configure the channel to use the given folder to temporarily
// store telemetry items during network or Application Insights server issues.
// User should ensure that the given folder already exists
// and that the application has read/write permissions.
builder.Services.AddSingleton(typeof(ITelemetryChannel),
                        new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});
builder.Services.AddApplicationInsightsTelemetry();

var app = builder.Build();

此限制不适用于版本 2.15.0 及更高版本。

新的 .NET Core 3.X 辅助角色服务模板应用程序是否支持此 SDK?

此 SDK 需要 HttpContext。 因此在任何非 HTTP 应用程序(包括 .NET Core 3.X 辅助角色服务应用程序)中无法正常工作。 若要使用新发布的 Microsoft.ApplicationInsights.WorkerService SDK 在此类应用程序中启用 Application Insights,请参阅适用于辅助角色服务应用程序(非 HTTP 应用程序)的 Application Insights

开源 SDK

有关最新的更新和 bug 修补程序,请参阅发行说明

后续步骤