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
- Aplikasi web ASP.NET Core yang sudah berinstrumentasi dengan Application Insights tanpa kustomisasi apa pun
- Versi .NET yang didukung secara aktif
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.
Menghapus paket NuGet
Microsoft.ApplicationInsights.AspNetCore
Hapus paket dari .csproj
dotnet remove package Microsoft.ApplicationInsights.AspNetCore
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>" } }
Bersihkan dan Bangun
Periksa direktori bin Anda untuk memvalidasi bahwa semua referensi
Microsoft.ApplicationInsights.*
telah dihapus.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.
Rencanakan untuk memperbarui string koneksi untuk mengirim telemetri ke sumber daya asli setelah mengonfirmasi migrasi berhasil.
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
Menambahkan dan mengonfigurasi OpenTelemetry dan Azure Monitor
OpenTelemery SDK harus dikonfigurasi pada startup aplikasi sebagai bagian dari Anda
ServiceCollection
, biasanya diProgram.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
atauTelemetryInitializer
, pemfilteran kustom harus dihapus. Mereka dapat ditemukan di AndaServiceCollection
.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
danTelemetryConfiguration
. 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 menawarkanEnrich
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.
- Dasar-Dasar Pengumpulan Data Azure Monitor Application Insights
- Model data telemetri Application Insights
- Konsep OpenTelemetry
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
ILogger
implementasi 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
- Untuk masalah dukungan Azure, buka tiket dukungan Azure.
- Untuk masalah OpenTelemetry, hubungi komunitas OpenTelemetry .NET secara langsung.
- Untuk daftar masalah terbuka yang terkait dengan Pengekspor Azure Monitor, lihat Halaman Masalah GitHub.