全部产品
Search
文档中心

Application Real-Time Monitoring Service:Aktifkan pelacakan end-to-end untuk aplikasi

更新时间:Mar 12, 2026

Hubungkan data pemantauan frontend aplikasi seluler Anda dengan jejak backend untuk mendapatkan visibilitas penuh terhadap setiap permintaan pengguna, mulai dari ketukan hingga respons server dan kembali.

Real User Monitoring (RUM) menangkap aktivitas di perangkat pengguna, sedangkan Application Monitoring mencatat aktivitas di server Anda. Pelacakan end-to-end menghubungkan keduanya, memungkinkan Anda melacak permintaan yang lambat atau gagal dari aplikasi seluler hingga menembus seluruh layanan backend guna mengidentifikasi akar penyebabnya.

Cara kerja

Saat pelacakan end-to-end diaktifkan, SDK RUM menyisipkan header konteks jejak ke setiap permintaan HTTP yang dikirim aplikasi Anda ke layanan Anda sendiri. Agen backend membaca header tersebut dan membuat hubungan induk-anak antara rentang permintaan frontend dan rentang pemrosesan backend.

ARMS mendukung dua protokol propagasi:

ProtokolHeader FormatKapan digunakan
W3C Trace Context (OpenTelemetry)traceparent: {version}-{trace-id}-{parent-id}-{trace-flags} dan tracestate: rum={version}&{appType}&{pid}&{sessionId}Backend Anda menggunakan agen ARMS atau OpenTelemetry
sw8 (SkyWalking v8.x)sw8: {sample}-{trace-id}-{segment-id}-{0}-{service}-{instance}-{endpoint}-{peer}Backend Anda menggunakan agen SkyWalking v8.x

Prasyarat

Sebelum memulai, pastikan hal-hal berikut:

  • Aplikasi seluler Anda (Android atau iOS) dipantau di RUM. Lihat Monitor apps.

  • Versi SDK RUM adalah 0.2.0 atau lebih baru.

  • Backend Anda dipantau di Application Monitoring atau Managed Service for OpenTelemetry. Lihat Integration center.

  • Backend Anda menyediakan layanan web berbasis HTTP yang dapat mengurai dan meneruskan header permintaan.

Langkah 1: Tambahkan domain layanan Anda dan aktifkan pelacakan

Konfigurasikan SDK RUM untuk menyisipkan header konteks jejak ke permintaan yang dikirim ke layanan backend Anda.

  1. Masuk ke Konsol ARMS.

  2. Di panel navigasi sebelah kiri, pilih User Experience Monitoring > Application List. Di bilah navigasi atas, pilih wilayah tempat aplikasi Anda berada.

  3. Temukan aplikasi Anda dan pilih Choose More > More Configurations di kolom Actions. Di halaman detail aplikasi, klik tab Application Settings.

  4. Klik tab Request Management.

  5. Klik Add own service dan masukkan domain layanan Anda.

    Penting

    Hanya tambahkan domain yang merupakan milik layanan Anda sendiri. Server pihak ketiga tidak mengenali atau meneruskan header jejak, sehingga menambahkan domain pihak ketiga akan menghentikan pelacakan.

  6. Di kotak dialog Add own service, aktifkan Link open dan pilih protokol pelacakan yang sesuai dengan agen backend Anda.

    Catatan

    Untuk integrasi OpenTelemetry, lihat Integrate services or components.

  7. Klik OK.

Konfigurasi secara otomatis didorong ke aplikasi Anda. Perhatikan perilaku berikut:

  • SDK RUM mengambil konfigurasi terbaru saat cold start dan lagi ketika aplikasi kembali ke foreground setelah berjalan di latar belakang lebih dari 30 detik. Perubahan konfigurasi mungkin memerlukan beberapa menit untuk mencapai semua pengguna.

  • Gerbang server Anda harus mampu meneruskan header konteks jejak. Jika gerbang menghapus atau mengabaikan header ini, backend tidak dapat berpartisipasi dalam jejak. Hal ini berlaku meskipun cross-origin resource sharing (CORS) tidak memengaruhi aplikasi seluler native.

Langkah 2: Verifikasi pelacakan frontend

Setelah konfigurasi didorong ke aplikasi Anda, verifikasi bahwa SDK RUM menyisipkan header jejak ke permintaan HTTP keluar.

Android

  1. Buka proyek Anda di Android Studio.

  2. Jalankan aplikasi Anda di perangkat atau emulator.

  3. Buka App Inspection di Android Studio.

  4. Picu permintaan jaringan di aplikasi Anda dan periksa header permintaan tersebut. Jika Anda melihat header sw8 atau traceparent (tergantung protokol yang Anda pilih), pelacakan telah dikonfigurasi dengan benar.

Android App Inspection showing sw8 header in request

