全部产品
Search
文档中心

Managed Service for OpenTelemetry:Gunakan OpenTelemetry untuk melaporkan data jejak aplikasi Java

更新时间:Jul 02, 2025

Setelah Anda menggunakan OpenTelemetry untuk menginstrumentasi aplikasi dan melaporkan data jejak ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi. Anda dapat melihat data pemantauan aplikasi, seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan agen atau OpenTelemetry SDK untuk Java untuk secara otomatis atau manual menginstrumentasi aplikasi Java dan melaporkan data jejak aplikasi Java.

Informasi latar belakang

Tabel berikut mencantumkan kerangka kerja Java yang dapat diinstrumentasi secara otomatis oleh agen Java OpenTelemetry. Untuk informasi lebih lanjut, lihat Perpustakaan, kerangka kerja, server aplikasi, dan JVM yang didukung.

Kerangka Kerja Java yang Didukung

Kerangka Kerja

Versi Kerangka Kerja

Akka Actors

2.5 atau lebih baru

Akka HTTP

10.0 atau lebih baru

Apache Axis2

1.6 atau lebih baru

Apache Camel

2.20 atau lebih baru (tidak termasuk 3.x)

Apache DBCP

2.0 atau lebih baru

Apache CXF JAX-RS

3.2 atau lebih baru

Apache CXF JAX-WS

3.0 atau lebih baru

Apache Dubbo

2.7 atau lebih baru

Apache HttpAsyncClient

4.1 atau lebih baru

Apache HttpClient

2.0 atau lebih baru

Apache Kafka Producer/Consumer API

0.11 atau lebih baru

Apache Kafka Streams API

0.11 atau lebih baru

Apache MyFaces

1.2 atau lebih baru (tidak termasuk 3.x)

Apache Pulsar

2.8 atau lebih baru

Apache RocketMQ gRPC/Protobuf-based Client

5.0 atau lebih baru

Apache RocketMQ Remoting-based Client

4.8 atau lebih baru

Apache Struts 2

2.3 atau lebih baru

Apache Tapestry

5.4 atau lebih baru

Apache Wicket

8.0 atau lebih baru

Armeria

1.3 atau lebih baru

AsyncHttpClient

1.9 atau lebih baru

AWS Lambda

1.0 atau lebih baru

AWS SDK

1.11.x dan 2.2 atau lebih baru

Azure Core

1.14 atau lebih baru

Cassandra Driver

3.0 atau lebih baru

Couchbase Client

2.0 atau lebih baru dan 3.1 atau lebih baru

c3p0

0.9.2 atau lebih baru

Dropwizard Metrics

4.0 atau lebih baru (dinonaktifkan secara default)

Dropwizard Views

0.7 atau lebih baru

Eclipse Grizzly

2.3 atau lebih baru

Eclipse Jersey

2.0 atau lebih baru (tidak termasuk 3.x)

Eclipse Jetty HTTP Client

9.2 atau lebih baru (tidak termasuk 10 atau lebih baru)

Eclipse Metro

2.2 atau lebih baru

Eclipse Mojarra

1.2 atau lebih baru (tidak termasuk 3.x)

Elasticsearch API Client

7.16 atau lebih baru dan 8.0 atau lebih baru

Elasticsearch REST Client

5.0 atau lebih baru

Elasticsearch Transport Client

5.0 atau lebih baru

Finatra

2.9 atau lebih baru

Geode Client

1.4 atau lebih baru

Google HTTP Client

1.19 atau lebih baru

Grails

3.0 atau lebih baru

GraphQL Java

12.0 atau lebih baru

gRPC

1.6 atau lebih baru

Guava ListenableFuture

10.0 atau lebih baru

GWT

2.0 atau lebih baru

Hibernate

3.3 atau lebih baru

Hibernate Reactive

1.0 atau lebih baru

HikariCP

3.0 atau lebih baru

HttpURLConnection

Java 8 atau lebih baru

Hystrix

