All Products
Search
Document Center

Application Real-Time Monitoring Service:Laporkan data aplikasi .NET melalui Zipkin

Last Updated:Mar 12, 2026

Zipkin adalah sistem pelacakan terdistribusi open source yang awalnya dikembangkan oleh Twitter. Sistem ini mengagregasi data pemantauan waktu nyata dari berbagai sistem heterogen. Anda dapat menggunakan pustaka zipkin4net untuk menginstrumen aplikasi .NET dan melaporkan data jejak ke Application Real-Time Monitoring Service (ARMS) Tracing Analysis.

Topik ini mencakup tiga metode instrumentasi untuk aplikasi .NET dan C#.

Pilih metode instrumentasi

Pilih metode yang sesuai dengan framework aplikasi Anda.

MetodePaling cocok untukPaket NuGet yang diperlukan
ASP.NET CoreAplikasi web lintas platform yang dibangun di atas ASP.NET Corezipkin4net.middleware.aspnetcore, zipkin4net
OWINAplikasi web .NET Framework yang menggunakan middleware OWINzipkin4net.middleware.aspnetcore, zipkin4net
ManualPekerjaan latar belakang, konsumen pesan, atau protokol kustom yang memerlukan kontrol rentang detail haluszipkin4net

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Akun Alibaba Cloud dengan ARMS yang diaktifkan

  • Lingkungan pengembangan .NET

  • Titik akhir Zipkin untuk instans ARMS Tracing Analysis Anda (lihat Dapatkan titik akhir Zipkin)

Dapatkan titik akhir Zipkin

  1. Masuk ke Konsol Tracing Analysis.

  2. Di panel navigasi sebelah kiri, klik Cluster Configurations. Lalu, klik tab Access point information.

  3. Di bilah navigasi atas, pilih wilayah. Di bagian Cluster Information, aktifkan Show Token.

  4. Di bagian Client, klik Jaeger atau Zipkin.

  5. Di kolom Related Information, salin URL titik akhirnya.

Endpoint of Jaeger or Zipkin
Catatan

Jika aplikasi Anda berjalan di lingkungan produksi Alibaba Cloud, gunakan titik akses VPC. Jika tidak, gunakan titik akhir publik. Gunakan titik akhir v2 kecuali Anda memiliki alasan khusus untuk menggunakan v1.

Instrumen dengan ASP.NET Core

Catatan

Unduh proyek demo lengkap dan ikuti petunjuk dalam file README.md-nya.

Langkah 1: Instal paket NuGet

dotnet add package zipkin4net.middleware.aspnetcore
dotnet add package zipkin4net
PaketTujuan
zipkin4netPustaka pelacakan inti. Membuat rentang, mengelola pengambilan sampel, dan melaporkan data jejak ke backend yang kompatibel dengan Zipkin.
zipkin4net.middleware.aspnetcoreMiddleware ASP.NET Core. Secara otomatis membuat rentang server untuk setiap permintaan HTTP masuk.

Langkah 2: Daftarkan dan mulai tracer

Tambahkan kode berikut ke logika startup aplikasi Anda untuk mengonfigurasi zipkin4net dan menghubungkannya ke titik akhir ARMS Tracing Analysis Anda.

lifetime.ApplicationStarted.Register(() => {
    TraceManager.SamplingRate = 1.0f;
    var logger = new TracingLogger(loggerFactory, "zipkin4net");

    // Ganti dengan titik akhir Zipkin Anda dari Konsol Tracing Analysis.
    // Jangan tambahkan /api/v2/spans ke URL.
    var httpSender = new HttpZipkinSender("<your-zipkin-endpoint>", "application/json");

    var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer());
    TraceManager.RegisterTracer(tracer);
    TraceManager.Start(logger);
});
lifetime.ApplicationStopped.Register(() => TraceManager.Stop());
app.UseTracing(applicationName);

Ganti placeholder berikut dengan nilai aktual Anda:

