Setelah mengintegrasikan layanan sub Pemantauan Aplikasi dari Application Real-Time Monitoring Service (ARMS) untuk memantau aplikasi berbasis kerangka kerja Java umum, agen ARMS secara otomatis memperalat kerangka kerja tersebut. Dengan cara ini, jejak dikumpulkan tanpa perlu memodifikasi kode Anda. Namun, untuk mengoper konteks lintas-proses, Anda dapat menginstal OpenTelemetry SDK untuk Java.
Untuk informasi tentang komponen dan kerangka kerja yang didukung oleh agen ARMS, lihat Komponen dan kerangka kerja Java yang didukung oleh ARMS.
Skenario
Ketika menggunakan protokol eksklusif untuk komunikasi lintas-proses, klien dan server mungkin tidak terhubung dalam jejak. Dalam kasus seperti itu, Anda harus secara manual mengambil konteks jejak di sisi klien, termasuk ID jejak, ID rentang, flag sampel, dan baggage, lalu mengoper konteks ke sisi server.
Prasyarat
Pemantauan Aplikasi ARMS telah diintegrasikan. Untuk informasi lebih lanjut, lihat Ikhtisar Pemantauan Aplikasi.
Agen ARMS adalah versi 4.x atau lebih baru. Untuk informasi tentang cara memperbarui agen ARMS, lihat Perbarui agen ARMS.
Tambahkan dependensi
Tambahkan dependensi Maven berikut untuk memperkenalkan OpenTelemetry SDK untuk Java. Untuk informasi lebih lanjut, lihat Instrumentasi.
<dependencies>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-trace</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-bom</artifactId>
<version>1.23.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>Oper konteks lintas-proses
Dalam kode berikut, CustomRpcCallMessage menunjukkan entitas yang digunakan untuk komunikasi lintas-proses dalam protokol eksklusif, dan menggunakan headerMap untuk mengoper konteks. Jika headerMap hilang, modifikasi kode secara manual untuk menambahkan bidang headerMap.
class CustomRpcCallMessage {
private Map<String, String> headerMap;
//Omit other fields.
public String getHeader(String key) {
return headerMap.get(key);
}
public void setHeader(String key, String value) {
this.headerMap.put(key, value);
}
public Map<String, String> getHeaderMap() {
return headerMap;
}
}
public class CrossProcessPropagateDemo {
public static void clientSide(String[] args) {
CustomRpcCallMessage rpcCall = new CustomRpcCallMessage();
TextMapSetter<CustomRpcCallMessage> setter = new TextMapSetter<CustomRpcCallMessage>() {
@Override
public void set(CustomRpcCallMessage carrier, String key, String value) {
carrier.setHeader(key, value);
}
};
W3CTraceContextPropagator.getInstance().inject(Context.current(), rpcCall, setter);
W3CBaggagePropagator.getInstance().inject(Context.current(), rpcCall, setter);
}
private static void serverSide() {
//Receive requests from the server.
CustomRpcCallMessage rpcCall ;
TextMapGetter<CustomRpcCallMessage> getter = new TextMapGetter<CustomRpcCallMessage>() {
@Override
public Iterable<String> keys(CustomRpcCallMessage carrier) {
return carrier.getHeaderMap().keySet();
}
@Override
public String get(CustomRpcCallMessage carrier, String key) {
return carrier.getHeader(key);
}
};
Context context = W3CTraceContextPropagator.getInstance().extract(Context.current(), rpcCall, getter);
context = W3CBaggagePropagator.getInstance().extract(context, rpcCall, getter);
try (Scope scope = context.makeCurrent()) {
//Omit the server processing logic.
}
}
}
Dalam skenario bisnis nyata, Anda hanya perlu memodifikasi kelas implementasi variabel setter dan getter dalam potongan kode sebelumnya. Ini memastikan bahwa metode set dan get menyampaikan makna yang dimaksudkan.
Langkah terkait
Anda dapat mengaitkan ID jejak dengan log aplikasi untuk segera menemukan, menganalisis, dan menyelesaikan kesalahan. Untuk informasi lebih lanjut, lihat Kaitkan ID jejak dengan log untuk aplikasi Java.