All Products
Search
Document Center

Managed Service for OpenTelemetry:Laporkan data aplikasi Java menggunakan Jaeger

Last Updated:Jun 21, 2026

Setelah Anda menginstrumentasi aplikasi dengan Jaeger dan melaporkan trace data ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi Anda. Anda dapat melihat serangkaian data pemantauan, seperti topologi aplikasi, jejak (traces), transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara melakukan instrumentasi manual serta instrumentasi otomatis menggunakan komponen Spring Cloud dan gRPC.

Penting

Untuk fitur lanjutan dan kemampuan pelacakan terdistribusi, kami menyarankan menyambungkan aplikasi Anda ke Managed Service for OpenTelemetry menggunakan protokol OpenTelemetry.

Panduan integrasi OpenTelemetry terperinci dan praktik terbaik kami membantu Anda memulai dengan Managed Service for OpenTelemetry. Untuk informasi selengkapnya, lihat Connect an application.

Prasyarat

Dapatkan informasi endpoint

Konsol baru

  1. Masuk ke Konsol Managed Service for OpenTelemetry. Di panel navigasi sebelah kiri, klik Integration Center.

  2. Di area Server-side Applications, klik kartu Jaeger.

  3. Di panel Jaeger, pilih wilayah tempat Anda ingin melaporkan data.

    Catatan

    Sumber daya akan diprovisikan secara otomatis saat Anda pertama kali mengakses suatu wilayah.

  4. Pilih Connection Type dan Export Protocol, lalu salin informasi endpoint.

    • Connection Type: Jika layanan Anda diterapkan di Alibaba Cloud dan wilayahnya sama dengan wilayah integrasi yang dipilih, gunakan jaringan VPC Alibaba Cloud. Jika tidak, gunakan jaringan publik.

    • Export Protocol: Pilih protokol yang didukung oleh klien Anda. Misalnya, Anda dapat memilih gRPC.

    Perintah untuk metode agen gRPC berformat ./jaeger-agent --reporter.grpc.host-port=<Endpoint Address>:1883 --agent.tags=Authentication=<Token>. Alamat endpoint dibuat secara otomatis berdasarkan wilayah dan jenis koneksi yang dipilih. Gunakan parameter --agent.tags untuk Jaeger Agent versi 1.15 atau lebih baru. Untuk versi sebelumnya, gunakan --jaeger.tags.

Konsol lama

  1. Masuk ke Konsol Managed Service for OpenTelemetry.

  2. Di panel navigasi sebelah kiri, klik Cluster Configurations, lalu klik tab Endpoint Information di sebelah kanan.

  3. Di bagian atas halaman, pilih wilayah untuk integrasi, lalu aktifkan sakelar Show Token di area Cluster Information.

  4. Di area Client-side Collection Tools, klik Jaeger.

    Di kolom Related Information, peroleh informasi endpoint. Setelah Anda mengklik Jaeger, halaman akan menampilkan tabel berisi endpoint untuk wilayah saat ini, misalnya China (Shanghai). Metode pelaporan data adalah Direct reporting. Kolom Related Information berisi URL untuk pelaporan data melalui HTTP (untuk jaringan publik dan VPC Alibaba Cloud) serta perintah untuk pelaporan data melalui agen (untuk jaringan publik dan VPC). Contohnya, perintah agen untuk jaringan publik adalah ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sh.aliyuncs.com:1883 --agent.tags=Authentication=<Token>. Salin endpoint yang sesuai untuk konfigurasi klien Anda. Catatan: Perintah yang ditampilkan menggunakan --agent.tags, yang kompatibel dengan Jaeger Agent 1.15 dan versi lebih baru. Untuk versi sebelumnya, gunakan --jaeger.tags.

    Catatan

    Jika aplikasi Anda diterapkan di Alibaba Cloud pada wilayah yang sama dengan wilayah integrasi yang dipilih, gunakan endpoint jaringan VPC Alibaba Cloud. Jika tidak, gunakan endpoint jaringan publik.

Informasi latar belakang

Jaeger adalah sistem pelacakan terdistribusi open source yang kompatibel dengan API OpenTracing dan merupakan proyek lulusan dari Cloud Native Computing Foundation (CNCF). Sistem ini mengumpulkan data pemantauan waktu nyata dari berbagai sistem heterogen. Komunitas OpenTracing menyediakan banyak komponen yang mendukung berbagai framework Java. Contohnya meliputi:

Untuk melaporkan data aplikasi Java ke konsol Managed Service for OpenTelemetry menggunakan Jaeger, Anda harus terlebih dahulu menginstrumentasi aplikasi tersebut. Anda dapat melakukan instrumentasi manual atau menggunakan berbagai plugin yang tersedia untuk instrumentasi otomatis. Topik ini menjelaskan tiga metode instrumentasi berikut.

  • Instrumentasi manual

  • Instrumentasi menggunakan komponen Spring Cloud

  • Instrumentasi menggunakan komponen gRPC