iOS

  1. Buka proyek Anda di Xcode.

  2. Pilih Product > Profile untuk meluncurkan Instruments.

  3. Pilih templat Network untuk menangkap traffic HTTP.

  4. Picu permintaan jaringan di aplikasi Anda dan periksa header permintaan tersebut. Jika Anda melihat header sw8 atau traceparent, pelacakan telah dikonfigurasi dengan benar.

Xcode Instruments showing sw8 header in request

Langkah 3: Aktifkan pelacakan backend

Frontend kini menyisipkan header konteks jejak. Selanjutnya, konfigurasikan backend Anda untuk membaca header ini dan melanjutkan jejak tersebut. Penyiapan bergantung pada bahasa dan agen yang Anda gunakan.

Java

ARMS agent (disarankan)

Agen ARMS mendukung protokol OpenTelemetry secara default. Jika aplikasi Java Anda sudah dipantau dengan Application Monitoring, pelacakan end-to-end berfungsi tanpa konfigurasi tambahan.

Persyaratan:

  • Versi agen ARMS V2.x, V3.x, atau V4.x. V4.x direkomendasikan untuk pengalaman pengguna yang lebih baik.

  • Kontainer web yang didukung: Apache Tomcat, Jetty, WebLogic, atau Undertow.

  • Framework yang didukung: Spring Boot atau Spring Web MVC. Lihat Java components and frameworks supported by ARMS.

Untuk menginstal agen ARMS, lihat Monitor Java applications.

OpenTelemetry (instrumentasi otomatis)

Jika Anda menggunakan OpenTelemetry dengan instrumentasi otomatis, pelacakan berfungsi tanpa konfigurasi tambahan karena OpenTelemetry mendukung sebagian besar framework Java utama. Lihat Use OpenTelemetry to report the trace data of Java applications.

OpenTelemetry (instrumentasi manual)

Jika Anda melakukan instrumentasi aplikasi secara manual, uraikan header traceparent dan tracestate dari permintaan frontend untuk melanjutkan jejak tersebut. Contoh berikut menunjukkan cara melakukannya di aplikasi Spring Boot.

1. Tambahkan dependensi OpenTelemetry:

<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>
  <version>1.18.0</version>
</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.1-alpha</version>
</dependency>
<dependency>
  <groupId>io.opentelemetry</groupId>
  <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
  <version>1.34.1</version>
</dependency>
<dependency>
  <groupId>io.opentelemetry</groupId>
  <artifactId>opentelemetry-extension-incubator</artifactId>
  <version>1.35.0-alpha</version>
</dependency>

2. Inisialisasi OpenTelemetry dengan propagasi W3C:

Resource resource = Resource.getDefault()
        .merge(Resource.create(Attributes.of(
                ResourceAttributes.SERVICE_NAME, "otel-demo",
                ResourceAttributes.HOST_NAME, "<your-hostname>"
        )));

SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
        .addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
                .setEndpoint("<your-endpoint>")
                .addHeader("Authentication", "<your-token>")
                .build()).build())
        .setResource(resource)
        .build();

// Enable W3C trace context propagation
openTelemetry = OpenTelemetrySdk.builder()
        .setTracerProvider(sdkTracerProvider)
        .setPropagators(ContextPropagators.create(
                TextMapPropagator.composite(
                    W3CTraceContextPropagator.getInstance(),
                    W3CBaggagePropagator.getInstance())))
        .buildAndRegisterGlobal();

tracer = ExtendedTracer.create(
        openTelemetry.getTracer("com.example.tracer", "1.0.0"));

Ganti placeholder berikut dengan nilai aktual Anda:

PlaceholderDeskripsiContoh
<your-hostname>Nama host server Andamy-server-01
<your-endpoint>Titik akhir kolektor OpenTelemetryhttps://tracing-analysis-dc-hz.aliyuncs.com/...
<your-token>Token autentikasixXxXxXx

3. Uraikan konteks jejak dari header permintaan:

// Di @Controller Anda, ekstrak konteks jejak dari header permintaan masuk
@RequestMapping("/test")
public String test(@RequestHeader Map<String, String> headers) {
    Span span = OpenTelemetrySupport.getTracer()
            .spanBuilder("/test")
            // Setel rentang induk dari header permintaan frontend
            .setParentFrom(OpenTelemetrySupport.getContextPropagators(), headers)
            .setSpanKind(SpanKind.SERVER)
            .startSpan();
    try (Scope scope = span.makeCurrent()) {
        // Proses permintaan
    } catch (Throwable t) {
        span.setStatus(StatusCode.ERROR, "handle parent span error");
    } finally {
        span.end();
    }
    return "success";
}

SkyWalking

Gunakan agen SkyWalking untuk Java guna mengintegrasikan aplikasi Anda dengan Managed Service for OpenTelemetry. Lihat Use SkyWalking to report Java application data.

