你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
从 .NET Application Insights SDK 迁移到 Azure Monitor OpenTelemetry
本指南提供将各种 .NET 应用程序从 Application Insights 软件开发工具包 (SDK) 迁移到 Azure Monitor OpenTelemetry 的分步说明。
预期 Azure Monitor OpenTelemetry 检测与 Application Insights SDK 类似。 有关详细信息和功能比较,请参阅功能的发布状态。
- ASP.NET Core 迁移到 Azure Monitor OpenTelemetry 发行版。 (
Azure.Monitor.OpenTelemetry.AspNetCore
NuGet 包) - ASP.NET、控制台和 WorkerService 迁移到 Azure Monitor OpenTelemetry 导出程序。 (
Azure.Monitor.OpenTelemetry.Exporter
NuGet 包)
如果刚开始使用 Application Insights 且不需要从 Classic API 迁移,请参阅启用 Azure Monitor OpenTelemetry。
先决条件
- 已使用 Application Insights 检测、无需进行任何自定义的 ASP.NET Core Web 应用程序
- .NET 的主动支持版本
删除 Application Insights SDK
注意
在继续执行这些步骤之前,应确认应用程序当前有备份。
删除 NuGet 包
从
csproj
中删除Microsoft.ApplicationInsights.AspNetCore
包。dotnet remove package Microsoft.ApplicationInsights.AspNetCore
删除初始化代码和自定义项
删除对代码库中 Application Insights 类型的任何引用。
提示
删除 Application Insights 包后,可以重新构建应用程序以获取需要删除的引用列表。
通过删除以下行从
ServiceCollection
中删除 Application Insights:builder.Services.AddApplicationInsightsTelemetry();
从
appsettings.json
中删除ApplicationInsights
分区。{ "ApplicationInsights": { "ConnectionString": "<Your Connection String>" } }
清理和构建
检查 bin 目录,验证是否删除了对
Microsoft.ApplicationInsights.*
的所有引用。测试应用程序
验证应用程序是否没有意外的后果。
启用 OpenTelemetry
计划更新连接字符串,以便在确认迁移成功后将遥测数据发送到原始资源。
安装 Azure Monitor 发行版
Azure Monitor 发行版通过包含用于收集跟踪、指标、日志和异常的 OpenTelemetry 检测库来实现自动遥测,并允许收集自定义遥测数据。
安装 Azure Monitor 发行版时,系统会将 OpenTelemetry SDK 作为依赖项。
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
同时添加和配置 OpenTelemetry 和 Azure Monitor
OpenTelemery SDK(通常位于
Program.cs
中)必须在应用程序启动时配置为ServiceCollection
的一部分。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 连接字符串。
安装和配置检测库
可以向项目添加检测库,以便自动收集有关特定组件或依赖项的遥测数据。
发行版中包含以下库。
自定义检测库
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;
});
});
配置 Azure Monitor
Application Insights 通过 ApplicationInsightsServiceOptions
提供更多配置选项。
Application Insights 设置 | OpenTelemetry 替代项 |
---|---|
AddAutoCollectedMetricExtractor | 空值 |
ApplicationVersion | 在资源上设置“service.version” |
ConnectionString | 请参阅有关配置连接字符串的说明。 |
DependencyCollectionOptions | 不适用。 若要自定义依赖项,请查看适用的检测库的可用配置选项。 |
DeveloperMode | 空值 |
EnableActiveTelemetryConfigurationSetup | 空值 |
EnableAdaptiveSampling | 不适用。 仅支持固定速率采样。 |
EnableAppServicesHeartbeatTelemetryModule | 空值 |
EnableAuthenticationTrackingJavaScript | 空值 |
EnableAzureInstanceMetadataTelemetryModule | 空值 |
EnableDependencyTrackingTelemetryModule | 请参阅有关筛选跟踪的说明。 |
EnableDiagnosticsTelemetryModule | 空值 |
EnableEventCounterCollectionModule | 空值 |
EnableHeartbeat | 空值 |
EnablePerformanceCounterCollectionModule | 空值 |
EnableQuickPulseMetricStream | AzureMonitorOptions.EnableLiveMetrics |
EnableRequestTrackingTelemetryModule | 请参阅有关筛选跟踪的说明。 |
EndpointAddress | 使用 ConnectionString。 |
InstrumentationKey | 使用 ConnectionString。 |
RequestCollectionOptions | 不适用。 请参阅 OpenTelemetry.Instrumentation.AspNetCore 选项。 |
删除自定义配置
以下方案是可选方案,仅适用于高级用户。
如果对可用于手动记录遥测数据的
TelemetryClient
的引用有任何多余,则应删除这些多余引用。如果以自定义
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 资源。
常见问题解答
本部分适用于使用遥测初始值设定项或处理器的客户,或者针对经典 Application Insights API 编写自定义代码以创建自定义遥测数据的客户。
SDK API 如何映射到 OpenTelemetry 概念?
OpenTelemetry 是供应商中性可观测性框架。 OpenTelemetry SDK 或库中没有 Application Insights API。 在迁移之前,请务必了解一些 OpenTelemetry 的概念。
在 Application Insights 中,所有遥测数据都通过单个
TelemetryClient
和TelemetryConfiguration
管理。 在 OpenTelemetry 中,三个遥测信号(跟踪、指标和日志)都有其自己的配置。 无需外部库即可通过 .NET 运行时手动创建遥测数据。 有关详细信息,请参阅有关分布式跟踪、指标和日志记录的 .NET 指南。Application Insights 使用
TelemetryModules
自动收集应用程序的遥测数据。 相反,OpenTelemetry 使用检测库从特定组件(例如用于请求的 AspNetCore 和用于依赖项的 HttpClient)收集遥测数据。Application Insights 使用
TelemetryInitializers
通过其他信息丰富遥测数据或重写属性。 可使用 OpenTelemetry 编写处理器,从而自定义特定信号。 此外,许多 OpenTelemetry 检测库提供了Enrich
方法来自定义该特定组件生成的遥测数据。Application Insights 使用
TelemetryProcessors
筛选遥测数据。 OpenTelemetry 处理器还可用于对特定信号应用筛选规则。
Application Insights 遥测类型如何映射到 OpenTelemetry?
此表将 Application Insights 数据类型映射到 OpenTelemetry 概念及其 .NET 实现。
Azure Monitor 表 | Application Insights DataType | OpenTelemetry DataType | .NET 实现 |
---|---|---|---|
customEvents | EventTelemetry | 空值 | 空值 |
customMetrics | MetricTelemetry | 指标 | System.Diagnostics.Metrics.Meter |
dependencies | DependencyTelemetry | 范围(客户端、内部、使用者) | System.Diagnostics.Activity |
exceptions | ExceptionTelemetry | 异常 | System.Exception |
请求 | RequestTelemetry | 范围(服务器、生成者) | System.Diagnostics.Activity |
traces | TraceTelemetry | 日志 | Microsoft.Extensions.Logging.ILogger |
以下文档提供了更多信息。
Application Insights 采样概念如何映射到 OpenTelemetry?
虽然 Application Insights 提供了多个用于配置采样的选项,但 Azure Monitor 导出程序或 Azure Monitor 发行版仅提供固定速率采样。 只能采样请求和依赖项(OpenTelemetry 跟踪)。
有关如何配置采样的代码示例,请参阅我们的启用采样指南
遥测处理器和初始值设定项如何映射到 OpenTelemetry?
在 Application Insights .NET SDK 中,使用遥测处理器筛选和修改或放弃遥测数据。 使用遥测初始值设定项添加或修改自定义属性。 有关详细信息,请参阅 Azure Monitor 文档。 OpenTelemetry 将这些概念替换为活动或日志处理器,从而丰富和筛选遥测数据。
筛选跟踪
若要在 OpenTelemetry 中筛选遥测数据,可以采用活动处理器。 此示例等效于 Application Insights 示例,用于筛选遥测数据,如 Azure Monitor 文档中所述。 该示例说明了筛选不成功的依赖项调用的位置。
using System.Diagnostics;
using OpenTelemetry;
internal sealed class SuccessfulDependencyFilterProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
if (!OKtoSend(activity))
{
activity.ActivityTraceFlags &= ~ActivityTraceFlags.Recorded;
}
}
private bool OKtoSend(Activity activity)
{
return activity.Kind == ActivityKind.Client && activity.Status == ActivityStatusCode.Ok;
}
}
若要使用此处理器,需要在 AddAzureMonitorTraceExporter
之前创建 TracerProvider
并添加处理器。
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddProcessor(new SuccessfulDependencyFilterProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
筛选日志
ILogger
实现具有内置机制,可应用日志筛选。
通过此筛选,可以控制发送到每个已注册提供程序(包括 OpenTelemetryLoggerProvider
)的日志。 “OpenTelemetry”是用于配置筛选规则的 OpenTelemetryLoggerProvider
的别名。
以下示例将“Error”定义为默认 LogLevel
,并将“Warning”定义为用户定义的类别的最小 LogLevel
。
定义的这些规则仅适用于 OpenTelemetryLoggerProvider
。
builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);
有关详细信息,请阅读关于日志的 OpenTelemetry .NET 文档。
将自定义属性添加到跟踪
在 OpenTelemetry 中,可以使用活动处理器通过更多属性丰富遥测数据。 这类似于在 Application Insights 中使用遥测初始值设定项,你可在前者中修改遥测属性。
默认情况下,Azure Monitor 导出程序会将响应代码为 400 或更高的任何 HTTP 请求标记为失败。 但是,如果要将 400 视为成功,可以添加一个扩充活动处理器来设置活动的成功,并添加一个标签以包含更多遥测属性。 这类似于在 Application Insights 中使用初始值设定项添加或修改属性,如 Azure Monitor 文档中所述。
以下示例说明如何添加自定义属性并替代特定响应代码的默认行为:
using System.Diagnostics;
using OpenTelemetry;
/// <summary>
/// Custom Processor that overrides the default behavior of treating response codes >= 400 as failed requests.
/// </summary>
internal class MyEnrichingProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
if (activity.Kind == ActivityKind.Server)
{
int responseCode = GetResponseCode(activity);
if (responseCode >= 400 && responseCode < 500)
{
// If we set the Success property, the SDK won't change it
activity.SetStatus(ActivityStatusCode.Ok);
// Allow to filter these requests in the portal
activity.SetTag("Overridden400s", "true");
}
// else leave the SDK to set the Success property
}
}
private int GetResponseCode(Activity activity)
{
foreach (ref readonly var tag in activity.EnumerateTagObjects())
{
if (tag.Key == "http.response.status_code" && tag.Value is int value)
{
return value;
}
}
return 0;
}
}
若要使用此处理器,需要在 AddAzureMonitorTraceExporter
之前创建 TracerProvider
并添加处理器。
using OpenTelemetry.Trace;
public static void Main()
{
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Company.Product.Name")
.AddProcessor(new MyEnrichingProcessor())
.AddAzureMonitorTraceExporter()
.Build();
}
如何使用 OpenTelemetry 手动跟踪遥测数据?
发送跟踪 - 手动
Application Insights 中的跟踪存储为 RequestTelemetry
和 DependencyTelemetry
。 在 OpenTelemetry 中,跟踪通过 Activity
类建模为 Span
。
OpenTelemetry .NET 利用跟踪的 ActivitySource
和 Activity
类,这些类是 .NET 运行时的一部分。 此方法很独特,因为 .NET 实现将跟踪 API 直接集成到运行时本身。 System.Diagnostics.DiagnosticSource
包可让开发者用 ActivitySource
创建和管理 Activity
实例。 此方法可让你无需依赖外部库即可无缝将跟踪添加到 .NET 应用程序,从而应用 .NET 生态系统的内置功能。 有关更多详细信息,请参阅分布式跟踪检测演练。
下面介绍如何迁移手动跟踪:
注意
在 Application Insights 中,可以在每个遥测级别设置角色名称和角色实例。 但是,使用 Azure Monitor 导出程序时,无法在每个遥测级别进行自定义。 角色名称和角色实例是从 OpenTelemetry 资源中提取的,并应用于所有遥测数据。 有关详细信息,请阅读以下文档:设置云角色名称和云角色实例。
DependencyTelemetry
Application Insights DependencyTelemetry
用于为传出请求建模。 下面介绍如何将其转换为 OpenTelemetry:
Application Insights 示例:
DependencyTelemetry dep = new DependencyTelemetry
{
Name = "DependencyName",
Data = "https://www.example.com/",
Type = "Http",
Target = "www.example.com",
Duration = TimeSpan.FromSeconds(10),
ResultCode = "500",
Success = false
};
dep.Context.Cloud.RoleName = "MyRole";
dep.Context.Cloud.RoleInstance = "MyRoleInstance";
dep.Properties["customprop1"] = "custom value1";
client.TrackDependency(dep);
OpenTelemetry 示例:
var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Emit traces
using (var activity = activitySource.StartActivity("DependencyName", ActivityKind.Client))
{
activity?.SetTag("url.full", "https://www.example.com/");
activity?.SetTag("server.address", "www.example.com");
activity?.SetTag("http.request.method", "GET");
activity?.SetTag("http.response.status_code", "500");
activity?.SetTag("customprop1", "custom value1");
activity?.SetStatus(ActivityStatusCode.Error);
activity?.SetEndTime(activity.StartTimeUtc.AddSeconds(10));
}
RequestTelemetry
Application Insights RequestTelemetry
对传入请求建模。 下面介绍如何将其迁移到 OpenTelemetry:
Application Insights 示例:
RequestTelemetry req = new RequestTelemetry
{
Name = "RequestName",
Url = new Uri("http://example.com"),
Duration = TimeSpan.FromSeconds(10),
ResponseCode = "200",
Success = true,
Properties = { ["customprop1"] = "custom value1" }
};
req.Context.Cloud.RoleName = "MyRole";
req.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackRequest(req);
OpenTelemetry 示例:
var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Emit traces
using (var activity = activitySource.StartActivity("RequestName", ActivityKind.Server))
{
activity?.SetTag("url.scheme", "https");
activity?.SetTag("server.address", "www.example.com");
activity?.SetTag("url.path", "/");
activity?.SetTag("http.response.status_code", "200");
activity?.SetTag("customprop1", "custom value1");
activity?.SetStatus(ActivityStatusCode.Ok);
}
自定义操作跟踪
在 Application Insights 中,使用 StartOperation
和 StopOperation
方法跟踪自定义操作。 在 OpenTelemetry .NET 中使用 ActivitySource
和 Activity
实现此目的。 对于包含 ActivityKind.Server
和 ActivityKind.Consumer
的操作,Azure Monitor 导出程序将生成 RequestTelemetry
。 对于 ActivityKind.Client
、ActivityKind.Producer
以及 ActivityKind.Internal
,它将生成 DependencyTelemetry
。 有关自定义操作跟踪的详细信息,请参阅 Azure Monitor 文档。 有关在 .NET 中使用 ActivitySource
和 Activity
的详细信息,请参阅 .NET 分布式跟踪检测演练。
下面是有关如何为自定义操作启动和停止活动的示例:
using System.Diagnostics;
using OpenTelemetry;
var activitySource = new ActivitySource("Company.Product.Name");
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(activitySource.Name)
.AddAzureMonitorTraceExporter()
.Build();
// Start a new activity
using (var activity = activitySource.StartActivity("CustomOperation", ActivityKind.Server))
{
activity?.SetTag("customTag", "customValue");
// Perform your custom operation logic here
// No need to explicitly call Activity.Stop() because the using block automatically disposes the Activity object, which stops it.
}
发送日志
Application Insights 中的日志存储为 TraceTelemetry
和 ExceptionTelemetry
。
TraceTelemetry
在 OpenTelemetry 中,日志记录通过 ILogger
接口集成。 下面介绍如何迁移 TraceTelemetry
:
Application Insights 示例:
TraceTelemetry traceTelemetry = new TraceTelemetry
{
Message = "hello from tomato 2.99",
SeverityLevel = SeverityLevel.Warning,
};
traceTelemetry.Context.Cloud.RoleName = "MyRole";
traceTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackTrace(traceTelemetry);
OpenTelemetry 示例:
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddOpenTelemetry(logging =>
{
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
}));
// Create a new instance `ILogger` from the above LoggerFactory
var logger = loggerFactory.CreateLogger<Program>();
// Use the logger instance to write a new log
logger.FoodPrice("tomato", 2.99);
internal static partial class LoggerExtensions
{
[LoggerMessage(LogLevel.Warning, "Hello from `{name}` `{price}`.")]
public static partial void FoodPrice(this ILogger logger, string name, double price);
}
ExceptionTelemetry
Application Insights 使用 ExceptionTelemetry
记录异常。 下面介绍如何迁移到 OpenTelemetry:
Application Insights 示例:
ExceptionTelemetry exceptionTelemetry = new ExceptionTelemetry(new Exception("Test exception"))
{
SeverityLevel = SeverityLevel.Error
};
exceptionTelemetry.Context.Cloud.RoleName = "MyRole";
exceptionTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
exceptionTelemetry.Properties["customprop1"] = "custom value1";
client.TrackException(exceptionTelemetry);
OpenTelemetry 示例:
var resourceAttributes = new Dictionary<string, object>
{
{ "service.name", "MyRole" },
{ "service.instance.id", "MyRoleInstance" }
};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
using var loggerFactory = LoggerFactory.Create(builder => builder
.AddOpenTelemetry(logging =>
{
logging.SetResourceBuilder(resourceBuilder);
logging.AddAzureMonitorLogExporter();
}));
// Create a new instance `ILogger` from the above LoggerFactory.
var logger = loggerFactory.CreateLogger<Program>();
try
{
// Simulate exception
throw new Exception("Test exception");
}
catch (Exception ex)
{
logger?.LogError(ex, "An error occurred");
}
发送指标
Application Insights 中的指标存储为 MetricTelemetry
。 在 OpenTelemetry 中,指标从 System.Diagnostics.DiagnosticSource
包作为 Meter
进行建模。
Application Insights 同时具有非预聚合 (TrackMetric()
) 和预聚合 (GetMetric().TrackValue()
) 指标 API。 与 OpenTelemetry 不同,Application Insights 没有检测的概念。 对于所有指标情况,Application Insights 具有相同的 API。
另一方面,OpenTelemetry 要求用户首先根据指标的实际语义选择合适的指标检测。 例如,如果打算计算某些内容(例如收到的服务器请求总数等),则应使用 OpenTelemetry Counter。 如果打算计算各种百分位数(如服务器延迟的 P99 值),则应使用 OpenTelemetry 直方图检测。 由于 Application Insights 和 OpenTelemetry 之间的这一基本差异,没有对它们进行直接比较。
与 Application Insights 不同,OpenTelemetry 不提供用于扩充或筛选指标的内置机制。 在 Application Insights 中,遥测处理器和初始值设定项可用于修改或放弃指标,但 OpenTelemetry 中不提供此功能。
此外,OpenTelemetry 不支持直接发送原始指标,因为没有 Application Insights 中发现的 TrackMetric()
功能的等效项。
从 Application Insights 迁移到 OpenTelemetry 涉及将所有使用的 Application Insights 指标 API 替换为 OpenTelemetry API。 你需要了解各种 OpenTelemetry 检测及其语义。
提示
直方图是最通用且最接近 Application Insights GetMetric().TrackValue()
API 的等效项。 可以将 Application Insights 指标 API 替换为直方图,以实现相同的目的。
其他遥测数据类型
CustomEvents
OpenTelemetry 中不支持。
Application Insights 示例:
TelemetryClient.TrackEvent()
AvailabilityTelemetry
OpenTelemetry 中不支持。
Application Insights 示例:
TelemetryClient.TrackAvailability()
PageViewTelemetry
OpenTelemetry 中不支持。
Application Insights 示例:
TelemetryClient.TrackPageView()
我是否可以获取控制台和辅助角色服务应用程序的实时指标?
我们建议对控制台和辅助角色服务应用程序使用 Azure Monitor OpenTelemetry Exporter,它不包含实时指标。
后续步骤
支持
- 有关 Azure 支持问题,可打开 Azure 支持票证。
- 有关 OpenTelemetry 问题,请直接与 OpenTelemetry .NET 社区联系。
- 有关与 Azure Monitor 导出程序相关的未解决问题列表,请参阅 GitHub 问题页。