Mengonfigurasi OpenTelemetry Azure Monitor

Artikel ini membahas pengaturan konfigurasi untuk distro OpenTelemetry Azure Monitor.

String koneksi

String koneksi di Application Insights menentukan lokasi target untuk mengirim data telemetri, memastikannya mencapai sumber daya yang sesuai untuk pemantauan dan analisis.

Gunakan salah satu dari tiga cara berikut untuk mengonfigurasi string koneksi:

  • Tambahkan UseAzureMonitor() ke startup aplikasi Anda, di kelas Anda program.cs .

    // Create a new ASP.NET Core web application builder.    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
        options.ConnectionString = "<Your Connection String>";
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.    
    app.Run();
    
  • Atur variabel lingkungan.

    APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
    
  • Tambahkan bagian berikut ke file konfigurasi Anda appsettings.json .

    {
      "AzureMonitor": {
          "ConnectionString": "<Your Connection String>"
      }
    }
    

Catatan

Jika Anda mengatur string koneksi di lebih dari satu tempat, kami mematuhi prioritas berikut:

  1. Kode
  2. Variabel lingkungan
  3. File konfigurasi

Mengatur Nama Peran Cloud dan Instans Peran Cloud

Untuk bahasa yang didukung, Distro OpenTelemetry Azure Monitor secara otomatis mendeteksi konteks sumber daya dan menyediakan nilai default untuk Nama Peran Cloud dan properti Instans Peran Cloud komponen Anda. Namun, Anda mungkin ingin mengambil alih nilai default ke sesuatu yang masuk akal untuk tim Anda. Nilai nama peran cloud muncul di Peta Aplikasi sebagai nama di bawah simpul.

Atur Nama Peran Cloud dan Instans Peran Cloud melalui atribut Sumber Daya . 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. Untuk informasi tentang atribut standar untuk sumber daya, lihat Konvensi Semantik OpenTelemetry.

// Setting role name and role instance

// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
    { "service.name", "my-service" },
    { "service.namespace", "my-namespace" },
    { "service.instance.id", "my-instance" }};

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor();

// Configure the OpenTelemetry tracer provider to add the resource attributes to all traces.
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => 
    builder.ConfigureResource(resourceBuilder => 
        resourceBuilder.AddAttributes(resourceAttributes)));

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Aktifkan Pengambilan Sampel

Anda mungkin ingin mengaktifkan pengambilan sampel untuk mengurangi volume penyerapan data Anda, yang mengurangi biaya Anda. Azure Monitor menyediakan sampler laju tetap kustom yang mengisi peristiwa dengan rasio pengambilan sampel, yang dikonversi Application Insights ke ItemCount. Sampler laju tetap memastikan pengalaman dan jumlah peristiwa yang akurat. Sampler dirancang untuk mempertahankan jejak Anda di seluruh layanan, dan dapat dioperasikan dengan SDK Application Insights yang lebih lama. Untuk informasi selengkapnya, lihat Pelajari selengkapnya tentang pengambilan sampel.

Catatan

Metrik dan Log tidak terpengaruh oleh pengambilan sampel.

Sampler mengharapkan laju sampel antara 0 dan 1 inklusif. Tingkat 0,1 berarti sekitar 10% jejak Anda dikirim.

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    // Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
    o.SamplingRatio = 0.1F;
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Tip

Saat menggunakan pengambilan sampel laju/persentase tetap dan Anda tidak yakin apa yang harus ditetapkan tingkat pengambilan sampel sebagai, mulai dari 5% (yaitu, rasio pengambilan sampel 0,05) dan sesuaikan laju berdasarkan akurasi operasi yang ditunjukkan pada kegagalan dan bilah performa. Tingkat yang lebih tinggi umumnya menghasilkan akurasi yang lebih tinggi. Namun, pengambilan sampel APA PUN akan memengaruhi akurasi sehingga kami menyarankan pemberitahuan tentang metrik OpenTelemetry, yang tidak terpengaruh oleh pengambilan sampel.

Mengaktifkan autentikasi MICROSOFT Entra ID (sebelumnya Azure AD)

Anda mungkin ingin mengaktifkan autentikasi Microsoft Entra untuk koneksi yang lebih aman ke Azure, yang mencegah telemetri yang tidak sah diserap ke dalam langganan Anda.