1.4 atau lebih baru

Java Executors

Java 8 atau lebih baru

Java Http Client

Java 11 atau lebih baru

java.util.logging

Java 8 atau lebih baru

Java Platform

Java 8 atau lebih baru

JAX-RS

0.5 atau lebih baru

JAX-RS Client

1.1 atau lebih baru

JAX-WS

2.0 atau lebih baru (tidak termasuk 3.x)

JBoss Log Manager

1.1 atau lebih baru

JDBC

Java 8 atau lebih baru

Jedis

1.4 atau lebih baru

JMS

1.1 atau lebih baru

Jodd Http

4.2 atau lebih baru

JSP

2.3 atau lebih baru

Kotlin Coroutines

1.0 atau lebih baru

Ktor

1.0 atau lebih baru

Kubernetes Client

7.0 atau lebih baru

Lettuce

4.0 atau lebih baru

Log4j 1

1.2 atau lebih baru

Log4j 2

2.11 atau lebih baru

Logback

1.0 atau lebih baru

Micrometer

1.5 atau lebih baru

MongoDB Driver

3.1 atau lebih baru

Netty

3.8 atau lebih baru

OkHttp

2.2 atau lebih baru

Oracle UCP

11.2 atau lebih baru

OSHI

5.3.1 atau lebih baru

Play

2.4 atau lebih baru

Play WS

1.0 atau lebih baru

Quartz

2.0 atau lebih baru

R2DBC

1.0 atau lebih baru

RabbitMQ Client

2.7 atau lebih baru

Ratpack

1.4 atau lebih baru

Reactor

3.1 atau lebih baru

Reactor Netty

0.9 atau lebih baru

Rediscala

1.8 atau lebih baru

Redisson

3.0 atau lebih baru

RESTEasy

3.0 atau lebih baru

Restlet

1.0 atau lebih baru

RMI

Java 8 atau lebih baru

RxJava

1.0 atau lebih baru

Scala ForkJoinPool

2.8 atau lebih baru

Servlet

2.2 atau lebih baru

Spark Web Framework

2.3 atau lebih baru

Spring Boot

Tidak tersedia

Spring Batch

3.0 atau lebih baru (tidak termasuk 5.0 atau lebih baru)

Spring Cloud Gateway

2.0 atau lebih baru

Spring Data

1.8 atau lebih baru

Spring Integration

4.1 atau lebih baru (tidak termasuk 6.0 atau lebih baru)

Spring JMS

2.0 atau lebih baru

Spring Kafka

2.7 atau lebih baru

Spring RabbitMQ

1.0 atau lebih baru

Spring Scheduling

3.1 atau lebih baru

Spring RestTemplate

3.1 atau lebih baru

Spring Web MVC

3.1 atau lebih baru

Spring Web Services

2.0 atau lebih baru

Spring WebFlux

5.3 atau lebih baru

Spymemcached

2.12 atau lebih baru

Tomcat JDBC Pool

8.5 atau lebih baru

Twilio

6.6 atau lebih baru (tidak termasuk 8.x)

Undertow

1.4 atau lebih baru

Vaadin

14.2 atau lebih baru

Vert.x Web

3.0 atau lebih baru

Vert.x HttpClient

3.0 atau lebih baru

Vert.x Kafka Client

3.6 atau lebih baru

Vert.x RxJava2

3.5 atau lebih baru

Vert.x SQL Client

4.0 atau lebih baru

Vibur DBCP

11.0 atau lebih baru

ZIO

2.0 atau lebih baru

Kode contoh

Unduh kode contoh dari java-opentelemetry-demo.

Metode 1: Gunakan agen Java OpenTelemetry untuk menginstrumentasi aplikasi secara otomatis

Agen Java OpenTelemetry memungkinkan Anda menghubungkan OpenTelemetry ke Managed Service for OpenTelemetry secara non-intrusif. Agen ini mendukung pengunggahan data jejak secara otomatis di ratusan kerangka kerja Java. Untuk daftar kerangka kerja Java yang didukung, lihat Perpustakaan, kerangka kerja, server aplikasi, dan JVM yang didukung.

  1. Unduh agen Java OpenTelemetry.

  2. Ubah parameter JVM dalam konfigurasi startup Java untuk melaporkan data jejak.

    • Melalui HTTP: Atur titik akhir jejak dan metrik.

    • Melalui gRPC: Atur titik akhir jejak dan token otentikasi.

    HTTP

    java -javaagent:/path/to/opentelemetry-javaagent.jar\   # Tentukan jalur unduhan file.
    -Dotel.resource.attributes=service.name=,service.version=,deployment.environment= \
    -Dotel.exporter.otlp.protocol=http/protobuf \
    -Dotel.exporter.otlp.traces.endpoint=<traces.endpoint> \   # Tentukan titik akhir jejak yang Anda peroleh di bagian Prasyarat.
    -Dotel.exporter.otlp.metrics.endpoint=<metrics.endpoint> \   # Tentukan titik akhir metrik yang Anda peroleh di bagian Prasyarat.
    -Dotel.logs.exporter=none \
    -jar /path/to/your/app.jar  # Tentukan jalur penyimpanan paket JAR Anda.

    Contoh:

    java -javaagent:/path/to/opentelemetry-javaagent.jar \
    -Dotel.resource.attributes=service.name=,service.version=,deployment.environment= \
    -Dotel.exporter.otlp.protocol=http/protobuf \
    -Dotel.exporter.otlp.traces.endpoint=http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****/api/otlp/traces \
    -Dotel.exporter.otlp.metrics.endpoint=http://tracing-analysis-dc-hz-internal.aliyuncs.com/adapt_ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe****/api/otlp/metrics \
    -Dotel.logs.exporter=none \
    -jar /path/to/your/app.jar

    gRPC

    java -javaagent:/path/to/opentelemetry-javaagent.jar \   # Tentukan jalur unduhan file.
    -Dotel.resource.attributes=service.name=,service.version=,deployment.environment= \
    -Dotel.exporter.otlp.protocol=grpc \
    -Dotel.exporter.otlp.headers=Authentication=<token> \   # Tentukan token otentikasi yang Anda peroleh di bagian Prasyarat.
    -Dotel.exporter.otlp.endpoint=<endpoint> \   # Tentukan titik akhir yang Anda peroleh di bagian Prasyarat.
    -Dotel.logs.exporter=none \
    -jar /path/to/your/app.jar     # Tentukan jalur penyimpanan paket JAR Anda.

    Contoh:

    java -javaagent:/path/to/opentelemetry-javaagent.jar \
    -Dotel.resource.attributes=service.name=,service.version=,deployment.environment= \
    -Dotel.exporter.otlp.protocol=grpc \
    -Dotel.exporter.otlp.headers=Authentication=ggxw4l****@7323a5caae3****_ggxw4l****@53df7ad2afe**** \
    -Dotel.exporter.otlp.endpoint=http://tracing-analysis-dc-hz-internal.aliyuncs.com:8090 \
    -Dotel.logs.exporter=none \
    -jar /path/to/your/app.jar
    Catatan

    Jika Anda ingin menggunakan OpenTelemetry Collector untuk meneruskan data jejak, hapus -Dotel.exporter.otlp.headers=Authentication=<token> dan ganti <endpoint> dengan URL layanan yang diterapkan pada mesin lokal.

Metode 2: Gunakan OpenTelemetry SDK untuk Java untuk menginstrumentasi aplikasi secara manual

Agen Java OpenTelemetry diimplementasikan berdasarkan OpenTelemetry SDK untuk Java. SDK ini menyediakan berbagai fitur kustomisasi. Jika instrumentasi yang ditambahkan menggunakan agen Java OpenTelemetry tidak lagi memenuhi kebutuhan bisnis Anda atau Anda ingin menambahkan instrumentasi kustom, ikuti langkah-langkah berikut:

  1. Tambahkan dependensi berikut ke file pom.xml proyek Maven:

    <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-exporter-otlp</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-sdk</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-semconv</artifactId>
            <version>1.30.0-alpha</version>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-bom</artifactId>
            <version>1.30.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
    </dependencyManagement>
  2. Dapatkan tracer OpenTelemetry.

    HTTP

    import io.opentelemetry.api.OpenTelemetry;
    import io.opentelemetry.api.common.Attributes;
    import io.opentelemetry.api.trace.Tracer;
    import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
    import io.opentelemetry.context.propagation.ContextPropagators;
    import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
    import io.opentelemetry.sdk.OpenTelemetrySdk;
    import io.opentelemetry.sdk.resources.Resource;
    import io.opentelemetry.sdk.trace.SdkTracerProvider;
    import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
    import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
    
    public class OpenTelemetrySupport {
    
        static {
            // Dapatkan tracer OpenTelemetry.
            Resource resource = Resource.getDefault()
                    .merge(Resource.create(Attributes.of(
                            ResourceAttributes.SERVICE_NAME, "",  // Nama aplikasi.
                            ResourceAttributes.SERVICE_VERSION, "",  // Nomor versi.
                            ResourceAttributes.DEPLOYMENT_ENVIRONMENT, "", // Lingkungan.
                            ResourceAttributes.HOST_NAME, "${host-name}" // Ganti ${host-name} dengan nama server Anda.
                    )));
            
            SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
                    .addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
                            .setEndpoint("<endpoint>")  // Ganti <endpoint> dengan titik akhir yang Anda peroleh di bagian Prasyarat.
                            .build()).build())
                    .setResource(resource)
                    .build();
            
            OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
                    .setTracerProvider(sdkTracerProvider)
                    .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
                    .buildAndRegisterGlobal();
    
            tracer = openTelemetry.getTracer("OpenTelemetry Tracer", "1.0.0");
        }
    
        private static Tracer tracer;
    
        public static Tracer getTracer() {
            return tracer;
        }
    }

    gRPC

    import io.opentelemetry.api.OpenTelemetry;
    import io.opentelemetry.api.common.Attributes;
    import io.opentelemetry.api.trace.Tracer;
    import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
    import io.opentelemetry.context.propagation.ContextPropagators;
    import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
    import io.opentelemetry.sdk.OpenTelemetrySdk;
    import io.opentelemetry.sdk.resources.Resource;
    import io.opentelemetry.sdk.trace.SdkTracerProvider;
    import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
    import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
    
    public class OpenTelemetrySupport {
    
        static {
            // Dapatkan tracer OpenTelemetry.
            Resource resource = Resource.getDefault()
                    .merge(Resource.create(Attributes.of(
                            ResourceAttributes.SERVICE_NAME, "", // Nama aplikasi.
                            ResourceAttributes.SERVICE_VERSION, "", // Nomor versi.
                            ResourceAttributes.DEPLOYMENT_ENVIRONMENT, "", // Lingkungan.
                            ResourceAttributes.HOST_NAME, "${host-name}" // Ganti ${host-name} dengan nama server Anda.
                    )));
            
            SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
                    .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder()
                            .setEndpoint("<endpoint>") // Ganti <endpoint> dengan titik akhir yang Anda peroleh di bagian Prasyarat.
                            .addHeader("Authentication", "<token>") // Ganti <token> dengan token otentikasi yang Anda peroleh di bagian Prasyarat.
                            .build()).build())
                    .setResource(resource)
                    .build();
            
            OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
                    .setTracerProvider(sdkTracerProvider)
                    .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
                    .buildAndRegisterGlobal();
    
            tracer = openTelemetry.getTracer("OpenTelemetry Tracer", "1.0.0");
        }
    
        private static Tracer tracer;
    
        public static Tracer getTracer() {
            return tracer;
        }
    }
  3. Buat rentang.

    import io.opentelemetry.api.trace.Span;
    import io.opentelemetry.api.trace.StatusCode;
    import io.opentelemetry.context.Scope;
    
    public class Main {
        
        public static void parentMethod() {
            Span span = OpenTelemetrySupport.getTracer().spanBuilder("parent span").startSpan();
            try (Scope scope = span.makeCurrent()) {
                span.setAttribute("good", "job");
                childMethod();
            } catch (Throwable t) {
                span.setStatus(StatusCode.ERROR, "handle parent span error");
            } finally {
                span.end();
            }
        }
    
        public static void childMethod() {
            Span span = OpenTelemetrySupport.getTracer().spanBuilder("child span").startSpan();
            try (Scope scope = span.makeCurrent()) {
                span.setAttribute("hello", "world");
            } catch (Throwable t) {
                span.setStatus(StatusCode.ERROR, "handle child span error");
            } finally {
                span.end();
            }
        }
    
        public static void main(String[] args) {
            parentMethod();
        }
    }
  4. Mulai aplikasi.

    Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.