Bagaimana data dilaporkan?

  • Gambar berikut menunjukkan cara melaporkan data tanpa menggunakan agen Jaeger.

  • Gambar berikut menunjukkan cara melaporkan data dengan menggunakan agen Jaeger.

Instrumentasi aplikasi Java

Sebelum Anda dapat menggunakan Jaeger untuk mengirimkan data aplikasi Java ke Managed Service for OpenTelemetry, Anda harus menginstrumentasi aplikasi tersebut. Dalam contoh ini, aplikasi diinstrumentasi secara manual.

  1. Unduh proyek demo. Buka direktori manualDemo dan jalankan program sesuai petunjuk dalam file README.md.

  2. Tambahkan dependensi berikut untuk klien Jaeger ke file pom.xml:

    <dependency>
        <groupId>io.jaegertracing</groupId>
        <artifactId>jaeger-client</artifactId>
        <version>0.31.0</version>
    </dependency>
  3. Konfigurasikan parameter inisialisasi dan buat tracer.

    Tracer dapat digunakan untuk membuat span guna mencatat waktu operasi terdistribusi, mentransmisikan data antar server dalam mode pass-through menggunakan metode Extract atau Inject, atau menentukan span saat ini. Tracer juga berisi data seperti endpoint yang digunakan untuk pelaporan data, alamat IP lokal, laju pengambilan sampel, dan nama layanan. Anda dapat menyesuaikan laju pengambilan sampel untuk mengurangi overhead akibat pelaporan data.

    Catatan

    Ganti <endpoint> dengan endpoint yang Anda peroleh di bagian "Prasyarat" topik ini.

    // Ganti manualDemo dengan nama aplikasi Anda.
    io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("manualDemo");
    io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration();
    // Ganti <endpoint> dengan endpoint yang Anda peroleh di bagian "Prasyarat" topik ini. 
    sender.withEndpoint("<endpoint>");
    config.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType("const").withParam(1));
    config.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withSender(sender).withMaxQueueSize(10000));
    // Atur tag sumber daya, seperti versi aplikasi dan lingkungan penerapan.
    Map<String, String> map = new HashMap<>();
    map.put("service.version", "1.0.0");
    map.put("deployment.environment", "test");
    config.withTracerTags(map);
    GlobalTracer.register(config.getTracer());
  4. Catat data permintaan.

    Tracer tracer = GlobalTracer.get();
    // Buat span. 
    Span span = tracer.buildSpan("parentSpan").withTag("myTag", "spanFirst").start();
    tracer.scopeManager().activate(span, false);
    tracer.activeSpan().setTag("methodName", "testTracing");
    // Logika bisnis. 
    secondBiz();
    span.finish();
  5. Opsi. Anda dapat menjalankan kode di atas untuk membuat root span guna mencatat operasi akar dari suatu permintaan. Jika Anda ingin mencatat operasi sebelum dan sesudah permintaan, tentukan informasi konteksnya.

    Tracer tracer = GlobalTracer.get();
    Span parentspan = tracer.activeSpan();
    Tracer.SpanBuilder spanBuilder = tracer.buildSpan("childSpan").withTag("myTag", "spanSecond");
    if (parentspan !=null) {
        spanBuilder.asChildOf(parentspan).start();
    }
    Span childSpan = spanBuilder.start();
    Scope scope = tracer.scopeManager().activate(childSpan); // Pernyataan ini dijalankan sekali saat permintaan dimulai.
    // Logika bisnis. Fungsi buildSpan dapat dijalankan beberapa kali.
    childSpan.finish();
    tracer.activeSpan().setTag("methodName", "testCall");
    
    // Pernyataan ini dijalankan sekali saat permintaan berakhir.
    scope.close();
  6. Opsi. Untuk mempermudah pemecahan masalah, Anda dapat menambahkan tag kustom ke span. Misalnya, tambahkan tag kustom untuk memeriksa apakah terjadi error atau mencatat nilai kembali dari suatu permintaan.

    tracer.activeSpan().setTag("methodName", "testCall");
  7. Dalam sistem terdistribusi, permintaan remote procedure call (RPC) dikirim bersama data jejak. Data jejak berisi nilai parameter TraceId, ParentSpanId, SpanId, dan Sampled. Anda dapat memanggil metode Extract atau Inject untuk meneruskan data jejak dalam header permintaan HTTP. Gambar berikut menunjukkan seluruh prosesnya.

    1.jpg

    1. Panggil metode Inject di sisi klien untuk menentukan informasi konteks.

      private void attachTraceInfo(Tracer tracer, Span span, final Request request) {
              tracer.inject(span.context(), Format.Builtin.TEXT_MAP, new TextMap() {
                  @Override
                  public void put(String key, String value) {
                      request.setHeader(key, value);
                  }
                  @Override
                  public Iterator<Map.Entry<String, String>> iterator() {
                      throw new UnsupportedOperationException("TextMapInjectAdapter should only be used with Tracer.inject()");
                  }
              });
          }
    2. Panggil metode Extract di sisi server untuk mengekstrak informasi konteks.

      protected Span extractTraceInfo(Request request, Tracer tracer) {
          Tracer.SpanBuilder spanBuilder = tracer.buildSpan("/api/xtrace/test03");
          try {
              SpanContext spanContext = tracer.extract(Format.Builtin.TEXT_MAP, new TextMapExtractAdapter(request.getAttachments()));
              if (spanContext !=null) {
                  spanBuilder.asChildOf(spanContext);
              }
          } catch (Exception e) {
              spanBuilder.withTag("Error", "extract from request fail, error msg:" + e.getMessage());
          }
          return spanBuilder.start();
      }
                                      

Instrumentasi aplikasi Java dengan Spring Cloud

Untuk melaporkan data aplikasi Java ke konsol Managed Service for OpenTelemetry menggunakan Jaeger, Anda harus terlebih dahulu melakukan instrumentasi. Contoh ini menggunakan komponen Spring Cloud untuk instrumentasi. Spring Cloud menyediakan instrumentasi untuk komponen-komponen berikut:

  • @Async, @Scheduled, Executors

  • Feign, HystrixFeign

  • Hystrix

  • JDBC

  • JMS

  • Mongo

  • RabbitMQ

  • Redis

  • RxJava

  • Spring Messaging - Jejak dikirim melalui saluran pesan.

  • Spring Web (RestControllers, RestTemplates, WebAsyncTask)

  • Standard Logging - Log ditambahkan ke Span saat ini.

  • WebSocket STOMP

  • Zuul

Catatan

Unduh proyek demo, buka direktori springMvcDemo/webmvc4-boot, dan jalankan program sesuai petunjuk dalam file README.

  1. Buka file pom.xml dan tambahkan dependensi JAR.

    <dependency>
       <groupId>io.opentracing.contrib</groupId>
      <artifactId>opentracing-spring-cloud-starter</artifactId>
      <version>0.5.8</version>
    </dependency>
    <dependency>
      <groupId>io.jaegertracing</groupId>
      <artifactId>jaeger-client</artifactId>
      <version>1.4.0</version>
    </dependency>
  2. Tambahkan bean OpenTracing Tracer.

    Catatan

    Ganti <endpoint> dengan endpoint yang Anda peroleh di bagian "Prasyarat" topik ini.

    @Bean
    public io.opentracing.Tracer tracer() {
        io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("springFrontend");
        io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration();
        sender.withEndpoint("<endpoint>");
        config.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType("const").withParam(1));
        config.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withSender(sender).withMaxQueueSize(10000));
        return config.getTracer();
    }

Instrumentasi aplikasi Java dengan gRPC

Untuk mengirim data aplikasi Java ke konsol Managed Service for OpenTelemetry menggunakan Jaeger, Anda harus terlebih dahulu menginstrumentasi aplikasi Anda. Contoh ini menggunakan komponen gRPC untuk instrumentasi.

Catatan

Unduh proyek demo, buka direktori grpcDemo, dan jalankan program sesuai petunjuk dalam file README.

  1. Buka file pom.xml dan tambahkan dependensi JAR.

    <dependency>
        <groupId>io.opentracing.contrib</groupId>
        <artifactId>opentracing-grpc</artifactId>
        <version>0.2.3</version>
    </dependency>
  2. Di sisi server, inisialisasi objek Tracer, buat ServerTracingInterceptor, lalu tambahkan sebagai interceptor server.

    import io.opentracing.Tracer;
        public class YourServer {
            private int port;
            private Server server;
            private final Tracer tracer;
            private void start() throws IOException {
                ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(this.tracer);
                // Jika menggunakan GlobalTracer: 
                // ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor();
                server = ServerBuilder.forPort(port)
                    .addService(tracingInterceptor.intercept(someServiceDef))
                    .build()
                    .start();
            }
        }
  3. Di sisi klien, inisialisasi objek Tracer, buat ClientTracingInterceptor, lalu tambahkan sebagai interceptor channel klien.

    import io.opentracing.Tracer;
        public class YourClient {
            private final ManagedChannel channel;
            private final GreeterGrpc.GreeterBlockingStub blockingStub;
            private final Tracer tracer;
            public YourClient(String host, int port) {
                channel = ManagedChannelBuilder.forAddress(host, port)
                    .usePlaintext(true)
                    .build();
                ClientTracingInterceptor tracingInterceptor = new ClientTracingInterceptor(this.tracer);
                // Jika menggunakan GlobalTracer: 
                // ClientTracingInterceptor tracingInterceptor = new ClientTracingInterceptor();
                blockingStub = GreeterGrpc.newBlockingStub(tracingInterceptor.intercept(channel));
            }
        }
                            

FAQ

T: Program demo saya berjalan tanpa error, tetapi tidak ada data yang muncul di konsol. Apa penyebabnya?

J: Debug metode io.jaegertracing.thrift.internal.senders.HttpSender.send(Process process, List<Span> spans) dan periksa nilai kembalinya saat data dilaporkan. Jika muncul error 403, artinya konfigurasi endpoint salah. Harap periksa dan perbaiki.