Kami mendukung kelas kredensial yang disediakan oleh Azure Identity.

  • Kami merekomendasikan DefaultAzureCredential untuk pengembangan lokal.
  • Kami merekomendasikan ManagedIdentityCredential untuk identitas terkelola yang ditetapkan sistem dan ditetapkan pengguna.
    • Untuk sistem yang ditetapkan, gunakan konstruktor default tanpa parameter.
    • Untuk pengguna yang ditetapkan, berikan ID klien ke konstruktor.
  • Kami merekomendasikan ClientSecretCredential untuk perwakilan layanan.
    • Berikan ID penyewa, ID klien, dan rahasia klien ke konstruktor.
  1. Instal paket Azure.Identity terbaru:

    dotnet add package Azure.Identity
    
  2. Berikan kelas kredensial yang diinginkan:

    // Create a new ASP.NET Core web application builder.    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
        // Set the Azure Monitor credential to the DefaultAzureCredential.
        // This credential will use the Azure identity of the current user or
        // the service principal that the application is running as to authenticate
        // to Azure Monitor.
        options.Credential = new DefaultAzureCredential();
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

Penyimpanan Offline dan Coba Lagi Otomatis

Untuk meningkatkan keandalan dan ketahanan, penawaran berbasis OpenTelemetry Azure Monitor menulis ke penyimpanan offline/lokal secara default ketika aplikasi kehilangan koneksinya dengan Application Insights. Ini menyimpan telemetri aplikasi ke disk dan secara berkala mencoba mengirimnya lagi hingga 48 jam. Dalam aplikasi beban tinggi, telemetri kadang-kadang dihilangkan karena dua alasan. Pertama, ketika waktu yang diizinkan terlampaui, dan kedua, ketika ukuran file maksimum terlampaui atau SDK tidak memiliki kesempatan untuk menghapus file. Jika kita perlu memilih, produk menyimpan peristiwa yang lebih baru daripada yang lama. Pelajari Selengkapnya

Paket Distro mencakup AzureMonitorExporter, yang secara default menggunakan salah satu lokasi berikut untuk penyimpanan offline (tercantum dalam urutan prioritas):

  • Windows
    • %LOCALAPPDATA%\Microsoft\AzureMonitor
    • %TEMP%\Microsoft\AzureMonitor
  • Non-Windows
    • %TMPDIR%/Microsoft/AzureMonitor
    • /var/tmp/Microsoft/AzureMonitor
    • /tmp/Microsoft/AzureMonitor

Untuk mengambil alih direktori default, Anda harus mengatur AzureMonitorOptions.StorageDirectory.

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
    // Set the Azure Monitor storage directory to "C:\\SomeDirectory".
    // This is the directory where the OpenTelemetry SDK will store any telemetry data that cannot be sent to Azure Monitor immediately.
    options.StorageDirectory = "C:\\SomeDirectory";
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Untuk menonaktifkan fitur ini, Anda harus mengatur AzureMonitorOptions.DisableOfflineStorage = true.

Mengaktifkan Pengekspor OTLP

Anda mungkin ingin mengaktifkan Pengekspor Protokol OpenTelemetry (OTLP) bersama Pengekspor Azure Monitor untuk mengirim telemetri Anda 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.

  1. Instal paket OpenTelemetry.Exporter.OpenTelemetryProtocol di proyek Anda.

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  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.

    // Create a new ASP.NET Core web application builder.
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
    // Add the OpenTelemetry OTLP exporter to the application.
    // This exporter will send telemetry data to an OTLP receiver, such as Prometheus
    builder.Services.AddOpenTelemetry().WithTracing(builder => builder.AddOtlpExporter());
    builder.Services.AddOpenTelemetry().WithMetrics(builder => builder.AddOtlpExporter());
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

Konfigurasi OpenTelemetry

Konfigurasi OpenTelemetry berikut dapat diakses melalui variabel lingkungan saat menggunakan Distro OpenTelemetry Azure Monitor.

Variabel lingkungan Deskripsi
APPLICATIONINSIGHTS_CONNECTION_STRING Atur ke string koneksi untuk sumber daya Application Insights Anda.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED Atur ke true untuk menolak pengumpulan metrik internal.
OTEL_RESOURCE_ATTRIBUTES Pasangan kunci-nilai yang akan digunakan sebagai atribut sumber daya. Untuk informasi selengkapnya tentang atribut sumber daya, lihat spesifikasi Resource SDK.
OTEL_SERVICE_NAME Mengatur nilai service.name atribut sumber daya. Jika service.name juga disediakan dalam OTEL_RESOURCE_ATTRIBUTES, maka OTEL_SERVICE_NAME diutamakan.

Tanya jawab umum

Bagian ini menyediakan jawaban atas pertanyaan umum.

Apa itu OpenTelemetry?

