Bagikan melalui


Migrasi dari .NET Application Insights SDK ke Azure Monitor OpenTelemetry

Panduan ini menyediakan instruksi langkah demi langkah untuk memigrasikan berbagai aplikasi .NET dari menggunakan kit pengembangan perangkat lunak (SDK) Application Insights ke Azure Monitor OpenTelemetry.

Harapkan pengalaman serupa dengan instrumentasi Azure Monitor OpenTelemetry seperti halnya SDK Application Insights. Untuk informasi selengkapnya dan perbandingan fitur demi fitur, lihat status rilis fitur.

  • ASP.NET Migrasi inti ke Distro OpenTelemetry Azure Monitor. (Azure.Monitor.OpenTelemetry.AspNetCore Paket NuGet)
  • ASP.NET, konsol, dan migrasi WorkerService ke Pengekspor OpenTelemetry Azure Monitor. (Azure.Monitor.OpenTelemetry.Exporter Paket NuGet)

Jika Anda mulai menggunakan Application Insights dan tidak perlu bermigrasi dari API Klasik, lihat Mengaktifkan Azure Monitor OpenTelemetry.

Prasyarat

Tip

Grup produk kami secara aktif mencari umpan balik tentang dokumentasi ini. Berikan umpan balik ke otel@microsoft.com atau lihat bagian Dukungan .

Menghapus Application Insights SDK

Catatan

Sebelum melanjutkan langkah-langkah ini, Anda harus mengonfirmasi bahwa Anda memiliki cadangan aplikasi saat ini.

  1. Menghapus paket NuGet

    Microsoft.ApplicationInsights.AspNetCore Hapus paket dari .csproj

    dotnet remove package Microsoft.ApplicationInsights.AspNetCore
    
  2. Hapus Kode Inisialisasi dan kustomisasi

    Hapus referensi apa pun ke jenis Application Insights di basis kode Anda.

    Tip

    Setelah menghapus paket Application Insights, Anda dapat membuat ulang aplikasi untuk mendapatkan daftar referensi yang perlu dihapus.

    • Hapus Application Insights dari Anda ServiceCollection dengan menghapus baris berikut:

      builder.Services.AddApplicationInsightsTelemetry();
      
    • Hapus bagian ApplicationInsights dari .appsettings.json

      {
          "ApplicationInsights": {
              "ConnectionString": "<Your Connection String>"
          }
      }
      
  3. Bersihkan dan Bangun

    Periksa direktori bin Anda untuk memvalidasi bahwa semua referensi Microsoft.ApplicationInsights.* telah dihapus.

  4. Menguji aplikasi Anda

    Verifikasi bahwa aplikasi Anda tidak memiliki konsekuensi yang tidak terduga.

Tip

Grup produk kami secara aktif mencari umpan balik tentang dokumentasi ini. Berikan umpan balik ke otel@microsoft.com atau lihat bagian Dukungan .

Aktifkan OpenTelemetry

Sebaiknya buat sumber daya pengembangan dan gunakan string koneksi saat mengikuti instruksi ini.

Cuplikan layar yang menunjukkan gambaran umum Application Insights dan string koneksi.

Rencanakan untuk memperbarui string koneksi untuk mengirim telemetri ke sumber daya asli setelah mengonfirmasi migrasi berhasil.

  1. Menginstal Distro Azure Monitor

    Azure Monitor Distro kami memungkinkan telemetri otomatis dengan menyertakan pustaka instrumentasi OpenTelemetry untuk mengumpulkan jejak, metrik, log, dan pengecualian, dan memungkinkan pengumpulan telemetri kustom.

    Menginstal Azure Monitor Distro menghadirkan OpenTelemetry SDK sebagai dependensi.

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
    
  2. Menambahkan dan mengonfigurasi OpenTelemetry dan Azure Monitor

    OpenTelemery SDK harus dikonfigurasi pada startup aplikasi sebagai bagian dari Anda ServiceCollection, biasanya di Program.cs.

    OpenTelemetry memiliki konsep tiga sinyal; Jejak, Metrik, dan Log. Azure Monitor Distro mengonfigurasi masing-masing sinyal ini.

Program.cs

Sampel kode berikut menunjukkan dasar-dasarnya.

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

Sebaiknya atur String Koneksi Anda dalam variabel lingkungan:

APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>

Opsi lainnya untuk mengonfigurasi String Koneksi dirinci di sini: Mengonfigurasi String Koneksi Application Insights.

Tip

Grup produk kami secara aktif mencari umpan balik tentang dokumentasi ini. Berikan umpan balik ke otel@microsoft.com atau lihat bagian Dukungan .

