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:

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

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

Screenshot of the Application Insights connection string.

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.

Screenshot of the Application Insights Overview tab with server requests and server response time highlighted.

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

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:

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.

  1. Banyak perpustakaan instrumentasi memberikan opsi yang dapat memperkaya. Sebagai panduan, lihat file readme dari pustaka instrumentasi individual:

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

  1. Banyak pustaka instrumentasi menyediakan opsi filter. Sebagai panduan, lihat file readme dari pustaka instrumentasi individual:

  2. 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.cs kode 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;
            }
        }
    }
    
  3. 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.

  1. Pasang paket OpenTelemetry.Exporter.OpenTelemetryProtocol bersama dengan Azure.Monitor.OpenTelemetry.Exporter di proyek Anda.

  2. 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:

Langkah berikutnya