Metode 3: Gunakan agen Java OpenTelemetry dan OpenTelemetry SDK untuk Java untuk menginstrumentasi aplikasi

Anda dapat menggunakan agen Java OpenTelemetry untuk melakukan instrumentasi otomatis dan OpenTelemetry SDK untuk Java untuk menambahkan instrumentasi kustom sesuai kebutuhan bisnis Anda.

  1. Unduh agen Java OpenTelemetry.

  2. Tambahkan dependensi berikut ke file pom.xml proyek Maven selain dependensi dari Metode 2:

    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-extension-annotations</artifactId>
    </dependency>
    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
        <version>1.23.0-alpha</version>
    </dependency>
    Catatan

    Pada kode sebelumnya, dependensi opentelemetry-sdk-extension-autoconfigure digunakan untuk mengonfigurasi OpenTelemetry SDK untuk Java secara otomatis dan mentransfer pengaturan agen Java OpenTelemetry ke SDK.

    Lihat dependensi dalam file pom.xml proyek Maven

    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <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-extension-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-otlp</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-sdk</artifactId>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-semconv</artifactId>
            <version>1.30.0-alpha</version>
        </dependency>
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
            <version>1.23.0-alpha</version>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-bom</artifactId>
                <version>1.30.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  3. Dapatkan Tracer OpenTelemetry.

    Jika Anda menggunakan agen Java OpenTelemetry dan OpenTelemetry SDK untuk Java untuk menginstrumentasi aplikasi, Anda tidak perlu menggunakan kelas OpenTelemetrySupport yang digunakan di Metode 2 untuk mendapatkan tracer OpenTelemetry.

    OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
    Tracer tracer = openTelemetry.getTracer("instrumentation-library-name", "1.0.0");
  4. Ubah kode controller dan kode layanan.

    • Kami sarankan Anda menggunakan Metode 1 dan Metode 2 dalam kode controller sampel berikut:

      package com.alibaba.arms.brightroar.console.controller;
      
      import com.alibaba.arms.brightroar.console.service.UserService;
      import io.opentelemetry.api.GlobalOpenTelemetry;
      import io.opentelemetry.api.OpenTelemetry;
      import io.opentelemetry.api.trace.Span;
      import io.opentelemetry.api.trace.StatusCode;
      import io.opentelemetry.api.trace.Tracer;
      import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
      import io.opentelemetry.context.Context;
      import io.opentelemetry.context.Scope;
      import io.opentelemetry.extension.annotations.SpanAttribute;
      import io.opentelemetry.extension.annotations.WithSpan;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      import java.util.concurrent.ExecutorService;
      import java.util.concurrent.Executors;
      
      /**
      * Referensi:
      * 1. https://opentelemetry.io/docs/java/manual_instrumentation/
      */
      @RestController
          @RequestMapping("/user")
          public class UserController {
      
              @Autowired
              private UserService userService;
      
              private ExecutorService es = Executors.newFixedThreadPool(5);
      
              // Metode 1: Lakukan instrumentasi otomatis pada aplikasi. Panggil operasi API untuk menambahkan informasi.
              @RequestMapping("/async")
              public String async() {
                  System.out.println("UserController.async -- " + Thread.currentThread().getId());
                  Span span = Span.current();
                  span.setAttribute("user.id", "123456");
                  userService.async();
                  child("vip");
                  return "async";
              }
      
              // Metode 2: Instrumentasi aplikasi berdasarkan tag.
              @WithSpan
              private void child(@SpanAttribute("user.type") String userType) {
                  System.out.println(userType);
                  biz();
              }
      
              // Metode 3: Gunakan tracer untuk menginstrumentasi aplikasi secara manual.
              private void biz() {
                  Tracer tracer = GlobalOpenTelemetry.get().getTracer("tracer");
                  Span span = tracer.spanBuilder("biz (manual)")
                      .setParent(Context.current().with(Span.current())) // Opsional. Sistem secara otomatis mengonfigurasi pengaturan.
                      .startSpan();
      
                  try (Scope scope = span.makeCurrent()) {
                      span.setAttribute("biz-id", "111");
      
                      es.submit(new Runnable() {
                          @Override
                          public void run() {
                              Span asyncSpan = tracer.spanBuilder("async")
                                  .setParent(Context.current().with(span))
                                  .startSpan();
                              try {
                                  Thread.sleep(1000L); // beberapa pekerjaan asinkron
                              } catch (Throwable e) {
                              }
                              asyncSpan.end();
                          }
                      });
      
                      Thread.sleep(1000); // logika bisnis palsu
                      System.out.println("biz done");
                      OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
                      openTelemetry.getPropagators();
                  } catch (Throwable t) {
                      span.setStatus(StatusCode.ERROR, "handle biz error");
                  } finally {
                      span.end();
                  }
              }
      
          }
      
                                      
    • Kode layanan contoh:

      package com.alibaba.arms.brightroar.console.service;
      
      import org.springframework.scheduling.annotation.Async;
      import org.springframework.stereotype.Service;
      
      @Service
      public class UserService {
      
          @Async
          public void async() {
              System.out.println("UserService.async -- " + Thread.currentThread().getId());
              System.out.println("my name is async");
              System.out.println("UserService.async -- ");
          }
      }
  5. Ubah parameter JVM dalam konfigurasi startup Java untuk melaporkan data jejak.

    -javaagent:/path/to/opentelemetry-javaagent.jar    // Ganti jalur dengan URL yang Anda gunakan untuk mengunduh agen Java OpenTelemetry. 
    -Dotel.resource.attributes=service.name=<appName>     // Ganti <appName> dengan nama aplikasi aktual. 
    -Dotel.exporter.otlp.headers=Authentication=<token>
    -Dotel.exporter.otlp.endpoint=<endpoint>
    • Jika Anda ingin langsung melaporkan data jejak, ganti <token> dengan token yang Anda peroleh di prasyarat dan <endpoint> dengan titik akhir wilayah tempat Anda ingin melaporkan data jejak.

      Contoh:

      -javaagent:/Users/carpela/Downloads/opentelemetry-javaagent.jar
      -Dotel.resource.attributes=service.name=ot-java-agent-sample
      -Dotel.exporter.otlp.headers=Authentication=b590xxxxuqs@3a75d95xxxxx9b_b59xxxxguqs@53dxxxx2afe8301
      -Dotel.exporter.otlp.endpoint=http://tracing-analysis-dc-bj:8090
    • Jika Anda ingin menggunakan OpenTelemetry Collector untuk meneruskan data jejak, hapus -Dotel.exporter.otlp.headers=Authentication=<token> dan ganti <endpoint> dengan URL layanan yang diterapkan pada mesin lokal.

  6. Mulai aplikasi.

    Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.