Menginstal dan mengonfigurasi pustaka instrumentasi

Pustaka instrumentasi dapat ditambahkan ke proyek Anda untuk mengumpulkan telemetri secara otomatis tentang komponen atau dependensi tertentu.

Pustaka berikut disertakan dalam Distro.

Menyesuaikan pustaka instrumentasi

Azure Monitor Distro mencakup instrumentasi OpenTelemetry .NET untuk ASP.NET Core, HttpClient, dan SQLClient. Anda dapat menyesuaikan instrumentasi yang disertakan ini atau menambahkan instrumentasi tambahan secara manual sendiri menggunakan API OpenTelemetry.

Berikut adalah beberapa contoh cara menyesuaikan instrumentasi:

Menyesuaikan 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);
    };
});
Menyesuaikan 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);
    };
});
Menyesuaikan SqlClientInstrumentationOptions

Kami menjajakan instrumentasi SQLClient dalam paket kami saat masih dalam versi beta. Ketika mencapai rilis yang stabil, kami menyertakannya sebagai referensi paket standar. Sampai saat itu, untuk menyesuaikan instrumentasi SQLClient, tambahkan OpenTelemetry.Instrumentation.SqlClient referensi paket ke proyek Anda dan gunakan API publiknya.

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

Mengonfigurasi Microsoft Azure Monitor

Application Insights menawarkan lebih banyak opsi konfigurasi melalui ApplicationInsightsServiceOptions.

Pengaturan Application Insights Alternatif OpenTelemetry
AddAutoCollectedMetricExtractor T/A
ApplicationVersion Atur "service.version" pada Sumber Daya
ConnectionString Lihat instruksi tentang mengonfigurasi String Koneksi.
DependencyCollectionOptions T/A. Untuk menyesuaikan dependensi, tinjau opsi konfigurasi yang tersedia untuk pustaka Instrumentasi yang berlaku.
DeveloperMode T/A
EnableActiveTelemetryConfigurationSetup T/A
EnableAdaptiveSampling T/A. Hanya pengambilan sampel laju tetap yang didukung.
EnableAppServicesHeartbeatTelemetryModule T/A
EnableAuthenticationTrackingJavaScript T/A
EnableAzureInstanceMetadataTelemetryModule T/A
EnableDependencyTrackingTelemetryModule Lihat petunjuk tentang pemfilteran Jejak.
EnableDiagnosticsTelemetryModule T/A
EnableEventCounterCollectionModule T/A
EnableHeartbeat T/A
EnablePerformanceCounterCollectionModule T/A
EnableQuickPulseMetricStream AzureMonitorOptions.EnableLiveMetrics
EnableRequestTrackingTelemetryModule Lihat petunjuk tentang pemfilteran Jejak.
EndpointAddress Gunakan ConnectionString.
InstrumentationKey Gunakan ConnectionString.
RequestCollectionOptions T/A. Lihat opsi OpenTelemetry.Instrumentation.AspNetCore.

Menghapus konfigurasi kustom

Skenario berikut bersifat opsional dan hanya berlaku untuk pengguna tingkat lanjut.

  • Jika Anda memiliki referensi lagi ke TelemetryClient, yang dapat digunakan untuk merekam telemetri secara manual, referensi tersebut harus dihapus.

  • Jika Anda menambahkan pemfilteran atau pengayaan kustom dalam bentuk kustom TelemetryProcessor atau TelemetryInitializer, pemfilteran kustom harus dihapus. Mereka dapat ditemukan di Anda ServiceCollection.

    builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
    
    builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
    
  • Hapus Cuplikan JavaScript

    Jika Anda menggunakan Cuplikan yang disediakan oleh Application Insights .NET SDK, cuplikan juga harus dihapus. Untuk sampel kode lengkap tentang apa yang harus dihapus, tinjau panduan mengaktifkan telemetri sisi klien untuk aplikasi web.

    Jika Anda menambahkan JavaScript SDK untuk mengumpulkan telemetri sisi klien, itu juga dapat dihapus meskipun terus berfungsi tanpa .NET SDK. Untuk sampel kode lengkap tentang apa yang harus dihapus, tinjau panduan onboarding untuk JavaScript SDK.

  • Menghapus Artefak Visual Studio apa pun

    Jika Anda menggunakan Visual Studio untuk onboarding ke Application Insights, Anda dapat memiliki lebih banyak file yang tersisa di proyek Anda.

    • Properties/ServiceDependencies direktori mungkin memiliki referensi ke sumber daya Application Insights Anda.

