共用方式為


從 .NET Application Insights SDK 遷移至 Azure 監視器 OpenTelemetry

本指南提供使用 Application Insights 軟體開發套件 (SDK) 將各種 .NET 應用程式從遷移至 Azure 監視器 OpenTelemetry 的逐步指示。

使用 Azure 監視器 OpenTelemetry 檢測與 Application Insights SDK 的體驗類似。 如需詳細資訊和功能比較,請參閱功能的版本狀態

如果您開始使用 Application Insights,且不需要從 Classic API 遷移,請參閱 啟用 Azure 監視器 OpenTelemetry

必要條件

  • ASP.NET Core Web 應用程式已使用 Application Insights 檢測,沒有任何自訂項目
  • .NET 的主動支援版本

提示

我們的產品群組正在積極尋求此文件的意見反應。 提供意見反應給 otel@microsoft.com,或參閱 支援 章節。

移除 Application Insights SDK

注意

在繼續這些步驟之前,您應該先確認擁有目前應用程式的備份。

  1. 移除 NuGet 套件

    csproj 移除 Microsoft.ApplicationInsights.AspNetCore 套件。

    dotnet remove package Microsoft.ApplicationInsights.AspNetCore
    
  2. 移除初始化程式碼和自訂內容

    移除程式碼基底中 Application Insights 類型的任何參考。

    提示

    移除 Application Insights 套件之後,您可以重新建置應用程式,以取得需要移除的參考清單。

    • 刪除下列這一行,以從 ServiceCollection 移除 Application Insights:

      builder.Services.AddApplicationInsightsTelemetry();
      
    • appsettings.json 移除 ApplicationInsights 區段。

      {
          "ApplicationInsights": {
              "ConnectionString": "<Your Connection String>"
          }
      }
      
  3. 清除和建置

    檢查您的 bin 目錄,以驗證已移除所有 Microsoft.ApplicationInsights.* 參考。

  4. 測試您的應用程式

    確認您的應用程式沒有任何非預期的結果。

提示

我們的產品群組正在積極尋求此文件的意見反應。 提供意見反應給 otel@microsoft.com,或參閱 支援 章節。

啟用 OpenTelemetry

建議您在遵循這些指示時,建立開發資源,並使用其連接字串

顯示 Application Insights 概觀和連接字串的螢幕擷取畫面。

計劃以更新連接字串,以在確認成功遷移之後,將遙測資料傳送至原始資源。

  1. 安裝 Azure 監視器發行版本

    我們的 Azure 監視器發行版本藉由包含 OpenTelemetry 檢測程式庫來收集追蹤、計量、記錄和例外狀況,以啟用自動遙測,並允許收集自訂遙測。

    安裝 Azure 監視器發行版本會將 OpenTelemetry SDK 作為相依性。

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
    
  2. 新增和設定 OpenTelemetry 和 Azure 監視器

    OpenTelemery SDK 必須在應用程式啟動時設定為 ServiceCollection 的一部分,通常是在 Program.cs 中。

    OpenTelemetry 有三個訊號概念:追蹤、計量和記錄。 Azure 監視器發行版本會設定這些訊號。

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 連接字串

提示

我們的產品群組正在積極尋求此文件的意見反應。 提供意見反應給 otel@microsoft.com,或參閱 支援 章節。

安裝和設定檢測程式庫

可以將檢測程式庫新增至您的專案,以自動收集特定元件或相依性的遙測資料。

發行版本中包含下列程式庫。

自訂檢測程式庫

Azure 監視器散發行版本包含適用於 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

當套件仍處於搶先版 (Beta) 時,我們販售 SQLClient 檢測。 當它到達穩定版本時,我們會將其納入為標準套件參考。 在此之前,若要自訂 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 監視器

Application Insights 透過 ApplicationInsightsServiceOptions 提供更多設定選項。

Application Insights 設定 OpenTelemetry 選項
AddAutoCollectedMetricExtractor N/A
ApplicationVersion 在資源上設定 [service.version]
ConnectionString 請參閱設定連接字串上的指示
DependencyCollectionOptions N/A。 若要自訂相依性,請檢閱適用於檢測程式庫的可用設定選項。
DeveloperMode N/A
EnableActiveTelemetryConfigurationSetup N/A
EnableAdaptiveSampling N/A。 僅支援固定取樣率。
EnableAppServicesHeartbeatTelemetryModule N/A
EnableAuthenticationTrackingJavaScript N/A
EnableAzureInstanceMetadataTelemetryModule N/A
EnableDependencyTrackingTelemetryModule 請參閱篩選追蹤的指示。
EnableDiagnosticsTelemetryModule N/A
EnableEventCounterCollectionModule N/A
EnableHeartbeat N/A
EnablePerformanceCounterCollectionModule N/A
EnableQuickPulseMetricStream AzureMonitorOptions.EnableLiveMetrics
EnableRequestTrackingTelemetryModule 請參閱篩選追蹤的指示。
EndpointAddress 使用 ConnectionString。
InstrumentationKey 使用 ConnectionString。
RequestCollectionOptions N/A。 請參閱 OpenTelemetry.Instrumentation.AspNetCore 選項。

移除自訂組態

下列是選用案例,僅適用於進階使用者。

  • 如果您有任何對 TelemetryClient 的參考,其可能使用 以手動記錄遙測資料,則應該移除這些參考。

  • 如果您以 TelemetryProcessorTelemetryInitializer 的形式新增任何 自訂篩選或擴充,則應將其移除。 您可以在您的 ServiceCollection 中找到這些項目。

    builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
    
    builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
    
  • 移除 JavaScript 程式碼片段

    如果您使用 Application Insights .NET SDK 所提供的程式碼片段,也必須將其移除。 如需要移除之專案的完整程式碼範例,請檢閱啟用 Web 應用程式的用戶端遙測指南。

    如果您已新增 JavaScript SDK 來收集用戶端遙測資料,則也可以移除,儘管其在沒有 .NET SDK 的情況下持續運作。 如需要移除內容的完整程式碼範例,請檢閱 JavaScript SDK 的上線指南

  • 移除任何 Visual Studio Artifacts

    如果您是使用 Visual Studio 上線至 Application Insights,您可以在專案中留下更多檔案。

    • Properties/ServiceDependencies 目錄可能有 Application Insights 資源的參考。

提示

我們的產品群組正在積極尋求此文件的意見反應。 提供意見反應給 otel@microsoft.com,或參閱 支援 章節。

常見問題集

本節適用於使用遙測初始設定式或處理器的客戶,或針對傳統 Application Insights API 撰寫自訂程式碼來建立自訂遙測。

SDK API 如何對應至 OpenTelemetry 概念?

OpenTelemetry 是廠商中性的可檢視性架構。 OpenTelemetry SDK 或連結庫中沒有 Application Insights API。 在遷移之前,請務必了解一些 OpenTelemetry 的概念。

  • 在 Application Insights 中,所有遙測都是透過單一 TelemetryClientTelemetryConfiguration 進行管理。 在 OpenTelemetry 中,三個遙測訊號 (追蹤、計量和記錄) 有各自的設定。 您可以透過 .NET 運行時間手動建立遙測,而不需要外部程式庫。 如需詳細資訊,請參閱分散式追蹤計量記錄的 .NET 指南。

  • Application Insights 使用 TelemetryModules 自動收集應用程式的遙測資料。 相反,OpenTelemetry 會使用 Instrumentation 程式庫 收集特定元件的遙測資料 (例如要求 AspNetCore,以及相依性 HttpClient)。

  • Application Insights 使用 TelemetryInitializers 以其他資訊擴充遙測,或覆寫屬性。 使用 OpenTelemetry,您可以撰寫 Processor 來自訂特定訊號。 此外,許多 OpenTelemetry Instrumentation 程式庫都提供 Enrich 方法來自訂該特定元件所產生的遙測資料。

  • Application Insights 使用 TelemetryProcessors 來篩選遙測資料。 OpenTelemetry 處理器 也可以用來套用特定訊號上的篩選規則。

Application Insights 遙測類型如何對應至 OpenTelemetry?

下表會將 Application Insights 資料類型對應至 OpenTelemetry 概念及其 .NET 實作。

Azure 監視器資料表 Application Insights DataType OpenTelemetry DataType .NET 實作
customEvents EventTelemetry N/A N/A
customMetrics MetricTelemetry 計量 System.Diagnostics.Metrics.Meter
相依性 DependencyTelemetry Spans (用戶端、內部、取用者) System.Diagnostics.Activity
例外狀況 ExceptionTelemetry 例外狀況 System.Exception
requests RequestTelemetry Spans (伺服器、產生者) System.Diagnostics.Activity
traces TraceTelemetry 記錄 Microsoft.Extensions.Logging.ILogger

下列文件提供更多資訊。

Application Insights 取樣概念如何對應至 OpenTelemetry?

雖然 Application Insights 提供多個選項來設定取樣,但 Azure 監視器匯出工具或 Azure 監視器發行版本只提供固定取樣率。 只能取樣 [要求][相依性] (OpenTelemetry Traces)。

如需如何設定取樣的程式碼範例,請參閱我們的啟用取樣指南

[遙測處理器] 和 [初始設定式] 如何對應至 OpenTelemetry?

在 Application Insights .NET SDK 中,使用遙測處理器來篩選和修改或修改,或捨棄遙測資料。 使用遙測初始設定式來新增或修改自訂屬性。 如需詳細資訊,請參閱 Azure 監視器文件。 OpenTelemetry 會將這些概念取代為活動或記錄處理器,以擴充和篩選遙測資料。

篩選追蹤

若要在 OpenTelemetry 中篩選遙測資料,您可以實作活動處理器。 此範例相當於 Application Insights 範例,以篩選遙測資料,如 Azure 監視器文件中所述。 此範例說明篩選不成功的相依性呼叫。

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;
    }
}

若要使用此處理器,您必須建立 TracerProvider,並在 AddAzureMonitorTraceExporter之前新增處理器。

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 監視器匯出工具會將回應碼為 400,或更新為失敗的任何 HTTP 要求加上旗標。 不過,如果您要將 400 視為成功,您可以新增擴充活動處理器,以將活動設定為成功,並新增標籤以包含更多遙測屬性。 類似於在 Application Insights 中使用初始設定式來新增或修改屬性,如 azure 監視器檔中所述。

以下範例說明如何新增自訂屬性,並覆寫特定回應碼的預設行為:

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;
    }
}

若要使用此處理器,您必須建立 TracerProvider,並在 AddAzureMonitorTraceExporter之前新增處理器。

using OpenTelemetry.Trace;

public static void Main()
{
    var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .AddSource("Company.Product.Name")
        .AddProcessor(new MyEnrichingProcessor())
        .AddAzureMonitorTraceExporter()
        .Build();
}

如何使用 OpenTelemetry 手動追蹤遙測?

傳送追蹤 - 手動

Application Insights 中的追蹤會儲存為 RequestTelemetryDependencyTelemetry。 在 OpenTelemetry中,追蹤會使用 Activity 類別模型化為 Span

OpenTelemetry .NET 利用 ActivitySourceActivity 類別進行追蹤,這是 .NET 執行階段的一部分。 這種方法很獨特,因為 .NET 實作會將追蹤 API 直接整合到執行階段本身。 System.Diagnostics.DiagnosticSource 套件可讓開發人員使用 ActivitySource 來建立和管理 Activity 執行個體。 此方法提供順暢的方式,讓您不需要依賴外部程式庫,即可將追蹤新增至 .NET 應用程式,並套用 .NET 生態系統的內建功能。 如需詳細資訊,請參閱分散式追蹤檢測逐步解說

以下是遷移手動追蹤的方式:

注意

在 Application Insights 中,角色名稱和角色執行個體可以在每個遙測層級設定。 不過,使用 Azure 監視器匯出工具,我們無法自訂每一個遙測層級。 角色名稱和角色執行個體會從 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 中,使用 StartOperationStopOperation方法追蹤自訂作業。 在 OpenTelemetry .NET 中使用 ActivitySourceActivity 來完成。 針對使用 ActivityKind.ServerActivityKind.Consumer 的作業,Azure 監視器匯出工具會產生 RequestTelemetry。 針對 ActivityKind.ClientActivityKind.ProducerActivityKind.Internal,會產生 DependencyTelemetry。 如需自訂作業追蹤的詳細資訊,請參閱 Azure 監視器文件。 如需在 .NET 中使用 ActivitySourceActivity 的詳細資訊,請參閱 .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 中的記錄會儲存為 TraceTelemetryExceptionTelemetry

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(loggerOptions =>
   {
       loggerOptions.SetResourceBuilder(resourceBuilder);
       loggerOptions.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(loggerOptions =>
   {
       loggerOptions.SetResourceBuilder(resourceBuilder);
       loggerOptions.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 計數器。 如果打算計算各種百分位數 (例如,伺服器延遲的 P99 值),則應該使用 OpenTelemetry 長條圖 進行檢測。 由於 Application Insights 與 OpenTelemetry 之間的這項基本差異,因此不會進行兩者之間的直接比較。

不同於 Application Insights,OpenTelemetry 不提供擴充或篩選計量的內建機制。 在 Application Insights 中,遙測處理器和初始設定式可用來修改或捨棄計量,但 OpenTelemetry 中無法使用此功能。

此外,OpenTelemetry 不支援直接傳送原始計量,因為 Application Insights 中找不到相當於 TrackMetric() 功能。

從 Application Insights 遷移至 OpenTelemetry 牽涉到將所有 Application Insights 計量 API 使用方式取代為 OpenTelemetry API。 需要了解各種 OpenTelemetry Instruments 及其語意。

提示

長條圖是最活用且最接近於 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()

下一步

提示

我們的產品群組正在積極尋求此文件的意見反應。 提供意見反應給 otel@microsoft.com,或參閱 支援 章節。

支援