Jika Anda menggunakan agen SkyWalking v8.x, pilih protokol sw8 di Langkah 1.

Go

OpenTelemetry

Integrasikan aplikasi Go Anda dengan Managed Service for OpenTelemetry. Lihat Use OpenTelemetry to submit the trace data of a Go application.

Kemudian ekstrak rentang dari konteks permintaan di penanganan HTTP Anda:

// Inisialisasi tracer
tracer := otel.Tracer(common.TraceInstrumentationName)

// Ekstrak rentang dari konteks permintaan masuk
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    ctx := req.Context()
    span := trace.SpanFromContext(ctx)
    // Proses permintaan
    w.Write([]byte("Hello World"))
})

SkyWalking

Gunakan agen SkyWalking untuk Go guna mengintegrasikan aplikasi Anda dengan Managed Service for OpenTelemetry. Lihat Use SkyWalking to report Go application data.

Agen SkyWalking Go mendukung framework web berikut secara langsung: Gin, go-restful, http, Kratos v2, Go Micro, dan Go Resty. Saat Anda menggunakan agen dengan framework yang didukung, pelacakan berfungsi tanpa perubahan kode.

Untuk mengurai konteks jejak dari header permintaan secara manual:

// Ekstrak konteks dari header permintaan HTTP sw8
span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/test", func(key string) (string, error) {
    return r.Header.Get(key), nil
})

Python

OpenTelemetry

Integrasikan aplikasi Python Anda dengan Managed Service for OpenTelemetry. Lihat Use OpenTelemetry to report the trace data of Python applications.

Kemudian uraikan konteks jejak dari header permintaan. Contoh berikut menggunakan Flask:

# Inisialisasi tracer
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(ConsoleSpanExporter()))

tracer = trace.get_tracer(__name__)

@app.route('/test')
def test():
    headers = dict(request.headers)

    # Uraikan konteks jejak W3C dari header permintaan
    carrier = {
        'traceparent': headers['Traceparent'],
        'tracestate': headers['Tracestate']
    }
    ctx = TraceContextTextMapPropagator().extract(carrier=carrier)

    with tracer.start_span("test", context=ctx):
        # Proses permintaan
        return "success"

SkyWalking

Gunakan SkyWalking untuk mengintegrasikan aplikasi Anda dengan Managed Service for OpenTelemetry. Lihat Use SkyWalking to report Python application data.

Kemudian uraikan konteks jejak dari header sw8:

from skywalking import config, agent
from skywalking.trace.context import SpanContext, get_context
from skywalking.trace.carrier import CarrierItem

# Konfigurasikan SkyWalking
config.init(
    agent_collector_backend_services='<endpoint>',
    agent_authentication='<auth-token>')

agent.start()

def handle_request(headers):
    # Ekstrak informasi jejak dari header permintaan
    carrier_items = []
    for item in SpanContext.make_carrier():
        carrier_header = headers.get(item.key.lower())
        if carrier_header:
            carrier_items.append(CarrierItem(item.key, carrier_header))

    carrier = SpanContext.make_carrier(carrier_items)

    # Ekstrak konteks jejak dari carrier
    context = get_context().extract(carrier)

    # Buat rentang yang melanjutkan jejak frontend
    with get_context().new_entry_span(op='operation_name') as span:
        # Proses permintaan
        ...

# Contoh: gunakan dictionary dengan ID segmen SkyWalking untuk mensimulasikan header permintaan masuk
incoming_headers = {
    'sw8': '1-My40LjU=-MTY1MTcwNDI5OTk5OA==-xxxx-xx-x-x==',
}

handle_request(incoming_headers)

Ganti placeholder berikut dengan nilai aktual Anda:

PlaceholderDeskripsi
<endpoint>Alamat layanan backend kolektor SkyWalking
<auth-token>Token autentikasi untuk kolektor

Langkah 4: Lihat jejak lengkap

Setelah pelacakan frontend dan backend diaktifkan, lihat data jejak end-to-end di Konsol ARMS.

  1. Di modul RUM, temukan permintaan yang ingin Anda selidiki.

  2. Klik View Call Chain untuk melihat jejak lengkap, termasuk semua rentang dari permintaan frontend hingga layanan backend Anda.

Rentang teratas adalah rentang akar yang dibuat oleh SDK RUM. Penamaan rentang akar mengikuti konvensi berikut:

Jenis aplikasiNama aplikasiAwalan nama rentang
Web atau HTML5rum-browserbrowser.request:
Program minirum-miniappminiapp.request:
Androidrum-androidandroid.request:
iOSrum-iosios.request:

Tampilan jejak juga mencakup diagram topologi yang menunjukkan semua layanan hulu dan hilir yang terlibat dalam permintaan tersebut. Gunakan diagram ini untuk mengidentifikasi layanan mana yang menyebabkan kelambatan atau kesalahan.