다음을 통해 공유

从 Application Insights SDK 迁移到 Azure Monitor OpenTelemetry

本指南提供将应用程序从使用 Application Insights SDK(经典 API)迁移到 Azure Monitor OpenTelemetry 的分步说明。

预期使用 Azure Monitor OpenTelemetry 监测工具的体验与 Application Insights SDK 类似。 有关详细信息和功能比较,请参阅 功能的发布状态

如果开始使用 Application Insights 且不需要从经典 API 迁移,请参阅 “启用 Azure Monitor OpenTelemetry”。

注释

有关 Azure Function Apps,请参阅 将 OpenTelemetry 与 Azure Functions 配合使用

先决条件

ASP.NET Core

  • 已使用 Application Insights 检测的 ASP.NET Core Web 应用程序,无需进行任何自定义。
  • .NET的一个主动支持版本。

ASP.NET

  • 已使用 Application Insights 检测的 ASP.NET Web 应用程序。
  • . NET Framework 的主动支持版本。

Console

  • 已使用 Application Insights 检测的控制台应用程序。
  • 当前受支持的 .NET Framework.NET 版本。

WorkerService

  • 已使用 Application Insights 检测的 WorkerService 应用程序,无需进行任何自定义。
  • .NET的一个主动支持版本。

小窍门

我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。

删除 Application Insights SDK

注释

在继续执行这些步骤之前,应确认应用程序的当前备份。

ASP.NET Core

  1. 删除 NuGet 包

    Microsoft.ApplicationInsights.AspNetCore删除csproj包。

    dotnet remove package Microsoft.ApplicationInsights.AspNetCore
    
  2. 删除初始化代码和自定义项

    删除对代码库中 Application Insights 类型的任何引用。

    小窍门

    删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。

    • 从您的ServiceCollection中移除 Application Insights,方法是删除以下行:

      builder.Services.AddApplicationInsightsTelemetry();
      
    • ApplicationInsights中删除appsettings.json部分。

      {
          "ApplicationInsights": {
              "ConnectionString": "<YOUR-CONNECTION-STRING>"
          }
      }
      
  3. 清理和生成

    检查 bin 目录,验证是否删除了对 Microsoft.ApplicationInsights.* 的所有引用。

  4. 测试应用程序

    验证应用程序是否没有意外的后果。

ASP.NET

  1. 删除 NuGet 包

    Microsoft.AspNet.TelemetryCorrelationMicrosoft.ApplicationInsights.*中删除csproj包以及任何packages.config包。

  2. 删除 ApplicationInsights.config 文件,

  3. 从应用程序的 Web.config 文件中删除分区。

    • 首次将 ApplicationInsights 添加到项目时,会自动将两个 HttpModule 添加到 web.config。

      应删除对 TelemetryCorrelationHttpModuleApplicationInsightsWebTracking 的任何引用。 如果将 Application Insights 添加到 Internet Information Server (IIS) 模块,则还应将其删除。

      <configuration>
      <system.web>
          <httpModules>
          <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" />
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
          </httpModules>
      </system.web>
      <system.webServer>
          <modules>
          <remove name="TelemetryCorrelationHttpModule" />
          <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="managedHandler" />
          <remove name="ApplicationInsightsWebTracking" />
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
          </modules>
      </system.webServer>
      </configuration>
      
    • 另请查看添加到 web.config 的任何 程序集版本重定向

  4. 删除初始化代码和自定义项

    删除对代码库中 Application Insights 类型的任何引用。

    小窍门

    删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。

    • 删除对TelemetryConfigurationTelemetryClient的引用。 它是应用程序启动的一部分,用于初始化 Application Insights SDK。

    • 以下方案是可选的,适用于高级用户。

      • 如果对用于TelemetryClient数据的引用更多,则应删除这些引用。
      • 如果您通过TelemetryProcessor添加了任何TelemetryInitializer,则应将其删除。 可以在您的配置中找到对它们的引用。
      • 如果你的项目在FilterConfig.cs目录中有一个App_Start,请检查引用 Application Insights 的任何自定义异常处理程序并将其删除。
  5. 删除 JavaScript 代码片段

    如果添加了 JavaScript SDK 以收集客户端遥测数据,也可以将其删除,尽管它在不使用 .NET SDK 的情况下继续工作。 有关要删除的内容的完整代码示例,请查看 JavaScript SDK 的载入指南

  6. 删除任何 Visual Studio 工件

    如果使用 Visual Studio 载入 Application Insights,则可以在项目中留下更多文件。

    • ConnectedService.json 可能与 Application Insights 资源有关联。

    • [Your project's name].csproj 可能包含对 Application Insights 资源的引用:

      <ApplicationInsightsResourceId>/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Default-ApplicationInsights-ChinaNorth/providers/microsoft.insights/components/WebApplication4</ApplicationInsightsResourceId>
      
  7. 清理和生成

    检查 bin 目录,验证是否删除了对 Microsoft.ApplicationInsights. 的所有引用。

  8. 测试应用程序

    验证应用程序是否没有意外的后果。

Console

  1. 删除 NuGet 包

    从你的Microsoft.ApplicationInsights.*csproj中删除任何packages.config包。

    dotnet remove package Microsoft.ApplicationInsights
    
  2. 删除初始化代码和自定义项

    删除对代码库中 Application Insights 类型的任何引用。

    小窍门

    删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。

    • 删除对TelemetryConfigurationTelemetryClient的引用。 在应用程序启动时,应该初始化 Application Insights SDK。

      var config = TelemetryConfiguration.CreateDefault();
      var client = new TelemetryClient(config);
      

    小窍门

    如果您使用 AddApplicationInsightsTelemetryWorkerService() 将 Application Insights 添加到你的 ServiceCollection 帐户,请查看 WorkerService 选项卡。

  3. 清理和生成

    检查 bin 目录,验证是否删除了对 Microsoft.ApplicationInsights. 的所有引用。

  4. 测试应用程序

    验证应用程序是否没有意外的后果。

WorkerService

  1. 删除 NuGet 包

    Microsoft.ApplicationInsights.WorkerService删除csproj包。

    dotnet remove package Microsoft.ApplicationInsights.WorkerService
    
  2. 删除初始化代码和自定义项

    删除对代码库中 Application Insights 类型的任何引用。

    小窍门

    删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。

    • 从您的ServiceCollection中移除 Application Insights,方法是删除以下行:

      builder.Services.AddApplicationInsightsTelemetryWorkerService();
      
    • ApplicationInsights中删除appsettings.json部分。

      {
          "ApplicationInsights": {
              "ConnectionString": "<YOUR-CONNECTION-STRING>"
          }
      }
      
  3. 清理和生成

    检查 bin 目录,验证是否删除了对 Microsoft.ApplicationInsights.* 的所有引用。

  4. 测试应用程序

    验证应用程序是否没有意外的后果。

小窍门

我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。

启用 OpenTelemetry

建议按照以下说明创建开发 资源 并使用其 连接字符串

屏幕截图显示 Application Insights 概述和连接字符串。

计划更新连接字符串,以在确认迁移成功后将遥测数据发送到原始资源。

ASP.NET Core

  1. 安装 Azure Monitor 发行版

    我们的 Azure Monitor 发行版通过包括 OpenTelemetry 检测库来自动遥测,用于收集跟踪、指标、日志和异常,并允许收集自定义遥测。

    安装 Azure Monitor 发行版会将 OpenTelemetry SDK 作为依赖项。

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
    
  2. 添加和配置 OpenTelemetry 和 Azure Monitor

    OpenTelemetry SDK 必须在应用程序启动时配置为你的 ServiceCollection 的一部分,通常在 Program.cs 中。

    OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 Azure Monitor 发行版配置其中每个信号。

Program.cs

下面的代码示例演示了基础知识。

using Azure.Monitor.OpenTelemetry.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        // Call AddOpenTelemetry() to add OpenTelemetry to your ServiceCollection.
        // Call UseAzureMonitor() to fully configure OpenTelemetry.
        builder.Services.AddOpenTelemetry().UseAzureMonitor();

        var app = builder.Build();
        app.MapGet("/", () => "Hello World!");
        app.Run();
    }
}

建议在环境变量中设置连接字符串:

APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>

此处详细介绍了配置连接字符串的更多选项: 配置 Application Insights 连接字符串

ASP.NET

  1. 通过 Azure Monitor 安装 OpenTelemetry SDK

    安装 Azure Monitor 导出程序会将 OpenTelemetry SDK 作为依赖项。

    dotnet add package Azure.Monitor.OpenTelemetry.Exporter
    
  2. 将 OpenTelemetry 配置为应用程序启动的一部分

    必须在应用程序启动时配置 OpenTelemery SDK,通常位于 Global.asax.cs. OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 您的应用程序启动时需要配置每个信号。 应为应用程序创建一次TracerProviderMeterProviderILoggerFactory,并在应用程序关闭时释放。

Global.asax.cs

下面的代码示例演示了一个简单的示例,仅用于显示基础知识。 此时不会收集任何遥测数据。

using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

public class Global : System.Web.HttpApplication
{
    private TracerProvider? tracerProvider;
    private MeterProvider? meterProvider;
    // The LoggerFactory needs to be accessible from the rest of your application.
    internal static ILoggerFactory loggerFactory;

    protected void Application_Start()
    {
        this.tracerProvider = Sdk.CreateTracerProviderBuilder()
            .Build();

        this.meterProvider = Sdk.CreateMeterProviderBuilder()
            .Build();

        loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddOpenTelemetry();
        });
    }

    protected void Application_End()
    {
        this.tracerProvider?.Dispose();
        this.meterProvider?.Dispose();
        loggerFactory?.Dispose();
    }
}

Console

  1. 通过 Azure Monitor 安装 OpenTelemetry SDK

    安装 Azure Monitor 导出程序 会将 OpenTelemetry SDK 作为依赖项。

    dotnet add package Azure.Monitor.OpenTelemetry.Exporter
    
  2. 将 OpenTelemetry 配置为应用程序启动的一部分

    必须在应用程序启动时配置 OpenTelemery SDK,通常位于 Program.cs. OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 您的应用程序启动时需要配置每个信号。 应为应用程序创建一次TracerProviderMeterProviderILoggerFactory,并在应用程序关闭时释放。

下面的代码示例演示了一个简单的示例,仅用于显示基础知识。 此时不会收集任何遥测数据。

Program.cs
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

internal class Program
{
    static void Main(string[] args)
    {
        TracerProvider tracerProvider = Sdk.CreateTracerProviderBuilder()
            .Build();

        MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder()
            .Build();

        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddOpenTelemetry();
        });

        Console.WriteLine("Hello, World!");

        // Dispose tracer provider before the application ends.
        // It will flush the remaining spans and shutdown the tracing pipeline.
        tracerProvider.Dispose();

        // Dispose meter provider before the application ends.
        // It will flush the remaining metrics and shutdown the metrics pipeline.
        meterProvider.Dispose();

        // Dispose logger factory before the application ends.
        // It will flush the remaining logs and shutdown the logging pipeline.
        loggerFactory.Dispose();
    }
}

WorkerService

  1. 通过 Azure Monitor 安装 OpenTelemetry SDK

    安装 Azure Monitor 导出程序 会将 OpenTelemetry SDK 作为依赖项。

    dotnet add package Azure.Monitor.OpenTelemetry.Exporter
    

    还必须安装 OpenTelemetry 扩展托管 包。

    dotnet add package OpenTelemetry.Extensions.Hosting
    
  2. 将 OpenTelemetry 配置为应用程序启动的一部分

    必须在应用程序启动时配置 OpenTelemery SDK,通常位于 Program.cs. OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 您的应用程序启动时需要配置每个信号。 应为应用程序创建一次TracerProviderMeterProviderILoggerFactory,并在应用程序关闭时释放。

下面的代码示例演示了一个简单的示例,仅用于显示基础知识。 此时不会收集任何遥测数据。

Program.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = Host.CreateApplicationBuilder(args);
        builder.Services.AddHostedService<Worker>();

        builder.Services.AddOpenTelemetry()
            .WithTracing()
            .WithMetrics();

        builder.Logging.AddOpenTelemetry();

        var host = builder.Build();
        host.Run();
    }
}

小窍门

我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。

安装和配置检测库

ASP.NET Core

可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。

发行版中包含以下库。

自定义仪器库

Azure Monitor 发行版包括适用于 ASP.NET CoreHttpClientSQLClient 的 .NET OpenTelemetry 探测。 可以使用 OpenTelemetry API 自定义这些包含的检测,或自行手动添加额外的检测。

下面是一些关于如何自定义仪器的示例:

自定义 AspNetCoreTraceInstrumentationOptions
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<AspNetCoreTraceInstrumentationOptions>(options =>
{
    options.RecordException = true;
    options.Filter = (httpContext) =>
    {
        // only collect telemetry about HTTP GET requests
        return HttpMethods.IsGet(httpContext.Request.Method);
    };
});
自定义 HttpClientTraceInstrumentationOptions
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<HttpClientTraceInstrumentationOptions>(options =>
{
    options.RecordException = true;
    options.FilterHttpRequestMessage = (httpRequestMessage) =>
    {
        // only collect telemetry about HTTP GET requests
        return HttpMethods.IsGet(httpRequestMessage.Method.Method);
    };
});
自定义 SqlClientInstrumentationOptions

我们在包中提供 SQLClient 工具,与此同时它仍处于 beta 阶段。 当它达到稳定版本时,我们会将其作为标准包引用包含在内。 在此期间,若要自定义 SQLClient 仪表,请将 OpenTelemetry.Instrumentation.SqlClient 包引用添加到项目中并使用其公共 API。

dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
    builder.AddSqlClientInstrumentation(options =>
    {
        options.SetDbStatementForStoredProcedure = false;
    });
});

ASP.NET

可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。 建议使用以下库:

  1. OpenTelemetry.Instrumentation.AspNet 可用于收集传入请求的遥测数据。 Azure Monitor 将其映射到 请求遥测

    dotnet add package OpenTelemetry.Instrumentation.AspNet
    

    您需要在 Web.config 中添加一个额外的 HttpModule。

    <system.webServer>
      <modules>
          <add
              name="TelemetryHttpModule"
              type="OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule,
                  OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule"
              preCondition="integratedMode,managedHandler" />
      </modules>
    </system.webServer>
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.AspNet 自述文件

  2. OpenTelemetry.Instrumentation.Http 可用于收集出站 http 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测

    dotnet add package OpenTelemetry.Instrumentation.Http
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.Http README

  3. OpenTelemetry.Instrumentation.SqlClient 可用于收集 MS SQL 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测

    dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.SqlClient 自述文件

Global.asax.cs

下面的代码示例扩展了上一个示例。 它现在收集遥测数据,但尚未发送到 Application Insights。

using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

public class Global : System.Web.HttpApplication
{
    private TracerProvider? tracerProvider;
    private MeterProvider? meterProvider;
    internal static ILoggerFactory loggerFactory;

    protected void Application_Start()
    {
        this.tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddAspNetInstrumentation()
            .AddHttpClientInstrumentation()
            .AddSqlClientInstrumentation()
            .Build();

        this.meterProvider = Sdk.CreateMeterProviderBuilder()
            .AddAspNetInstrumentation()
            .AddHttpClientInstrumentation()
            .Build();

        loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddOpenTelemetry();
        });
    }

    protected void Application_End()
    {
        this.tracerProvider?.Dispose();
        this.meterProvider?.Dispose();
        loggerFactory?.Dispose();
    }
}

Console

可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。 建议使用以下库:

  1. OpenTelemetry.Instrumentation.Http 可用于收集出站 http 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测

    dotnet add package OpenTelemetry.Instrumentation.Http
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.Http README

  2. OpenTelemetry.Instrumentation.SqlClient 可用于收集 MS SQL 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测

    dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.SqlClient 自述文件

下面的代码示例扩展了上一个示例。 它现在收集遥测数据,但尚未发送到 Application Insights。

Program.cs
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

internal class Program
{
    static void Main(string[] args)
    {
        TracerProvider tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddHttpClientInstrumentation()
            .AddSqlClientInstrumentation()
            .Build();

        MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder()
            .AddHttpClientInstrumentation()
            .Build();

        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddOpenTelemetry();
        });

        Console.WriteLine("Hello, World!");

        tracerProvider.Dispose();
        meterProvider.Dispose();
        loggerFactory.Dispose();
    }
}

WorkerService

可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。 建议使用以下库:

  1. OpenTelemetry.Instrumentation.Http 可用于收集出站 http 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测

    dotnet add package OpenTelemetry.Instrumentation.Http
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.Http README

  2. OpenTelemetry.Instrumentation.SqlClient 可用于收集 MS SQL 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测

    dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
    

    此处提供了完整的入门指南: OpenTelemetry.Instrumentation.SqlClient 自述文件

下面的代码示例扩展了上一个示例。 它现在收集遥测数据,但尚未发送到 Application Insights。

Program.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = Host.CreateApplicationBuilder(args);
        builder.Services.AddHostedService<Worker>();

        builder.Services.AddOpenTelemetry()
            .WithTracing(builder =>
            {
                builder.AddHttpClientInstrumentation();
                builder.AddSqlClientInstrumentation();
            })
            .WithMetrics(builder =>
            {
                builder.AddHttpClientInstrumentation();
            });

        builder.Logging.AddOpenTelemetry();

        var host = builder.Build();
        host.Run();
    }
}

配置 Azure Monitor

ASP.NET Core

Application Insights 通过 ApplicationInsightsServiceOptions提供更多配置选项。

Application Insights 设置 OpenTelemetry 替代项
AddAutoCollectedMetricExtractor N/A
应用程序版本 在资源上设置“service.version”
ConnectionString 请参阅有关配置连接字符串 的说明
依赖项收集选项 N/A. 若要自定义依赖项,请查看适用于检测库的可用配置选项。
DeveloperMode N/A
EnableActiveTelemetryConfigurationSetup N/A
启用自适应采样 N/A. 仅支持固定速率采样。
启用应用服务心跳遥测模块 N/A
EnableAuthenticationTrackingJavaScript N/A
启用Azure实例元数据遥测模块 N/A
启用依赖追踪遥测模块 请参阅有关筛选跟踪的说明。
启用诊断遥测模块 N/A
启用事件计数器集合模块 (EnableEventCounterCollectionModule) N/A
EnableHeartbeat N/A
EnablePerformanceCounterCollectionModule N/A
EnableQuickPulseMetricStream AzureMonitorOptions.EnableLiveMetrics
启用请求跟踪遥测模块 (EnableRequestTrackingTelemetryModule) 请参阅有关筛选跟踪的说明。
端点地址 使用 ConnectionString。
InstrumentationKey 使用 ConnectionString。
请求收集选项 N/A. 请参阅 OpenTelemetry.Instrumentation.AspNetCore 选项。

删除自定义配置

以下方案是可选的,仅适用于高级用户。

  • 如果还有对的引用,这些引用可用于手动记录遥测数据,那么应将其删除。

  • 如果您通过TelemetryProcessor添加了任何TelemetryInitializer,则应将其删除。 可以在你的 ServiceCollection中找到它们。

    builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
    
    builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
    
  • 删除 JavaScript 代码片段

    如果使用 Application Insights .NET SDK 提供的代码片段,则还必须将其删除。 有关要删除的内容的完整代码示例,请查看本指南 ,为 Web 应用程序启用客户端遥测

    如果添加了 JavaScript SDK 以收集客户端遥测数据,也可以将其删除,尽管它在不使用 .NET SDK 的情况下继续工作。 有关要删除的内容的完整代码示例,请查看 JavaScript SDK 的载入指南

  • 删除任何 Visual Studio 工件

    如果使用 Visual Studio 载入 Application Insights,则可以在项目中留下更多文件。

    • Properties/ServiceDependencies 目录可能包含对 Application Insights 资源的引用。

ASP.NET

若要将遥测数据发送到 Application Insights,必须将 Azure Monitor 导出程序添加到所有三个信号的配置中。

Global.asax.cs

下面的代码示例扩展了上一个示例。 它现在收集遥测数据并将其发送到 Application Insights。

public class Global : System.Web.HttpApplication
{
    private TracerProvider? tracerProvider;
    private MeterProvider? meterProvider;
    internal static ILoggerFactory loggerFactory;

    protected void Application_Start()
    {
        this.tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddAspNetInstrumentation()
            .AddHttpClientInstrumentation()
            .AddSqlClientInstrumentation()
            .AddAzureMonitorTraceExporter()
            .Build();

        this.meterProvider = Sdk.CreateMeterProviderBuilder()
            .AddAspNetInstrumentation()
            .AddHttpClientInstrumentation()
            .AddAzureMonitorMetricExporter()
            .Build();

        loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddOpenTelemetry(logging => logging.AddAzureMonitorLogExporter());
        });
    }

    protected void Application_End()
    {
        this.tracerProvider?.Dispose();
        this.meterProvider?.Dispose();
        loggerFactory?.Dispose();
    }
}

建议在环境变量中设置连接字符串:

APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>

此处详细介绍了配置连接字符串的更多选项: 配置 Application Insights 连接字符串

Console

若要将遥测数据发送到 Application Insights,必须将 Azure Monitor 导出程序添加到所有三个信号的配置中。

Program.cs

下面的代码示例扩展了上一个示例。 它现在收集遥测数据并将其发送到 Application Insights。

using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

internal class Program
{
    static void Main(string[] args)
    {
        TracerProvider tracerProvider = Sdk.CreateTracerProviderBuilder()
            .AddHttpClientInstrumentation()
            .AddSqlClientInstrumentation()
            .AddAzureMonitorTraceExporter()
            .Build();

        MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder()
            .AddHttpClientInstrumentation()
            .AddAzureMonitorMetricExporter()
            .Build();

        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddOpenTelemetry(logging => logging.AddAzureMonitorLogExporter());
        });

        Console.WriteLine("Hello, World!");

        tracerProvider.Dispose();
        meterProvider.Dispose();
        loggerFactory.Dispose();
    }
}

建议在环境变量中设置连接字符串:

APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>

此处详细介绍了配置连接字符串的更多选项: 配置 Application Insights 连接字符串

删除自定义配置

以下方案是可选的,适用于高级用户。

  • 如果你还有更多对TelemetryClient的引用(该引用用于手动记录遥测),应将其删除。

  • 删除通过 自定义 添加的任何筛选或扩充。 配置引用它们。

  • 删除任何 Visual Studio 工件

    如果使用 Visual Studio 载入 Application Insights,则可以在项目中留下更多文件。

    • ConnectedService.json 可能与 Application Insights 资源有关联。

    • [Your project's name].csproj 可能包含对 Application Insights 资源的引用:

      <ApplicationInsightsResourceId>/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/Default-ApplicationInsights-ChinaNorth/providers/microsoft.insights/components/WebApplication4</ApplicationInsightsResourceId>
      

WorkerService

若要将遥测数据发送到 Application Insights,必须将 Azure Monitor 导出程序添加到所有三个信号的配置中。

Program.cs

下面的代码示例扩展了上一个示例。 它现在收集遥测数据并将其发送到 Application Insights。

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = Host.CreateApplicationBuilder(args);
        builder.Services.AddHostedService<Worker>();

        builder.Services.AddOpenTelemetry()
            .WithTracing(builder =>
            {
                builder.AddHttpClientInstrumentation();
                builder.AddSqlClientInstrumentation();
                builder.AddAzureMonitorTraceExporter();
            })
            .WithMetrics(builder =>
            {
                builder.AddHttpClientInstrumentation();
                builder.AddAzureMonitorMetricExporter();
            });

        builder.Logging.AddOpenTelemetry(logging => logging.AddAzureMonitorLogExporter());

        var host = builder.Build();
        host.Run();
    }
}

建议在环境变量中设置连接字符串:

APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>

此处详细介绍了配置连接字符串的更多选项: 配置 Application Insights 连接字符串

更多配置

Application Insights 通过 ApplicationInsightsServiceOptions提供更多配置选项。

Application Insights 设置 OpenTelemetry 替代项
AddAutoCollectedMetricExtractor N/A
应用程序版本 在资源上设置“service.version”
连接字符串(ConnectionString) 请参阅有关配置连接字符串 的说明
依赖项收集选项 N/A. 若要自定义依赖项,请查看适用于检测库的可用配置选项。
DeveloperMode N/A
启用自适应采样 N/A. 仅支持固定速率采样。
启用应用服务心跳遥测模块 N/A
启用Azure实例元数据遥测模块 N/A
启用依赖追踪遥测模块 请参阅有关筛选跟踪的说明。
启用诊断遥测模块 N/A
启用事件计数器集合模块 (EnableEventCounterCollectionModule) N/A
EnableHeartbeat N/A
EnablePerformanceCounterCollectionModule N/A
EnableQuickPulseMetricStream AzureMonitorOptions.EnableLiveMetrics
端点地址 使用 ConnectionString。
InstrumentationKey 使用 ConnectionString。

删除自定义配置

以下方案是可选的,适用于高级用户。

  • 如果对用于TelemetryClient数据的引用更多,则应删除这些引用。

  • 如果在自定义筛选或增强方面添加了任何自定义TelemetryProcessorTelemetryInitializer,则应将其删除。 可以在你的 ServiceCollection中查找参考。

    builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
    
    builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
    
  • 删除任何 Visual Studio 工件

    如果使用 Visual Studio 载入 Application Insights,则可以在项目中留下更多文件。

    • Properties/ServiceDependencies 目录可能包含对 Application Insights 资源的引用。

小窍门

我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。

后续步骤

示例项目

小窍门

我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。

Support