Setelah Anda menggunakan OpenTelemetry untuk menginstrumentasi aplikasi .NET dan melaporkan data jejak ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi .NET. Anda dapat melihat data pemantauan aplikasi seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan OpenTelemetry untuk secara otomatis atau manual menginstrumentasi aplikasi .NET dan melaporkan data jejak.
Informasi Latar Belakang
OpenTelemetry mendukung instrumentasi otomatis dan manual untuk aplikasi .NET.
Instrumentasi Otomatis
OpenTelemetry mendukung instrumentasi otomatis dengan versi .NET berikut:
.NET SDK 6+
OpenTelemetry tidak mendukung instrumentasi otomatis dengan .NET Framework.
Untuk informasi lebih lanjut tentang kerangka kerja yang didukung oleh OpenTelemetry untuk instrumentasi otomatis, lihat Instrumen yang Tersedia dalam dokumentasi resmi OpenTelemetry.
Instrumentasi Manual dan Semi-Otomatis
Versi yang Didukung
.NET 5.0 dan yang lebih baru
.NET Core 2.0 dan yang lebih baru
.NET Framework 4.6.1 dan yang lebih baru
Kerangka Kerja yang Didukung
Kode Contoh
Unduh kode contoh dari dotnet-demo.
Metode 1: Konfigurasikan instrumentasi otomatis untuk aplikasi
Batasan
OpenTelemetry hanya mendukung instrumentasi otomatis menggunakan OpenTelemetry SDK untuk .NET 6.0 atau yang lebih baru.
OpenTelemetry tidak mendukung instrumentasi otomatis menggunakan .NET Framework.
Gunakan ASP.NET Core untuk membuat aplikasi web.
Buat aplikasi menggunakan kode contoh.
mkdir dotnet-simple-demo cd dotnet-simple-demo dotnet new webTambahkan kode berikut ke file Properties/launchSettings.json:
{ "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "http://localhost:8080", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }Bangun aplikasi.
dotnet build
Konfigurasikan instrumentasi otomatis untuk aplikasi.
Unduh dan jalankan skrip instalasi untuk instrumentasi otomatis menggunakan OpenTelemetry SDK untuk .NET.
curl -L -O https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh ./otel-dotnet-auto-install.shKonfigurasikan variabel lingkungan dan jalankan skrip instrumentasi otomatis.
Ganti
<serviceName>dengan nama aplikasi Anda. Ganti<endpoint>dan<token>dengan titik akhir dan token yang diperoleh di bagian Prasyarat dari topik ini.export OTEL_TRACES_EXPORTER=otlp \ OTEL_METRICS_EXPORTER=none \ OTEL_LOGS_EXPORTER=none \ OTEL_SERVICE_NAME=<serviceName> \ OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint> \ OTEL_EXPORTER_OTLP_HEADERS="Authentication=<token>" . $HOME/.otel-dotnet-auto/instrument.shCatatanUntuk informasi lebih lanjut tentang cara mengonfigurasi variabel lingkungan untuk instrumentasi otomatis menggunakan OpenTelemetry SDK untuk .NET, lihat Konfigurasi dan Pengaturan dalam dokumentasi resmi OpenTelemetry.
Jalankan dan akses aplikasi.
Jalankan aplikasi.
dotnet runJalankan perintah berikut untuk mengakses aplikasi. Jejak yang dihasilkan dilaporkan secara otomatis ke Managed Service for OpenTelemetry.
curl localhost:8080/
Metode 2: Instrumentasi manual pada aplikasi
Pergi ke direktori dotnet-demo/opentelemetry-demo/manual-demo dan tambahkan dependensi OpenTelemetry berikut yang diperlukan untuk menginstrumentasi aplikasi secara manual:
dotnet add package OpenTelemetry dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol dotnet add package OpenTelemetry.Exporter.Console # Opsional. Dependensi ini diperlukan jika Anda ingin mengekspor data di konsol. dotnet add package OpenTelemetry.Extensions.HostingDi file OpentelemetryExporterDemo.cs, buat OpenTelemetry TracerProvider, tambahkan OtlpExporter berbasis HTTP, lalu tentukan nama aplikasi yang datanya jejak dilaporkan dan titik akhir yang digunakan untuk melaporkan data jejak.
using System.Diagnostics; using OpenTelemetry; using OpenTelemetry.Trace; using OpenTelemetry.Resources; using OpenTelemetry.Exporter; namespace Demo { internal static class OpentelemetryExporterDemo { internal static void Run() { Console.WriteLine("otlp running"); // Tentukan nama aplikasi yang ingin Anda laporkan data jejaknya menggunakan OpenTelemetry. var serviceName = "otlp-test"; using var tracerProvider = Sdk.CreateTracerProviderBuilder() .AddSource(serviceName) .SetResourceBuilder( ResourceBuilder.CreateDefault().AddService(serviceName)) .AddOtlpExporter(opt => { // Ganti nilai parameter dengan titik akhir yang Anda peroleh di bagian "Prasyarat" dari topik ini. opt.Endpoint = new Uri("<endpoint>"); // Laporkan data jejak melalui HTTP. opt.Protocol = OtlpExportProtocol.HttpProtobuf; }) .AddConsoleExporter() // Opsional. Ekspor data di konsol. .Build(); for(int i = 0; i<10; i++) { var MyActivitySource = new ActivitySource(serviceName); using var activity = MyActivitySource.StartActivity("SayHello"); activity?.SetTag("bar", "Hello World"); } } } }Ubah file Program.cs untuk memanggil OpentelemetryExporterDemo di metode Main.
using System.Diagnostics; using System.Net.Http; using OpenTelemetry; using OpenTelemetry.Resources; using OpenTelemetry.Trace; namespace Demo { public class Otlp { public static void Main(string[] args) { OpentelemetryExporterDemo.Run(); } } }Jalankan perintah berikut di jalur saat ini:
dotnet run
Metode 3: Gabungkan instrumentasi otomatis dengan instrumentasi manual
OpenTelemetry dapat mengunggah data jejak secara otomatis untuk puluhan kerangka kerja .NET. Untuk informasi lebih lanjut, lihat Instrumen Jejak.
Pergi ke direktori dotnet-demo/opentelemetry-demo/auto-demo dan buat aplikasi web menggunakan ASP.NET Core.
Ganti
<your-project-name>di kode dengan nama aplikasi Anda.mkdir <your-project-name> cd <your-project-name> dotnet new mvcUnduh dependensi OpenTelemetry yang diperlukan untuk memantau aplikasi.
dotnet add package OpenTelemetry.Exporter.Console # Ekspor data yang dikumpulkan di konsol. dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol # Ekspor data melalui Protokol OpenTelemetry (OTLP).Unduh dependensi untuk instrumentasi otomatis.
Unduh dependensi yang digunakan untuk menginstrumentasi aplikasi secara otomatis pada kerangka kerja ASP.NET Core. Saat aplikasi menerima permintaan HTTP, rentang akan dibuat secara otomatis dan kemudian dilaporkan. Untuk mengonfigurasi instrumentasi otomatis untuk aplikasi pada kerangka kerja lainnya, unduh dependensi terkait dari Instrumen Jejak.
dotnet add package OpenTelemetry.Instrumentation.AspNetCoreUbah kode di file <your-project-name>/Program.cs.
Impor paket yang diperlukan di awal file sumber.
using System.Diagnostics; using OpenTelemetry.Exporter; using OpenTelemetry.Resources; using OpenTelemetry.Trace;Tambahkan kelas DiagnosticsConfig di akhir file sumber.
Ganti
<your-service-name>dan<your-host-name>di kode dengan nama aplikasi dan nama host sebenarnya.public static class DiagnosticsConfig { public const string ServiceName = "<your-service-name>"; public const string HostName = "<your-host-name>"; public static ActivitySource ActivitySource = new ActivitySource(ServiceName); }Tambahkan kode untuk menginisialisasi OpenTelemetry.
Laporkan data melalui HTTP.
Ganti
<http_endpoint>di kode berikut dengan titik akhir yang diperoleh di bagian "Prasyarat" dari topik ini:// ... builder.Services.AddOpenTelemetry() .WithTracing(tracerProviderBuilder => tracerProviderBuilder .AddSource(DiagnosticsConfig.ActivitySource.Name) .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault() .AddAttributes(new Dictionary<string, object> { {"service.name", DiagnosticsConfig.ServiceName}, {"host.name",DiagnosticsConfig.HostName} })) .AddAspNetCoreInstrumentation() .AddConsoleExporter() // Opsional. Ekspor data jejak di konsol. .AddOtlpExporter(opt => { // Laporkan data melalui HTTP. opt.Endpoint = new Uri("<http_endpoint>"); opt.Protocol = OtlpExportProtocol.HttpProtobuf; }) ); // ...Laporkan data melalui gRPC.
Ganti
<grpc_endpoint>dan<token>di kode berikut dengan titik akhir dan token yang diperoleh di bagian "Prasyarat" dari topik ini:// ... builder.Services.AddOpenTelemetry() .WithTracing(tracerProviderBuilder => tracerProviderBuilder .AddSource(DiagnosticsConfig.ActivitySource.Name) .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault() .AddAttributes(new Dictionary<string, object> { {"service.name", DiagnosticsConfig.ServiceName}, {"host.name",DiagnosticsConfig.HostName} })) .AddAspNetCoreInstrumentation() .AddConsoleExporter() // Opsional. Ekspor data jejak di konsol. .AddOtlpExporter(opt => { // Laporkan data melalui gRPC. opt.Endpoint = new Uri("<grpc_endpoint>"); opt.Headers = "Authentication=<token>"; opt.Protocol = OtlpExportProtocol.Grpc; }) ); // ...
Jalankan perintah berikut di terminal untuk menjalankan proyek:
dotnet runContoh Keluaran Perintah:
Peroleh URL di informasi yang dikembalikan. Contoh:
http://localhost:5107.Building... info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5107 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: /path/to/<your-project-name>Kunjungi
http://localhost:5107di browser. Jika halaman berikut ditampilkan, data jejak telah dilaporkan ke konsol Managed Service for OpenTelemetry.
Lihat data pemantauan
Masuk ke Konsol ARMS. Di panel navigasi kiri, pilih . Di halaman Applications, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.
Jika ikon
ditampilkan di kolom Language, aplikasi terhubung ke Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi terhubung ke Managed Service for OpenTelemetry.