Mengaktifkan Pengekspor OpenTelemetry Azure Monitor untuk aplikasi .NET, Node.js, dan Python (pratinjau)
Pengekspor OpenTelemetry Azure Monitor adalah komponen yang mengirimkan jejak (dan akhirnya semua telemetri aplikasi) ke Azure Monitor Application Insights. Untuk mempelajari selengkapnya tentang konsep OpenTelemetry, lihat Ringkasan OpenTelemetry atau Tanya Jawab Umum OpenTelemetry.
Artikel ini menjelaskan cara mengaktifkan dan mengonfigurasi penawaran Pratinjau Azure Monitor berbasis OpenTelemetry. Setelah Anda menyelesaikan instruksi dalam artikel ini, Anda akan dapat mengirim jejak OpenTelemetry ke Azure Monitor Application Insights.
Penting
Pengekspor OpenTelemetry Azure Monitor untuk aplikasi .NET, Node.js, dan Python saat ini dalam pratinjau. Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.
Batasan rilis pratinjau
Mempertimbangkan dengan hati-hati apakah pratinjau ini tepat untuk Anda. Pratinjau ini hanya mengaktifkan pelacakan terdistribusi dan tidak termasuk:
- API Metrik (seperti metrik kustom dan metrik pra-agregat)
- Metrik Langsung
- API Pengelogan (seperti log konsol dan pustaka pengelogan)
- Pengambilan otomatis pengecualian yang tidak tertangani
- Profiler
- Snapshot Debugger
- Penyimpanan disk offline dan mencoba kembali logika
- Autentikasi Azure Active Directory
- Pengambilan sampel
- Pengisian otomatis Nama Peran Cloud dan Instans Peran Cloud dalam lingkungan Azure
- Pengisian otomatis ID pengguna dan ID pengguna yang Diautentikasi saat Anda menggunakan Application Insights JavaScript SDK
- Pengisian otomatis IP Pengguna (untuk menentukan atribut lokasi)
- Kemampuan untuk menimpa Nama Operasi
- Kemampuan untuk mengatur ID Pengguna atau ID Pengguna yang Diautentikasi secara manual
- Menyebarkan Nama Operasi ke Telemetri Dependensi
- Pustaka instrumentasi mendukung Azure Functions
Jika Anda memerlukan pengalaman fitur lengkap, gunakan Application Insights yang sudah ada SDK ASP.NET atau ASP.NET Core sampai penawaran berbasis OpenTelemetry jatuh tempo.
Mulai
Ikuti langkah-langkah pada bagian ini untuk melengkapi aplikasi Anda dengan OpenTelemetry.
Prasyarat
- Langganan Azure: Membuat langganan Azure secara gratis
- Sumber daya Application Insights: Membuat sumber daya Application Insights
- Aplikasi menggunakan versi yang didukung secara resmi dari .NET Core atau .NET Framework atau setidaknya .NET Framework 4.6.1
Menginstal pustaka klien
Memasang paket Azure.Monitor.OpenTelemetry.Exporter NuGet terbaru:
dotnet add package --prerelease Azure.Monitor.OpenTelemetry.Exporter
Jika Anda mendapatkan kesalahan seperti "Tidak ada versi yang tersedia untuk paket Azure.Monitor.OpenTelemetry.Exporter," kemungkinan disebabkan pengaturan sumber paket NuGet hilang. Coba tentukan sumbernya dengan -s opsi:
# Install the latest package with the NuGet package source specified.
dotnet add package --prerelease Azure.Monitor.OpenTelemetry.Exporter -s https://api.nuget.org/v3/index.json
Mengaktifkan Azure Monitor Application Insights
Bagian ini menyediakan panduan yang menunjukkan cara mengaktifkan OpenTelemetry.
Menambahkan kode instrumentasi OpenTelemetry
Kode berikut menunjukkan cara mengaktifkan OpenTelemetry dalam aplikasi konsol C# dengan menyiapkan OpenTelemetry TracerProvider. Kode ini harus ada di permulaan aplikasi. Untuk Core ASP.NET, biasanya dilakukan dalam kelas ConfigureServicesmetode aplikasiStartup. Untuk aplikasi ASP.NET, biasanya dilakukan dalam Global.asax.cs.
using System.Diagnostics;
using Azure.Monitor.OpenTelemetry.Exporter;
using OpenTelemetry;
using OpenTelemetry.Trace;
public class Program
{
private static readonly ActivitySource MyActivitySource = new ActivitySource(
"OTel.AzureMonitor.Demo");
public static void Main()
{
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("OTel.AzureMonitor.Demo")
.AddAzureMonitorTraceExporter(o =>
{
o.ConnectionString = "<Your Connection String>";
})
.Build();
using (var activity = MyActivitySource.StartActivity("TestActivity"))
{
activity?.SetTag("CustomTag1", "Value1");
activity?.SetTag("CustomTag2", "Value2");
}
System.Console.WriteLine("Press Enter key to exit.");
System.Console.ReadLine();
}
}
Catatan
Kelas Activity dan ActivitySource dari namespace layanan System.Diagnostics, masing-masing mewakili konsep OpenTelemetry dari Span dan Tracer. Anda membuat ActivitySource secara langsung dengan menggunakan konstruktornya daripada menggunakan TracerProvider. Setiap ActivitySource kelas harus tersambung secara eksplisit TracerProvider dengan menggunakan AddSource(). Hal itu karena bagian dari OpenTelemetry yang melacak API dimasukkan secara langsung ke dalam runtime bahasa umum .NET. Untuk mempelajari selengkapnya, lihat Pengenalan API Pelacakan OpenTelemetry .NET.
Tip
Tambahkan pustaka instrumentasi ke telemetri pengumpulan otomatis antar pustaka dan kerangka kerja populer.
Atur string koneksi Application Insights
Ganti tempat penampung <Your Connection String> dalam kode sebelumnya dengan string koneksi dari sumber daya Application Insights Anda.
Mengonfirmasi data sedang mengalir
Jalankan aplikasi Anda dan buka tab Sumber Daya Application Insights pada portal Microsoft Azure. Mungkin perlu waktu beberapa menit hingga data muncul di portal.
Catatan
Jika Anda tidak dapat menjalankan aplikasi atau tidak mendapatkan data seperti yang diharapkan, lihat Pemecahan Masalah.
Penting
Jika Anda memiliki dua atau lebih layanan yang memancarkan telemetri ke sumber daya Application Insights yang sama, Anda perlu mengatur Nama Peran Cloud untuk mewakili mereka dengan benar di Peta Aplikasi.
Sebagai bagian dari penggunaan instrumentasi Application Insights, kami mengumpulkan dan mengirim data diagnostik ke Microsoft. Data ini membantu kami menjalankan dan meningkatkan Application Insights. Anda memiliki opsi untuk menonaktifkan pengumpulan data yang tidak penting. Untuk mempelajari selengkapnya, lihat Statsbeat di Azure Application Insights.
Mengatur Nama Peran Cloud dan Instans Peran Cloud
Anda dapat mengatur Nama Peran Cloud dan Instans Peran Cloud melalui atribut Sumber Daya. Langkah ini memperbarui Nama Peran Cloud dan Instans Peran Cloud dari nilai defaultnya menjadi sesuatu yang masuk akal bagi tim Anda. Mereka akan muncul di Peta Aplikasi sebagai nama di bawah node. Nama Peran Cloud menggunakan atribut service.namespace dan service.name walaupun akan kembali lagi ke service.name jika service.namespace tidak diatur. Instans Peran Cloud menggunakan nilai atribut service.instance.id.
// Setting role name and role instance
var resourceAttributes = new Dictionary<string, object> {
{ "service.name", "my-service" },
{ "service.namespace", "my-namespace" },
{ "service.instance.id", "my-instance" }};
var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);
// Done setting role name and role instance
// Set ResourceBuilder on the provider.
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resourceBuilder)
.AddSource("OTel.AzureMonitor.Demo")
.AddAzureMonitorTraceExporter(o =>
{
o.ConnectionString = "<Your Connection String>";
})
.Build();
Untuk informasi tentang atribut standar untuk sumber daya, lihat Konvensi Semantik Sumber Daya.
Pengambilan sampel
Pengambilan sampel didukung di OpenTelemetry, tetapi saat ini tidak didukung di Pengekspor Azure Monitor OpenTelemetry.
Peringatan
Mengaktifkan pengambilan sampel di OpenTelemetry membuat metrik standar dan berbasis log menjadi sangat tidak akurat, yang memberi dampak buruk pada semua pengalaman Application Insights. Selain itu, mengaktifkan pengambilan sampel bersama dengan SDK Application Insights yang sudah ada akan mengakibatkan jejak yang rusak.
Pustaka instrumentasi
Pustaka berikut divalidasi untuk berfungsi dengan rilis pratinjau.
Peringatan
Pustaka instrumentasi didasarkan pada spesifikasi OpenTelemetry eksperimental. Komitmen dukungan pratinjau Microsoft adalah untuk memastikan bahwa pustaka berikut mengeluarkan data ke Azure Monitor Application Insights, tetapi ada kemungkinan bahwa perubahan mencolok atau pemetaan eksperimental akan memblokir beberapa elemen data.
HTTP
- Versi ASP.NET: 1.0.0-rc7
- Versi Inti ASP.NET: 1.0.0-rc7
- Versi Klien HTTP: 1.0.0-rc7
Database
Catatan
Penawaran pratinjau hanya mencakup instrumentasi yang menangani permintaan HTTP dan database. Untuk mempelajari selengkapnya, lihat Konvensi Semantik OpenTelemetry.
Mengubah telemetri
Bagian ini menjelaskan cara memodifikasi telemetri.
Menambahkan atribut rentang
Untuk menambahkan atribut rentang, gunakan salah satu dari dua cara berikut ini:
- Menggunakan opsi yang disediakan oleh pustaka instrumentasi.
- Tambahkan prosesor rentang kustom.
Atribut ini mungkin menambahkan properti kustom ke telemetri Anda. Anda mungkin juga menggunakan atribut untuk mengatur bidang opsional dalam Skema Application Insights seperti IP Klien.
Tip
Keuntungan menggunakan opsi yang disediakan oleh pustaka instrumentasi, ketika opsi tersebut ada, yaitu tersedianya seluruh konteks. Sebagai hasilnya, pengguna dapat memilih untuk menambahkan atau memfilter lebih banyak atribut. Sebagai contoh, opsi memperkaya di pustaka instrumentasi HttpClient memberikan pengguna akses ke httpRequestMessage itu sendiri. Mereka dapat memilih apa pun darinya dan menyimpannya sebagai atribut.
Menambahkan properti kustom
Atribut apa pun yang Anda tambahkan kepada rentang diekspor sebagai properti kustom. Mereka mengisi bidang customDimensions dalam tabel permintaan atau dependensi di dalam Application Insights.
Banyak perpustakaan instrumentasi memberikan opsi yang dapat memperkaya. Sebagai panduan, lihat file readme dari pustaka instrumentasi individual:
Gunakan prosesor kustom:
Tip
Tambahkan prosesor yang ditampilkan di sini sebelum Pengekspor Azure Monitor.
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("OTel.AzureMonitor.Demo")
.AddProcessor(new ActivityEnrichingProcessor())
.AddAzureMonitorTraceExporter(o =>
{
o.ConnectionString = "<Your Connection String>"
})
.Build();
Tambahkan ActivityEnrichingProcessor.cs ke proyek Anda dengan kode berikut:
using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Trace;
public class ActivityEnrichingProcessor : BaseProcessor<Activity>
{
public override void OnEnd(Activity activity)
{
// The updated activity will be available to all processors which are called after this processor.
activity.DisplayName = "Updated-" + activity.DisplayName;
activity.SetTag("CustomDimension1", "Value1");
activity.SetTag("CustomDimension2", "Value2");
}
}
Mengatur IP pengguna
Anda dapat mengisi bidang client_IP untuk permintaan dengan mengatur http.client_ip atribut pada rentang. Application Insights menggunakan alamat IP untuk menghasilkan atribut lokasi pengguna dan kemudian membuangnya secara default.
Gunakan tambahan contoh properti kustom, tetapi ganti baris kode berikut di ActivityEnrichingProcessor.cs:
// only applicable in case of activity.Kind == Server
activity.SetTag("http.client_ip", "<IP Address>");
Filter telemetri
Anda dapat menggunakan cara-cara berikut untuk menyaring telemetri sebelum meninggalkan aplikasi Anda.
Banyak pustaka instrumentasi menyediakan opsi filter. Sebagai panduan, lihat file readme dari pustaka instrumentasi individual:
Gunakan prosesor kustom:
using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("OTel.AzureMonitor.Demo") .AddProcessor(new ActivityFilteringProcessor()) .AddAzureMonitorTraceExporter(o => { o.ConnectionString = "<Your Connection String>" }) .Build();Tambahkan
ActivityFilteringProcessor.cskode berikut ke proyek Anda:using System.Diagnostics; using OpenTelemetry; using OpenTelemetry.Trace; public class ActivityFilteringProcessor : BaseProcessor<Activity> { public override void OnStart(Activity activity) { // prevents all exporters from exporting internal activities if (activity.Kind == ActivityKind.Internal) { activity.IsAllDataRequested = false; } } }Jika sumber tertentu tidak ditambahkan secara eksplisit menggunakan
AddSource("ActivitySourceName"), maka tidak ada aktivitas yang dibuat menggunakan sumber tersebut yang akan diekspor.
Mengaktifkan Pengekspor OTLP
Anda mungkin ingin mengaktifkan Pengekspor Protokol OpenTelemetry (OTLP) bersama Pengekspor Azure Monitor Anda untuk mengirim telemetri ke dua lokasi.
Catatan
Pengekspor OTLP hanya ditampilkan untuk kenyamanan. Kami tidak mendukung secara resmi Pengekspor OTLP atau komponen apa pun atau pengalaman pihak ketiga di bagian hilirnya. Kami menyarankan Anda membuka masalah dengan Pengumpul OpenTelemetry untuk masalah OpenTelemetry di luar batas dukungan Azure.
Pasang paket OpenTelemetry.Exporter.OpenTelemetryProtocol bersama dengan Azure.Monitor.OpenTelemetry.Exporter di proyek Anda.
Tambahkan cuplikan kode berikut ini. Contoh ini mengasumsikan bahwa Anda memiliki Pengumpul OpenTelemetry dengan penerima OTLP yang sedang berjalan. Untuk detailnya, lihat contoh pada GitHub.
// Sends data to Application Insights as well as OTLP using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource("OTel.AzureMonitor.Demo") .AddAzureMonitorTraceExporter(o => { o.ConnectionString = "<Your Connection String>" }) .AddOtlpExporter() .Build();
Pemecahan Masalah
Bagian ini menyediakan bantuan dengan pemecahan masalah.
Aktifkan pencatatan diagnostik
Pengekspor Azure Monitor menggunakan EventSource untuk pengelogan internalnya sendiri. Log pengekspor tersedia untuk setiap EventListener dengan memilih menjadi sumber bernama OpenTelemetry-AzureMonitor-Exporter. Untuk langkah pemecahan masalah, lihat Pemecahan masalah OpenTelemetry.
Masalah yang diketahui
Masalah yang diketahui untuk Pengekspor OpenTelemetry Azure Monitor meliputi:
- Hilangnya nama operasi pada telemetri dependensi, berdampak buruk pada kegagalan dan pengalaman tab performa.
- Hilangnya model perangkat pada permintaan dan telemetri dependensi, berdampak buruk pada analisis kohor perangkat.
- Nama server database dihilangkan dari nama dependensi, yang secara salah mengagregasi tabel dengan nama yang sama di server yang berbeda.
Dukungan
Untuk mendapatkan dukungan:
- Tinjau langkah-langkah pemecahan masalah dalam artikel ini.
- Untuk masalah dukungan Azure, buka tiket dukungan Azure.
Untuk masalah OpenTelemetry, hubungi komunitas OpenTelemetry .NET secara langsung.
Umpan balik OpenTelemetry
Untuk memberikan umpan balik:
- Isi survei umpan balik pelanggan komunitas OpenTelemetry.
- Ceritakan kepada Microsoft tentang diri Anda saat bergabung dengan Komunitas Adopter Awal OpenTelemetry.
- Terlibat dengan pengguna Azure Monitor lainnya di Microsoft Tech Community.
- Buat permintaan fitur di Forum Umpan Balik Azure.
Langkah berikutnya
- Untuk meninjau kode sumber, lihat Repositori GitHub Pengekspor Azure Monitor.
- Untuk memasang paket NuGet, periksa pembaruan, atau lihat catatan rilis, kunjungi halaman Paket NuGet Pengekspor Azure Monitor.
- Untuk mengenal lebih jauh dengan Azure Monitor Application Insights dan OpenTelemetry, lihat Aplikasi Contoh Azure Monitor.
- Untuk mempelajari selengkapnya tentang OpenTelemetry dan komunitasnya, lihat Repositori GitHub .NET OpenTelemetry.
- Untuk mengaktifkan pengalaman penggunaan, aktifkan pemantauan pengguna web atau browser.