全部产品
Search
文档中心

Managed Service for OpenTelemetry:Kembalikan ID jejak dalam header respons HTTP untuk aplikasi Java dan Node.js

更新时间:Jul 02, 2025

Topik ini menjelaskan cara mengembalikan ID jejak dalam header respons HTTP untuk aplikasi Java dan Node.js.

Aplikasi Java

Secara default, ID jejak hanya ditentukan dalam header permintaan HTTP. Untuk mengembalikan ID jejak dalam header respons HTTP, Anda dapat mengikuti petunjuk dalam topik ini dengan menambahkan ekstensi dari OpenTelemetry Java Agent yang menyediakan fitur tambahan berdasarkan OpenTelemetry Java Agent.

Gunakan salah satu metode berikut:

  • Metode 1: Gunakan layanan siap pakai. Anda dapat menggunakan ekstensi dari OpenTelemetry Java Agent yang dikemas oleh Managed Service for OpenTelemetry. Dengan cara ini, ID jejak dapat dengan mudah dikembalikan dalam header respons HTTP.

  • Metode 2: Buat ekstensi dari OpenTelemetry Java Agent. Jika ekstensi dari OpenTelemetry Java Agent yang disediakan oleh Managed Service for OpenTelemetry tidak memenuhi kebutuhan bisnis Anda, Anda dapat membuat ekstensi sendiri dari OpenTelemetry Java Agent dan mengemasnya sebagai file JAR.

Metode 1: Gunakan layanan siap pakai

URL unduhan ekstensi: ot-java-agent-extension-1.28.0.jar.

Managed Service for OpenTelemetry menyediakan ekstensi dasar dari OpenTelemetry Java Agent. Untuk memastikan bahwa ID jejak dan ID rentang dikembalikan dalam header respons HTTP, cukup modifikasi parameter startup dengan menambahkan jalur lengkap file JAR.

Cara Memodifikasi Parameter Startup

Jalankan perintah berikut untuk menambahkan parameter otel.javaagent.extensions ke parameter startup asli: -Dotel.javaagent.extensions=/path/to/opentelemetry-java-agent-extension.jar.

Contoh perintah startup lengkap:

java -javaagent:path/to/opentelemetry-javaagent.jar \
 -Dotel.javaagent.extensions=path/to/opentelemetry-java-agent-extension.jar \
 -Dotel.exporter.otlp.headers=Authentication=<token> \
 -Dotel.exporter.otlp.endpoint=<endpoint> \
 -Dotel.metrics.exporter=none \
 -jar your-app.jar

Metode 2: Buat ekstensi dari OpenTelemetry Java agent

Prasyarat

  • OpenTelemetry Java Agent telah dikonfigurasi.

  • Versi OpenTelemetry Java agent adalah 1.24.0 atau lebih baru.

  1. Tulis ekstensi dari OpenTelemetry Java Agent.

    1. Buat proyek baru.

    2. Tambahkan dependensi berikut ke file pom.xml.

      Versi dependensi Opentelemetry-javaagent harus sama dengan versi OpenTelemetry Java Agent.

       <dependencies>
       <dependency>
       <groupId>com.google.auto.service</groupId>
       <artifactId>auto-service</artifactId>
       <version>1.1.1</version>
       </dependency>
      
       <dependency>
       <groupId>io.opentelemetry.javaagent</groupId>
       <artifactId>opentelemetry-javaagent</artifactId>
       <version>1.28.0</version>
       <scope>compile</scope>
       </dependency>
       </dependencies>

    3. Buat kelas AgentHttpResponseCustomizer untuk mengimplementasikan HttpServerResponseCustomizer.

      package org.example;
      
      import com.google.auto.service.AutoService;
      import io.opentelemetry.javaagent.shaded.io.opentelemetry.api.trace.Span;
      import io.opentelemetry.javaagent.shaded.io.opentelemetry.api.trace.SpanContext;
      import io.opentelemetry.javaagent.shaded.io.opentelemetry.context.Context;
      import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizer;
      import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseMutator;
      
      @AutoService(HttpServerResponseCustomizer.class)
      public class AgentHttpResponseCustomizer implements HttpServerResponseCustomizer {
       @Override
       public <RESPONSE> void customize(Context context, RESPONSE response, HttpServerResponseMutator<RESPONSE> responseMutator) {
       SpanContext spanContext = Span.fromContext(context).getSpanContext();
       String traceId = spanContext.getTraceId();
       String spanId = spanContext.getSpanId();
      
       // Tambahkan ID jejak dan ID rentang ke header respons HTTP. Anda dapat mengubah nama bidang header sesuai kebutuhan.
       responseMutator.appendHeader(response, "TraceId", traceId);
       responseMutator.appendHeader(response, "SpanId", spanId);
       }
      }
  2. Bangun ekstensi dari OpenTelemetry Java Agent.

    Kemas proyek menjadi file JAR dan simpan file JAR di direktori target.

    mvn clean package
  3. Muat ekstensi dari OpenTelemetry Java Agent saat memulai aplikasi.

    Jalankan perintah berikut untuk menambahkan parameter otel.javaagent.extensions ke parameter startup asli: -Dotel.javaagent.extensions=/path/to/opentelemetry-java-agent-extension.jar.

    Contoh perintah startup lengkap:

    java -javaagent:path/to/opentelemetry-javaagent.jar \
     -Dotel.javaagent.extensions=path/to/opentelemetry-java-agent-extension.jar \
     -Dotel.exporter.otlp.headers=Authentication=<token> \
     -Dotel.exporter.otlp.endpoint=<endpoint> \
     -Dotel.metrics.exporter=none \
     -jar yourapp.jar

Aplikasi Node.js

  1. (Opsional) Jalankan proyek demo untuk mengintegrasikan aplikasi Node.js Anda dengan OpenTelemetry. URL unduhan: node.js-demo.

    Jika aplikasi Node.js Anda sudah terintegrasi dengan OpenTelemetry, Anda tidak perlu mengunduh proyek demo. Ikuti petunjuk pada langkah berikutnya untuk memodifikasi kode aplikasi Node.js.

  2. Modifikasi kode untuk membuat instrumentasi HTTP.

    Saat membuat instrumentasi HTTP, tentukan parameter HttpInstrumentationConfig seperti responseHook. Parameter responseHook membantu memodifikasi prosedur pembuatan respons. Anda dapat menggunakan parameter ini untuk menambahkan konten kustom ke header respons sebelum respons dikembalikan, misalnya menambahkan ID jejak ke header respons.

    ...
    
    // Konten yang akan diganti.
    // registerInstrumentations({
    // tracerProvider: provider,
    // instrumentations: [new HttpInstrumentation(), ExpressInstrumentation],
    // });
    
    
    
    
    const httpInstrumentation = new HttpInstrumentation({
     // Tambahkan hook respons kustom.
     responseHook: (span, response) => {
    
     // Dapatkan ID jejak dan ID rentang dari konteks.
     const traceId = span.spanContext().traceId;
     const spanId = span.spanContext().spanId;
    
     // Tambahkan ID jejak dan ID rentang ke header respons HTTP.
     response.setHeader('TraceId', traceId);
     response.setHeader('SpanId', spanId);
     // Kembalikan objek respons.
     return response;
     },
    });
    
    
    registerInstrumentations({
     tracerProvider: provider,
     instrumentations: [httpInstrumentation, ExpressInstrumentation],
    });
    
    ...