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.jarMetode 2: Buat ekstensi dari OpenTelemetry Java agent
Prasyarat
OpenTelemetry Java Agent telah dikonfigurasi.
Versi OpenTelemetry Java agent adalah 1.24.0 atau lebih baru.
Tulis ekstensi dari OpenTelemetry Java Agent.
Buat proyek baru.
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>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); } }
Bangun ekstensi dari OpenTelemetry Java Agent.
Kemas proyek menjadi file JAR dan simpan file JAR di direktori target.
mvn clean packageMuat 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
(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.
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], }); ...