Tip

Grup produk kami secara aktif mencari umpan balik tentang dokumentasi ini. Berikan umpan balik ke otel@microsoft.com atau lihat bagian Dukungan .

Tanya jawab umum

Bagian ini ditujukan untuk pelanggan yang menggunakan inisialisasi atau prosesor telemetri, atau menulis kode kustom terhadap API Application Insights klasik untuk membuat telemetri kustom.

Bagaimana peta SDK API ke konsep OpenTelemetry?

OpenTelemetry adalah kerangka kerja pengamatan netral vendor. Tidak ada API Application Insights di SDK Atau pustaka OpenTelemetry. Sebelum bermigrasi, penting untuk memahami beberapa konsep OpenTelemetry.

  • Dalam Application Insights, semua telemetri dikelola melalui satu TelemetryClient dan TelemetryConfiguration. Di OpenTelemetry, masing-masing dari tiga sinyal telemetri (Jejak, Metrik, dan Log) memiliki konfigurasinya sendiri. Anda dapat membuat telemetri secara manual melalui runtime .NET tanpa pustaka eksternal. Untuk informasi selengkapnya, lihat panduan .NET tentang pelacakan terdistribusi, metrik, dan pengelogan.

  • Application Insights digunakan TelemetryModules untuk mengumpulkan telemetri secara otomatis untuk aplikasi Anda. Sebagai gantinya, OpenTelemetry menggunakan pustaka Instrumentasi untuk mengumpulkan telemetri dari komponen tertentu (seperti AspNetCore untuk Permintaan dan HttpClient untuk Dependensi).

  • Application Insights digunakan TelemetryInitializers untuk memperkaya telemetri dengan informasi tambahan atau untuk mengambil alih properti. Dengan OpenTelemetry, Anda dapat menulis Prosesor untuk menyesuaikan sinyal tertentu. Selain itu, banyak pustaka Instrumentasi OpenTelemetry menawarkan Enrich metode untuk menyesuaikan telemetri yang dihasilkan oleh komponen tertentu tersebut.

  • Application Insights digunakan TelemetryProcessors untuk memfilter telemetri. Prosesor OpenTelemetry juga dapat digunakan untuk menerapkan aturan pemfilteran pada sinyal tertentu.

Bagaimana jenis telemetri Application Insights dipetakan ke OpenTelemetry?

Tabel ini memetakan jenis data Application Insights ke konsep OpenTelemetry dan implementasi .NET-nya.

Tabel Azure Monitor Application Insights DataType OpenTelemetry DataType Implementasi .NET
customEvents EventTelemetry T/A T/A
customMetrics MetrikTelemetry Metrik System.Diagnostics.Metrics.Meter
dependensi DependencyTelemetry Rentang (Klien, Internal, Konsumen) System.Diagnostics.Activity
pengecualian ExceptionTelemetry Pengecualian System.Exception
permintaan RequestTelemetry Rentang (Server, Produser) System.Diagnostics.Activity
jejak TraceTelemetry Log Microsoft.Extensions.Logging.ILogger

Dokumen berikut ini menyediakan informasi selengkapnya.

Bagaimana konsep pengambilan sampel Application Insights dipetakan ke OpenTelemetry?

Meskipun Application Insights menawarkan beberapa opsi untuk mengonfigurasi pengambilan sampel, Pengekspor Azure Monitor atau Distro Azure Monitor hanya menawarkan pengambilan sampel laju tetap. Hanya Permintaan dan Dependensi (Jejak OpenTelemetry) yang dapat diambil sampelnya.

Untuk sampel kode yang merinci cara mengonfigurasi pengambilan sampel, lihat panduan kami Mengaktifkan Pengambilan Sampel

Bagaimana Prosesor Telemetri dan Penginisialisasi memetakan ke OpenTelemetry?

Di Application Insights .NET SDK, gunakan prosesor telemetri untuk memfilter dan memodifikasi atau membuang telemetri. Gunakan penginisialisasi telemetri untuk menambahkan atau mengubah properti kustom. Untuk informasi selengkapnya, lihat dokumentasi Azure Monitor. OpenTelemetry mengganti konsep-konsep ini dengan prosesor aktivitas atau log, yang memperkaya dan memfilter telemetri.

Pelacakan Pemfilteran

Untuk memfilter data telemetri di OpenTelemetry, Anda dapat menerapkan prosesor aktivitas. Contoh ini setara dengan contoh Application Insights untuk memfilter data telemetri seperti yang dijelaskan dalam dokumentasi Azure Monitor. Contoh ini mengilustrasikan di mana panggilan dependensi yang gagal difilter.

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