Ini adalah standar sumber terbuka baru untuk pengamatan. Pelajari lebih lanjut di OpenTelemetry.

Mengapa Microsoft Azure Monitor berinvestasi di OpenTelemetry?

Microsoft adalah salah satu kontributor terbesar untuk OpenTelemetry.

Proposisi nilai utama dari OpenTelemetry termasuk bersifat netral terhadap vendor dan menyediakan API/SDK yang konsisten di seluruh bahasa.

Seiring waktu, kami percaya OpenTelemetry akan memungkinkan pelanggan Azure Monitor untuk mengamati aplikasi yang ditulis dalam bahasa di luar bahasa yang didukung. Ini juga memperluas jenis data yang dapat Anda kumpulkan melalui serangkaian pustaka instrumentasi yang kaya. Selain itu, SDK OpenTelemetry cenderung lebih berkinerja dalam skala besar daripada pendahulunya, SDK Application Insights.

Terakhir, OpenTelemetry juga selaras dengan strategi Microsoft untuk merangkul sumber terbuka.

Bagaimana status OpenTelemetry?

Lihat Status OpenTelemetry.

Apa itu "Distro OpenTelemetry Azure Monitor"?

Anda dapat menganggapnya sebagai pembungkus tipis yang menggabungkan semua komponen OpenTelemetry untuk pengalaman kelas satu di Azure. Pembungkus ini juga disebut distribusi di OpenTelemetry.

Mengapa saya harus menggunakan "Distro OpenTelemetry Azure Monitor"?

Ada beberapa keuntungan menggunakan Distro OpenTelemetry Azure Monitor daripada OpenTelemetry asli dari komunitas:

Dalam semangat OpenTelemetry, kami merancang distro agar terbuka dan dapat diperluas. Misalnya, Anda dapat menambahkan:

  • Pengekspor OpenTelemetry Protocol (OTLP) dan mengirim ke tujuan kedua secara bersamaan
  • Pustaka instrumentasi lain yang tidak termasuk dalam distro

Karena Distro menyediakan distribusi OpenTelemetry, Distro mendukung apa pun yang didukung oleh OpenTelemetry. Misalnya, Anda dapat menambahkan lebih banyak prosesor telemetri, pengekspor, atau pustaka instrumentasi, jika OpenTelemetry mendukungnya.

Catatan

Distro mengatur sampler ke sampler laju tetap kustom untuk Application Insights. Anda dapat mengubah ini ke sampler yang berbeda, tetapi melakukannya mungkin menonaktifkan beberapa kemampuan yang disertakan Distro. Untuk informasi selengkapnya tentang sampler yang didukung, lihat bagian Aktifkan Pengambilan Sampel di Mengonfigurasi Azure Monitor OpenTelemetry.

Untuk bahasa tanpa pengekspor OpenTelemetry mandiri yang didukung, Distro OpenTelemetry Azure Monitor adalah satu-satunya cara yang saat ini didukung untuk menggunakan OpenTelemetry dengan Azure Monitor. Untuk bahasa dengan pengekspor OpenTelemetry mandiri yang didukung, Anda memiliki opsi untuk menggunakan Distro OpenTelemetry Azure Monitor atau pengekspor OpenTelemetry mandiri yang sesuai tergantung pada skenario telemetri Anda. Untuk informasi selengkapnya, lihat Kapan saya harus menggunakan pengekspor OpenTelemetry Azure Monitor?.

Bagaimana cara menguji Distro OpenTelemetry Azure Monitor?

Lihat dokumen pengaktifan kami untuk .NET, Java, JavaScript (Node.js), dan Python.

Haruskah saya menggunakan OpenTelemetry atau Application Insights SDK?

Sebaiknya gunakan Distro OpenTelemetry kecuali Anda memerlukan fitur yang hanya tersedia dengan dukungan formal di Application Insights SDK.

Mengadopsi OpenTelemetry sekarang mencegah harus bermigrasi di kemudian hari.

Kapan saya harus menggunakan pengekspor OpenTelemetry Azure Monitor?

Untuk ASP.NET Core, Java, Node.js, dan Python, sebaiknya gunakan Distro OpenTelemetry Azure Monitor. Ini adalah satu baris kode untuk memulai.

Untuk semua skenario .NET lainnya, termasuk ASP.NET klasik, aplikasi konsol, dll., sebaiknya gunakan pengekspor OpenTelemetry .NET Azure Monitor: Azure.Monitor.OpenTelemetry.Exporter.

Untuk skenario telemetri Python yang lebih kompleks yang memerlukan konfigurasi tingkat lanjut, sebaiknya gunakan Python Azure Monitor OpenTelemetry Exporter.