PlaceholderDeskripsiContoh
<your-zipkin-endpoint>Titik akhir Zipkin dari Konsol Tracing Analysishttp://tracing-analysis-dc-hz.aliyuncs.com/adapt_your_token

Langkah 3: Lacak permintaan HTTP keluar

Tambahkan TracingHandler ke pipeline HttpClient Anda agar panggilan HTTP keluar secara otomatis dilacak dan dikorelasikan dengan rentang induk.

public override void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient("Tracer").AddHttpMessageHandler(provider =>
        TracingHandler.WithoutInnerHandler(provider.GetService<IConfiguration>()["applicationName"]));
}

Instrumen dengan OWIN

Open Web Interface for .NET (OWIN) adalah spesifikasi middleware untuk aplikasi web .NET Framework.

Catatan

Unduh proyek demo lengkap dan ikuti petunjuk dalam file README.md-nya.

Langkah 1: Instal paket NuGet

dotnet add package zipkin4net.middleware.aspnetcore
dotnet add package zipkin4net
PaketTujuan
zipkin4netPustaka pelacakan inti.
zipkin4net.middleware.aspnetcoreMiddleware ASP.NET Core. Secara otomatis membuat rentang server untuk setiap permintaan HTTP masuk.

Langkah 2: Daftarkan dan mulai tracer

// Konfigurasikan pelacakan.
TraceManager.SamplingRate = 1.0f;
var logger = new ConsoleLogger();

// Ganti dengan titik akhir Zipkin Anda dari Konsol Tracing Analysis.
// Jangan tambahkan /api/v2/spans ke URL.
var httpSender = new HttpZipkinSender("<your-zipkin-endpoint>", "application/json");

var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer());
TraceManager.RegisterTracer(tracer);
TraceManager.Start(logger);

// Hentikan TraceManager saat aplikasi dimatikan.
var properties = new AppProperties(appBuilder.Properties);
var token = properties.OnAppDisposing;

if (token != CancellationToken.None)
{
    token.Register(() =>
    {
        TraceManager.Stop();
    });
}

// Daftarkan middleware OWIN.
appBuilder.UseZipkinTracer(System.Configuration.ConfigurationManager.AppSettings["applicationName"]);

Langkah 3: Lacak permintaan HTTP keluar

Bungkus HttpClient Anda dengan TracingHandler untuk menyebarkan konteks jejak melintasi batas layanan.

using (var httpClient = new HttpClient(new TracingHandler(applicationName)))
{
    var response = await httpClient.GetAsync(callServiceUrl);
    var content = await response.Content.ReadAsStringAsync();

    await context.Response.WriteAsync(content);
}

Instrumen secara manual

Gunakan instrumentasi manual untuk mendapatkan kontrol penuh atas pembuatan rentang—misalnya, melacak pekerjaan latar belakang, konsumen pesan, atau protokol kustom.

Catatan

Unduh proyek demo lengkap dan ikuti petunjuk dalam file README.md-nya.

Langkah 1: Instal paket NuGet

Hanya pustaka pelacakan inti yang diperlukan untuk instrumentasi manual.

dotnet add package zipkin4net

Langkah 2: Daftarkan dan mulai tracer

TraceManager.SamplingRate = 1.0f;
var logger = new ConsoleLogger();

// Ganti dengan titik akhir Zipkin Anda dari Konsol Tracing Analysis.
// Jangan tambahkan /api/v2/spans ke URL.
var httpSender = new HttpZipkinSender("<your-zipkin-endpoint>", "application/json");

var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer());
TraceManager.RegisterTracer(tracer);
TraceManager.Start(logger);

Langkah 3: Buat dan catat rentang

Buat rentang akar untuk setiap permintaan atau operasi, lalu catat event siklus hidupnya.

var trace = Trace.Create();

Trace.Current = trace;
trace.Record(Annotations.ClientSend());

trace.Record(Annotations.Rpc("client"));
trace.Record(Annotations.Tag("mytag", "spanFrist"));
trace.Record(Annotations.ServiceName("dotnetManual"));
// ... lakukan operasi Anda di sini
testCall();

trace.Record(Annotations.ClientRecv());

Untuk mencatat rentang anak (misalnya, panggilan downstream dalam permintaan yang sama), panggil Child() pada jejak saat ini:

var trace = Trace.Current.Child();
Trace.Current = trace;
trace.Record(Annotations.ServerRecv());
trace.Record(Annotations.Rpc("server"));
trace.Record(Annotations.Tag("mytag", "spanSecond"));
trace.Record(Annotations.ServiceName("dotnetManual"));
// ... lakukan operasi Anda di sini
trace.Record(Annotations.ServerSend());

(Opsional) Langkah 4: Tambahkan tag kustom

Lampirkan tag kustom ke rentang untuk mempermudah troubleshooting. Misalnya, catat kode status HTTP atau tandai error.

tracer.activeSpan().setTag("http.status_code", "200");

Langkah 5: Sebarkan konteks jejak antar layanan

Dalam sistem terdistribusi, konteks jejak ikut serta dalam setiap permintaan RPC sehingga rentang dari layanan berbeda dapat dikorelasikan menjadi satu jejak tunggal. Pustaka zipkin4net menggunakan propagasi B3, yang meneruskan empat nilai melalui header HTTP:

Bidang JejakHeader HTTP
TraceIdX-B3-TraceId
ParentSpanIdX-B3-ParentSpanId
SpanIdX-B3-SpanId
SampledX-B3-Sampled
Rentang Klien                                                Rentang Server
┌──────────────────┐                                       ┌──────────────────┐
│                  │                                       │                  │
│   KonteksJejak   │           Header Permintaan HTTP      │   KonteksJejak   │
│ ┌──────────────┐ │          ┌───────────────────┐        │ ┌──────────────┐ │
│ │ TraceId      │ │          │ X-B3-TraceId      │        │ │ TraceId      │ │
│ │              │ │          │                   │        │ │              │ │
│ │ ParentSpanId │ │ Inject   │ X-B3-ParentSpanId │Extract │ │ ParentSpanId │ │
│ │              ├─┼─────────>│                   ├────────┼>│              │ │
│ │ SpanId       │ │          │ X-B3-SpanId       │        │ │ SpanId       │ │
│ │              │ │          │                   │        │ │              │ │
│ │ Sampled      │ │          │ X-B3-Sampled      │        │ │ Sampled      │ │
│ └──────────────┘ │          └───────────────────┘        │ └──────────────┘ │
│                  │                                       │                  │
└──────────────────┘                                       └──────────────────┘

Sisi klien — injeksikan konteks jejak ke header permintaan keluar:

_injector.Inject(clientTrace.Trace.CurrentSpan, request.Headers);

Sisi server — ekstrak konteks jejak dari header permintaan masuk:

var traceContext = traceExtractor.Extract(context.Request.Headers);
var trace = traceContext == null ? Trace.Create() : Trace.CreateFromId(traceContext);

Jika tidak ada konteks jejak dalam header masuk, jejak akar baru akan dibuat. Jika ada, jejak yang sudah ada akan dilanjutkan.

FAQ

T: Mengapa tidak ada data yang muncul di Konsol Tracing Analysis setelah saya menjalankan demo?

J: Verifikasi bahwa URL titik akhir Zipkin dalam konfigurasi HttpZipkinSender Anda benar. Salin titik akhir langsung dari Konsol Tracing Analysis. URL tersebut tidak boleh menyertakan /api/v2/spans.

// Benar: gunakan titik akhir dasar tanpa /api/v2/spans
var httpSender = new HttpZipkinSender("http://tracing-analysis-dc-hz.aliyuncs.com/adapt_your_token", "application/json");