Untuk menggunakan prosesor ini, Anda perlu membuat TracerProvider dan menambahkan prosesor sebelum AddAzureMonitorTraceExporter.

using OpenTelemetry.Trace;

public static void Main()
{
    var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .AddProcessor(new SuccessfulDependencyFilterProcessor())
        .AddAzureMonitorTraceExporter()
        .Build();
}

Log Pemfilteran

ILoggerimplementasi memiliki mekanisme bawaan untuk menerapkan pemfilteran mencatat. Pemfilteran ini memungkinkan Anda mengontrol log yang dikirim ke setiap penyedia terdaftar, termasuk OpenTelemetryLoggerProvider. "OpenTelemetry" adalah alias untuk OpenTelemetryLoggerProvider, yang digunakan dalam mengonfigurasi aturan pemfilteran.

Contoh berikut mendefinisikan "Kesalahan" sebagai default LogLevel dan juga mendefinisikan "Peringatan" sebagai minimum LogLevel untuk kategori yang ditentukan pengguna. Aturan ini sebagaimana didefinisikan hanya berlaku untuk OpenTelemetryLoggerProvider.

builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);

Untuk informasi selengkapnya, silakan baca dokumentasi OpenTelemetry .NET pada log.

Menambahkan Properti Kustom ke Pelacakan

Di OpenTelemetry, Anda dapat menggunakan prosesor aktivitas untuk memperkaya data telemetri dengan lebih banyak properti. Ini mirip dengan menggunakan penginisialisasi telemetri di Application Insights, tempat Anda dapat memodifikasi properti telemetri.

Secara default, Pengekspor Azure Monitor menandai permintaan HTTP apa pun dengan kode respons 400 atau lebih besar sebagai gagal. Namun, jika Anda ingin memperlakukan 400 sebagai keberhasilan, Anda dapat menambahkan prosesor aktivitas yang memperkaya yang menetapkan keberhasilan pada aktivitas dan menambahkan tag untuk menyertakan lebih banyak properti telemetri. Ini mirip dengan menambahkan atau memodifikasi properti menggunakan penginisialisasi di Application Insights seperti yang dijelaskan dalam dokumentasi Azure Monitor.

Berikut adalah contoh cara menambahkan properti kustom dan mengambil alih perilaku default untuk kode respons tertentu:

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

Untuk menggunakan prosesor ini, Anda perlu membuat TracerProvider dan menambahkan prosesor sebelum AddAzureMonitorTraceExporter.

using OpenTelemetry.Trace;

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

Bagaimana cara melacak telemetri secara manual menggunakan OpenTelemetry?

Mengirim Jejak - Manual

Jejak dalam Application Insights disimpan sebagai RequestTelemetry dan DependencyTelemetry. Di OpenTelemetry, jejak dimodelkan sebagai Span menggunakan Activity kelas .

OpenTelemetry .NET menggunakan ActivitySource kelas dan Activity untuk pelacakan, yang merupakan bagian dari runtime .NET. Pendekatan ini khas karena implementasi .NET mengintegrasikan API pelacakan langsung ke dalam runtime itu sendiri. Paket ini System.Diagnostics.DiagnosticSource memungkinkan pengembang untuk menggunakan ActivitySource untuk membuat dan mengelola Activity instans. Metode ini menyediakan cara yang mulus untuk menambahkan pelacakan ke aplikasi .NET tanpa mengandalkan pustaka eksternal, menerapkan kemampuan bawaan ekosistem .NET. Untuk informasi lebih rinci, lihat panduan instrumentasi pelacakan terdistribusi.

Berikut cara memigrasikan pelacakan manual:

Catatan

Di Application Insights, nama peran dan instans peran dapat diatur pada tingkat per telemetri. Namun, dengan Pengekspor Azure Monitor, kami tidak dapat menyesuaikan pada tingkat per telemetri. Nama peran dan instans peran diekstrak dari sumber daya OpenTelemetry dan diterapkan di semua telemetri. Silakan baca dokumen ini untuk informasi selengkapnya: Atur nama peran cloud dan instans peran cloud.

DependencyTelemetry

Application Insights DependencyTelemetry digunakan untuk memodelkan permintaan keluar. Berikut cara mengonversinya menjadi OpenTelemetry:

Contoh 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);

Contoh 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

Permintaan masuk model Application Insights RequestTelemetry . Berikut cara memigrasikannya ke OpenTelemetry:

Contoh 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);

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

Pelacakan Operasi Kustom

Di Application Insights, lacak operasi kustom menggunakan StartOperation metode dan StopOperation . Mencapainya menggunakan ActivitySource dan Activity di OpenTelemetry .NET. Untuk operasi dengan ActivityKind.Server dan ActivityKind.Consumer, Azure Monitor Exporter menghasilkan RequestTelemetry. Untuk ActivityKind.Client, ActivityKind.Producer, dan ActivityKind.Internal, menghasilkan DependencyTelemetry. Untuk informasi selengkapnya tentang pelacakan operasi kustom, lihat dokumentasi Azure Monitor. Untuk informasi selengkapnya tentang menggunakan ActivitySource dan Activity di .NET, lihat panduan instrumentasi pelacakan terdistribusi .NET.

Berikut adalah contoh cara memulai dan menghentikan aktivitas untuk operasi kustom:

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

Mengirim Log

Log di Application Insights disimpan sebagai TraceTelemetry dan ExceptionTelemetry.

TraceTelemetry

Di OpenTelemetry, pengelogan terintegrasi melalui ILogger antarmuka. Berikut cara memigrasikan TraceTelemetry:

Contoh 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);

Contoh 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 menggunakan untuk mencatat pengecualian. Berikut cara bermigrasi ke OpenTelemetry:

Contoh 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);

Contoh 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");
}

Mengirim Metrik

Metrik dalam Application Insights disimpan sebagai MetricTelemetry. Di OpenTelemetry, metrik dimodelkan sebagai Meter dari System.Diagnostics.DiagnosticSource paket.

Application Insights memiliki API Metrik non-agregasi (TrackMetric()) dan preaggregasi (GetMetric().TrackValue()). Tidak seperti OpenTelemetry, Application Insights tidak memiliki gagasan instrumen. Application Insights memiliki API yang sama untuk semua skenario metrik.

OpenTelemetry, di sisi lain, mengharuskan pengguna untuk terlebih dahulu memilih instrumen metrik yang tepat berdasarkan semantik metrik yang sebenarnya. Misalnya, jika niatnya adalah untuk menghitung sesuatu (seperti jumlah total permintaan server yang diterima, dll.), Penghitung OpenTelemetry harus digunakan. Jika niatnya adalah untuk menghitung berbagai persentil (seperti nilai P99 latensi server), maka instrumen Histogram OpenTelemetry harus digunakan. Karena perbedaan mendasar antara Application Insights dan OpenTelemetry ini, tidak ada perbandingan langsung yang dibuat di antara mereka.

Tidak seperti Application Insights, OpenTelemetry tidak menyediakan mekanisme bawaan untuk memperkaya atau memfilter metrik. Di Application Insights, prosesor telemetri dan penginisialisasi dapat digunakan untuk memodifikasi atau membuang metrik, tetapi kemampuan ini tidak tersedia di OpenTelemetry.

Selain itu, OpenTelemetry tidak mendukung pengiriman metrik mentah secara langsung, karena tidak ada yang setara dengan fungsionalitas yang TrackMetric() ditemukan di Application Insights.

Migrasi dari Application Insights ke OpenTelemetry melibatkan mengganti semua penggunaan API Metrik Application Insights dengan API OpenTelemetry. Ini membutuhkan pemahaman berbagai Instrumen OpenTelemetry dan semantiknya.

Tip

Histogram adalah yang paling serbaguna dan paling setara dengan API Application Insights GetMetric().TrackValue() . Anda dapat mengganti API Metrik Application Insights dengan Histogram untuk mencapai tujuan yang sama.

Jenis Telemetri Lainnya

CustomEvents

Tidak didukung di OpenTelemetry.

Contoh Application Insights:

TelemetryClient.TrackEvent()
AvailabilityTelemetry

Tidak didukung di OpenTelemetry.

Contoh Application Insights:

TelemetryClient.TrackAvailability()
PageViewTelemetry

Tidak didukung di OpenTelemetry.

Contoh Application Insights:

TelemetryClient.TrackPageView()

Bisakah saya mendapatkan metrik langsung untuk aplikasi layanan konsol dan pekerja?

Kami merekomendasikan Pengekspor OpenTelemetry Azure Monitor untuk aplikasi layanan konsol dan pekerja, yang tidak menyertakan metrik langsung.

Langkah berikutnya

Tip

Grup produk kami secara aktif mencari umpan balik tentang dokumentasi ini. Berikan umpan balik ke otel@microsoft.com atau lihat bagian Dukungan .

Dukungan