Apa status rilis fitur saat ini dalam Distro OpenTelemetry Azure Monitor?

Bagan berikut memecah dukungan fitur OpenTelemetry untuk setiap bahasa.

Fitur .NET Node.js Python Java
Pelacakan terdistribusi
Metrik kustom
Metrik standar (akurasi saat ini dipengaruhi oleh pengambilan sampel)
Pengambilan sampel laju tetap
Penyimpanan offline dan percobaan ulang otomatis
Pelaporan pengecualian
Koleksi log ⚠️
Kejadian Kustom ⚠️ ⚠️ ⚠️
Autentikasi Microsoft Entra
Metrik langsung
Mendeteksi Konteks Sumber Daya untuk VM/VMSS dan App Service
Mendeteksi Konteks Sumber Daya untuk AKS dan Fungsi
Pemfilteran Rentang Pengujian Ketersediaan
Pengisian otomatis ID pengguna, ID pengguna yang diautentikasi, dan IP pengguna
Mengesampingkan/mengatur nama operasi, ID pengguna, atau ID pengguna yang diautentikasi secara manual
Pengambilan sampel adaptif
Profiler ⚠️
Snapshot Debugger

Kunci

  • ✅ Fitur ini tersedia untuk semua pelanggan dengan dukungan formal.
  • ⚠️ Fitur ini tersedia sebagai pratinjau publik. Lihat Ketentuan penggunaan tambahan untuk pratinjau Microsoft Azure.
  • ❌ Fitur ini tidak tersedia atau tidak berlaku.

Dapatkah OpenTelemetry digunakan untuk browser web?

Ya, tetapi kami tidak merekomendasikannya dan Azure tidak mendukungnya. OpenTelemetry JavaScript sangat dioptimalkan untuk Node.js. Sebagai gantinya, sebaiknya gunakan Application Insights JavaScript SDK.

Kapan kita dapat mengharapkan OpenTelemetry SDK tersedia untuk digunakan di browser web?

SDK web OpenTelemetry tidak memiliki garis waktu ketersediaan yang ditentukan. Kami kemungkinan beberapa tahun lagi dari SDK browser yang merupakan alternatif yang layak untuk Application Insights JavaScript SDK.

Dapatkah saya menguji OpenTelemetry di browser web hari ini?

Kotak pasir web OpenTelemetry adalah fork yang dirancang untuk membuat OpenTelemetry berfungsi di browser. Belum dimungkinkan untuk mengirim telemetri ke Application Insights. SDK tidak menentukan peristiwa klien umum.

Apakah menjalankan Application Insights bersama agen pesaing seperti AppDynamics, DataDog, dan NewRelic didukung?

Tidak. Praktik ini bukan sesuatu yang kami rencanakan untuk diuji atau didukung, meskipun Distro kami memungkinkan Anda mengekspor ke titik akhir OTLP bersama Azure Monitor secara bersamaan.

Dapatkah saya menggunakan fitur pratinjau di lingkungan produksi?

Kami tidak merekomendasikannya. Lihat Ketentuan penggunaan tambahan untuk pratinjau Microsoft Azure.

Apa perbedaan antara instrumentasi manual dan otomatis?

Lihat Gambaran Umum OpenTelemetry.

Dapatkah saya menggunakan OpenTelemetry Collector?

Beberapa pelanggan menggunakan OpenTelemetry Collector sebagai alternatif agen, meskipun Microsoft belum secara resmi mendukung pendekatan berbasis agen untuk pemantauan aplikasi. Sementara itu, komunitas sumber terbuka berkontribusi pada Pengumpul OpenTelemetry Azure Monitor Exporter yang digunakan beberapa pelanggan untuk mengirim data ke Azure Monitor Application Insights. Ini tidak didukung oleh Microsoft.

Apa perbedaan antara OpenCensus dan OpenTelemetry?

OpenCensus adalah pendahulu OpenTelemetry. Microsoft membantu menyatukan OpenTracing dan OpenCensus untuk membuat OpenTelemetry, satu standar pengamatan untuk dunia. Python SDK yang direkomendasikan produksi saat ini untuk Azure Monitor didasarkan pada OpenCensus. Microsoft berkomitmen untuk membuat Azure Monitor berdasarkan OpenTelemetry.

Pemecahan Masalah

Tidak bekerja? Lihat halaman pemecahan masalah untuk ASP.NET Core.

Dukungan

Pilih tab untuk bahasa pilihan Anda untuk menemukan opsi dukungan.

Umpan balik OpenTelemetry

Untuk memberikan umpan balik: