本指南提供将应用程序从使用 Application Insights SDK(经典 API)迁移到 Azure Monitor OpenTelemetry 的分步说明。
预期使用 Azure Monitor OpenTelemetry 监测工具的体验与 Application Insights SDK 类似。 有关详细信息和功能比较,请参阅 功能的发布状态。
- ASP.NET 核心迁移到 Azure Monitor OpenTelemetry 发行版。 (
Azure.Monitor.OpenTelemetry.AspNetCoreNuGet 包) - ASP.NET、控制台和 WorkerService 迁移到 Azure Monitor OpenTelemetry 导出程序。 (
Azure.Monitor.OpenTelemetry.ExporterNuGet 包)
如果开始使用 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
删除 NuGet 包
从
Microsoft.ApplicationInsights.AspNetCore删除csproj包。dotnet remove package Microsoft.ApplicationInsights.AspNetCore删除初始化代码和自定义项
删除对代码库中 Application Insights 类型的任何引用。
小窍门
删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。
从您的
ServiceCollection中移除 Application Insights,方法是删除以下行:builder.Services.AddApplicationInsightsTelemetry();从
ApplicationInsights中删除appsettings.json部分。{ "ApplicationInsights": { "ConnectionString": "<YOUR-CONNECTION-STRING>" } }
清理和生成
检查 bin 目录,验证是否删除了对
Microsoft.ApplicationInsights.*的所有引用。测试应用程序
验证应用程序是否没有意外的后果。
ASP.NET
删除 NuGet 包
从
Microsoft.AspNet.TelemetryCorrelation和Microsoft.ApplicationInsights.*中删除csproj包以及任何packages.config包。删除
ApplicationInsights.config文件,从应用程序的
Web.config文件中删除分区。首次将 ApplicationInsights 添加到项目时,会自动将两个 HttpModule 添加到 web.config。
应删除对
TelemetryCorrelationHttpModule和ApplicationInsightsWebTracking的任何引用。 如果将 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 的任何 程序集版本重定向。
删除初始化代码和自定义项
删除对代码库中 Application Insights 类型的任何引用。
小窍门
删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。
删除对
TelemetryConfiguration或TelemetryClient的引用。 它是应用程序启动的一部分,用于初始化 Application Insights SDK。以下方案是可选的,适用于高级用户。
删除 JavaScript 代码片段
如果添加了 JavaScript SDK 以收集客户端遥测数据,也可以将其删除,尽管它在不使用 .NET SDK 的情况下继续工作。 有关要删除的内容的完整代码示例,请查看 JavaScript SDK 的载入指南。
删除任何 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>
清理和生成
检查 bin 目录,验证是否删除了对
Microsoft.ApplicationInsights.的所有引用。测试应用程序
验证应用程序是否没有意外的后果。
Console
删除 NuGet 包
从你的
Microsoft.ApplicationInsights.*和csproj中删除任何packages.config包。dotnet remove package Microsoft.ApplicationInsights删除初始化代码和自定义项
删除对代码库中 Application Insights 类型的任何引用。
小窍门
删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。
删除对
TelemetryConfiguration或TelemetryClient的引用。 在应用程序启动时,应该初始化 Application Insights SDK。var config = TelemetryConfiguration.CreateDefault(); var client = new TelemetryClient(config);
小窍门
如果您使用
AddApplicationInsightsTelemetryWorkerService()将 Application Insights 添加到你的ServiceCollection帐户,请查看 WorkerService 选项卡。清理和生成
检查 bin 目录,验证是否删除了对
Microsoft.ApplicationInsights.的所有引用。测试应用程序
验证应用程序是否没有意外的后果。
WorkerService
删除 NuGet 包
从
Microsoft.ApplicationInsights.WorkerService删除csproj包。dotnet remove package Microsoft.ApplicationInsights.WorkerService删除初始化代码和自定义项
删除对代码库中 Application Insights 类型的任何引用。
小窍门
删除 Application Insights 包后,可以重新生成应用程序以获取需要删除的引用列表。
从您的
ServiceCollection中移除 Application Insights,方法是删除以下行:builder.Services.AddApplicationInsightsTelemetryWorkerService();从
ApplicationInsights中删除appsettings.json部分。{ "ApplicationInsights": { "ConnectionString": "<YOUR-CONNECTION-STRING>" } }
清理和生成
检查 bin 目录,验证是否删除了对
Microsoft.ApplicationInsights.*的所有引用。测试应用程序
验证应用程序是否没有意外的后果。
小窍门
我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。
启用 OpenTelemetry
计划更新连接字符串,以在确认迁移成功后将遥测数据发送到原始资源。
ASP.NET Core
安装 Azure Monitor 发行版
我们的 Azure Monitor 发行版通过包括 OpenTelemetry 检测库来自动遥测,用于收集跟踪、指标、日志和异常,并允许收集自定义遥测。
安装 Azure Monitor 发行版会将 OpenTelemetry SDK 作为依赖项。
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore添加和配置 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
通过 Azure Monitor 安装 OpenTelemetry SDK
安装 Azure Monitor 导出程序会将 OpenTelemetry SDK 作为依赖项。
dotnet add package Azure.Monitor.OpenTelemetry.Exporter将 OpenTelemetry 配置为应用程序启动的一部分
必须在应用程序启动时配置 OpenTelemery SDK,通常位于
Global.asax.cs. OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 您的应用程序启动时需要配置每个信号。 应为应用程序创建一次TracerProvider、MeterProvider和ILoggerFactory,并在应用程序关闭时释放。
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
通过 Azure Monitor 安装 OpenTelemetry SDK
安装 Azure Monitor 导出程序 会将 OpenTelemetry SDK 作为依赖项。
dotnet add package Azure.Monitor.OpenTelemetry.Exporter将 OpenTelemetry 配置为应用程序启动的一部分
必须在应用程序启动时配置 OpenTelemery SDK,通常位于
Program.cs. OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 您的应用程序启动时需要配置每个信号。 应为应用程序创建一次TracerProvider、MeterProvider和ILoggerFactory,并在应用程序关闭时释放。
下面的代码示例演示了一个简单的示例,仅用于显示基础知识。 此时不会收集任何遥测数据。
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
通过 Azure Monitor 安装 OpenTelemetry SDK
安装 Azure Monitor 导出程序 会将 OpenTelemetry SDK 作为依赖项。
dotnet add package Azure.Monitor.OpenTelemetry.Exporter还必须安装 OpenTelemetry 扩展托管 包。
dotnet add package OpenTelemetry.Extensions.Hosting将 OpenTelemetry 配置为应用程序启动的一部分
必须在应用程序启动时配置 OpenTelemery SDK,通常位于
Program.cs. OpenTelemetry 有三个信号的概念:跟踪、指标和日志。 您的应用程序启动时需要配置每个信号。 应为应用程序创建一次TracerProvider、MeterProvider和ILoggerFactory,并在应用程序关闭时释放。
下面的代码示例演示了一个简单的示例,仅用于显示基础知识。 此时不会收集任何遥测数据。
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 Core、HttpClient 和 SQLClient 的 .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
可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。 建议使用以下库:
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 自述文件
OpenTelemetry.Instrumentation.Http 可用于收集出站 http 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测。
dotnet add package OpenTelemetry.Instrumentation.Http此处提供了完整的入门指南: OpenTelemetry.Instrumentation.Http README
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
可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。 建议使用以下库:
OpenTelemetry.Instrumentation.Http 可用于收集出站 http 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测。
dotnet add package OpenTelemetry.Instrumentation.Http此处提供了完整的入门指南: OpenTelemetry.Instrumentation.Http README
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
可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。 建议使用以下库:
OpenTelemetry.Instrumentation.Http 可用于收集出站 http 依赖项的遥测数据。 Azure Monitor 将其映射到 依赖项遥测。
dotnet add package OpenTelemetry.Instrumentation.Http此处提供了完整的入门指南: OpenTelemetry.Instrumentation.Http README
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。 |
删除自定义配置
以下方案是可选的,适用于高级用户。
如果在自定义筛选或增强方面添加了任何自定义
TelemetryProcessor或TelemetryInitializer,则应将其删除。 可以在你的ServiceCollection中查找参考。builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();删除任何 Visual Studio 工件
如果使用 Visual Studio 载入 Application Insights,则可以在项目中留下更多文件。
-
Properties/ServiceDependencies目录可能包含对 Application Insights 资源的引用。
-
小窍门
我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。
后续步骤
- 若要查看常见问题解答 (FAQ),请参阅 从 .NET Application Insights SDK 迁移到 Azure Monitor OpenTelemetry 的常见问题解答
- OpenTelemetry SDK 入门指南
- OpenTelemetry ASP.NET Core 项目的示例
- C# 和 .NET 日志记录
- Azure Monitor OpenTelemetry ASP.NET Core 入门
示例项目
- ASP.NET 核心: Azure Monitor 发行版演示项目
- ASP.NET: OpenTelemetry 的示例 ASP.NET 项目
- 控制台
小窍门
我们的产品组正在积极寻求有关本文档的反馈。 提供反馈给 otel@microsoft.com 或查看 支持 部分。
Support
- 如有 Azure 支持方面的问题,请提交 Azure 支持工单。
- 有关 OpenTelemetry 问题,请直接与 OpenTelemetry .NET 社区联系。
- 有关与 Azure Monitor 导出程序相关的未解决问题列表,请参阅 GitHub 问题页。