全部产品
Search
文档中心

Managed Service for OpenTelemetry:Gunakan Zipkin untuk melaporkan data aplikasi .NET

更新时间:Jul 02, 2025

Zipkin adalah sistem pelacakan terdistribusi sumber terbuka yang dikembangkan oleh Twitter untuk melacak data secara real-time. Sistem ini digunakan untuk mengumpulkan data pemantauan dari berbagai sistem heterogen. Anda dapat menggunakan Zipkin untuk melaporkan data aplikasi .NET di Analisis Tracing. Metode ini juga berlaku untuk aplikasi C#.

Prasyarat

Untuk mendapatkan titik akhir Jaeger atau Zipkin, ikuti langkah-langkah berikut:

  1. Masuk ke Konsol Managed Service for OpenTelemetry.

  2. Di bilah navigasi kiri, klik Cluster Configurations. Di halaman yang muncul, klik tab Access point information.

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

  4. Atur parameter Client ke Jaeger atau Zipkin. Dalam contoh ini, Jaeger dipilih.

    Dapatkan titik akhir Jaeger atau Zipkin di kolom Related Information tabel di bagian bawah.

    Jaeger/Zipkin接入点信息

    Catatan

    Jika aplikasi Anda diterapkan di lingkungan produksi Alibaba Cloud, gunakan titik akhir VPC. Jika tidak, gunakan titik akhir publik. Secara umum, gunakan titik akhir v2 untuk Zipkin. Gunakan titik akhir v1 hanya jika Anda memahami Zipkin dengan baik.

Gunakan ASP.NET Core untuk instrumentasi aplikasi .NET

Ikuti langkah-langkah berikut untuk menggunakan ASP.NET Core dalam melakukan instrumentasi aplikasi:

Catatan Unduh proyek demo dan jalankan program sesuai instruksi dalam file README.md.
  1. Instal paket NuGet.
    // Tambahkan komponen berikut:
    // zipkin4net.middleware.aspnetcore, middleware ASP.NET Core
    // zipkin4net, tracer
    
    dotnet add  package zipkin4net.middleware.aspnetcore
    dotnet add  package zipkin4net
  2. Daftarkan dan mulai Zipkin.
    lifetime.ApplicationStarted.Register(() => {
        TraceManager.SamplingRate = 1.0f;
        var logger = new TracingLogger(loggerFactory, "zipkin4net");
        // Dapatkan titik akhir Zipkin di konsol Analisis Tracing. Perhatikan bahwa titik akhir tidak mengandung /api/v2/spans.
        var httpSender = new HttpZipkinSender("http://tracing-analysis-dc-hz.aliyuncs.com/adapt_your_token", "application/json");
    
        var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer());
        TraceManager.RegisterTracer(tracer);
        TraceManager.Start(logger);
     });
    lifetime.ApplicationStopped.Register(() => TraceManager.Stop());
    app.UseTracing(applicationName);
  3. Tambahkan TracingHandler ke HttpClient yang mengirim permintaan GET atau POST.
    public override void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpClient("Tracer").AddHttpMessageHandler(provider =>
            TracingHandler.WithoutInnerHandler(provider.GetService<IConfiguration>()["applicationName"]));
    }

Gunakan OWIN untuk instrumentasi aplikasi .NET

Ikuti langkah-langkah berikut untuk menggunakan Open Web Interface for .NET (OWIN) dalam melakukan instrumentasi aplikasi:

Catatan Unduh proyek demo dan jalankan program sesuai instruksi dalam file README.md.
  1. Instal paket NuGet.
    // Tambahkan komponen berikut:
    // zipkin4net.middleware.aspnetcore, middleware ASP.NET Core
    // zipkin4net, tracer
    
    dotnet add  package zipkin4net.middleware.aspnetcore
    dotnet add  package zipkin4net
  2. Daftarkan dan mulai Zipkin.
    // Konfigurasikan tracing.
    TraceManager.SamplingRate = 1.0f;
    var logger = new ConsoleLogger();
    // Dapatkan titik akhir Zipkin di konsol Analisis Tracing. Perhatikan bahwa titik akhir tidak mengandung /api/v2/spans.
    var httpSender = new HttpZipkinSender("http://tracing-analysis-dc-hz.aliyuncs.com/adapt_your_token", "application/json");
    
    var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer());
    TraceManager.RegisterTracer(tracer);
    TraceManager.Start(logger);
    
    //Hentikan TraceManager saat aplikasi dibuang
    var properties = new AppProperties(appBuilder.Properties);
    var token = properties.OnAppDisposing;
    
    if (token != CancellationToken.None)
    {
    token.Register(() =>
    {
    TraceManager.Stop();
    });
    }
    
    // Atur Middleware Owin
    appBuilder.UseZipkinTracer(System.Configuration.ConfigurationManager.AppSettings["applicationName"]);                        
  3. Tambahkan TracingHandler ke HttpClient yang mengirim permintaan GET atau POST.
    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);
        }

Instrumentasi manual aplikasi .NET

Bagian sebelumnya menjelaskan cara menggunakan komponen yang ada untuk melakukan instrumentasi aplikasi .NET. Anda juga dapat melakukan instrumentasi manual pada aplikasi .NET sehingga dapat menggunakan Zipkin untuk melaporkan data aplikasi ke konsol Analisis Tracing.

Catatan Unduh proyek demo dan jalankan program sesuai instruksi dalam file README.md.
  1. Instal paket NuGet.
    // Tambahkan zipkin4net, tracer.
    
    dotnet add  package zipkin4net
  2. Daftarkan dan mulai Zipkin.
    TraceManager.SamplingRate = 1.0f;
    var logger = new ConsoleLogger();
    // Dapatkan titik akhir Zipkin di konsol Analisis Tracing. Perhatikan bahwa titik akhir tidak mengandung /api/v2/spans.
    var httpSender = new HttpZipkinSender("http://tracing-analysis-dc-hz.aliyuncs.com/adapt_your_token", "application/json");
    
    var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer());
    TraceManager.RegisterTracer(tracer);
    TraceManager.Start(logger);
  3. Catat data permintaan.
    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 sesuatu
    testCall();
    
    trace.Record(Annotations.ClientRecv());
    Catatan

    Anda dapat menjalankan kode di atas untuk mencatat operasi root dari sebuah permintaan. Jika perlu mencatat operasi sebelum dan sesudah permintaan, panggil metode Child. Contoh kode:

    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 sesuatu
    trace.Record(Annotations.ServerSend());
  4. Opsional:Tambahkan tag kustom ke rentang untuk pemecahan masalah cepat. Misalnya, Anda dapat menambahkan tag kustom untuk memeriksa apakah terjadi kesalahan atau untuk mencatat nilai balik dari sebuah permintaan.
    tracer.activeSpan().setTag("http.status_code", "200");
  5. Dalam sistem terdistribusi, permintaan prosedur jarak jauh (RPC) dikirim bersama dengan data jejak. Data jejak berisi nilai-nilai parameter TraceId, ParentSpanId, SpanId, dan Sampled. Anda dapat memanggil metode Extract atau Inject untuk melewatkan data dalam header permintaan HTTP. Proses keseluruhan adalah sebagai berikut.
       Client Span                                                Server Span
    ┌──────────────────┐                                       ┌──────────────────┐
    │                  │                                       │                  │
    │   TraceContext   │           Http Request Headers        │   TraceContext   │
    │ ┌──────────────┐ │          ┌───────────────────┐        │ ┌──────────────┐ │
    │ │ TraceId      │ │          │ X-B3-TraceId      │        │ │ TraceId      │ │
    │ │              │ │          │                   │        │ │              │ │
    │ │ ParentSpanId │ │ Inject   │ X-B3-ParentSpanId │Extract │ │ ParentSpanId │ │
    │ │              ├─┼─────────>│                   ├────────┼>│              │ │
    │ │ SpanId       │ │          │ X-B3-SpanId       │        │ │ SpanId       │ │
    │ │              │ │          │                   │        │ │              │ │
    │ │ Sampled      │ │          │ X-B3-Sampled      │        │ │ Sampled      │ │
    │ └──────────────┘ │          └───────────────────┘        │ └──────────────┘ │
    │                  │                                       │                  │
    └──────────────────┘                                       └──────────────────┘
    1. Panggil metode Inject pada klien untuk menyuntikkan informasi konteks.
      _injector.Inject(clientTrace.Trace.CurrentSpan, request.Headers);
    2. Panggil metode Extract pada server untuk mengekstrak informasi konteks.
      Ivar traceContext = traceExtractor.Extract(context.Request.Headers);
      var trace = traceContext == null ? Trace.Create() : Trace.CreateFromId(traceContext);

FAQ

T: Mengapa tidak ada data dilaporkan ke konsol setelah program demo dijalankan?

A: Periksa apakah Anda telah mengonfigurasi titik akhir yang benar di senderConfiguration.

// Dapatkan titik akhir Zipkin di konsol Analisis Tracing. Perhatikan bahwa titik akhir tidak mengandung /api/v2/spans.
var httpSender = new HttpZipkinSender("http://tracing-analysis-dc-hz.aliyuncs.com/adapt_your_token", "application/json");