All Products
Search
Document Center

Application Real-Time Monitoring Service:Menghubungkan jejak antarmuka depan dan backend

Last Updated:Jun 21, 2026

ARMS Real User Monitoring (RUM) memungkinkan Anda menggunakan sesi pengguna sebagai titik awal untuk melacak error, kinerja lambat, dan pengecualian selama interaksi pengguna. Dengan mengintegrasikan ARMS Application Monitoring, Anda dapat mencapai pelacakan end-to-end guna menyederhanakan alur kerja analisis masalah. Topik ini menjelaskan cara menghubungkan jejak antarmuka depan dan backend untuk aplikasi mobile.

Prasyarat

  • Aplikasi mobile Anda (Android atau iOS) telah diinstrumentasi dengan RUM SDK versi terbaru. Untuk informasi lebih lanjut, lihat Monitor aplikasi Android.

    Catatan

    Versi SDK harus 0.2.0 atau lebih baru untuk Android dan 0.2.0 atau lebih baru untuk iOS.

  • Aplikasi backend Anda dipantau oleh ARMS Application Monitoring atau Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Panduan integrasi.

  • Aplikasi backend Anda menyediakan layanan web (HTTP) untuk mengurai header dan mengorelasikan konteks jejak.

Penting

Menghubungkan jejak antara aplikasi antarmuka depan dan backend lintas wilayah tidak lagi didukung. Jika aplikasi antarmuka depan dan backend Anda berada di wilayah yang berbeda, buka Konsol CloudMonitor 2.0 dan instrumentasi aplikasi antarmuka depan Anda di wilayah dan ruang kerja yang sama dengan aplikasi backend Anda.

Protokol jejak yang didukung

  • SkyWalking: v3 (untuk agen SkyWalking 8.x)

  • OpenTelemetry (W3C)

Prosedur

Tambahkan domain layanan dan aktifkan propagasi jejak

  1. Masuk ke Konsol ARMS.

  2. Di panel navigasi sebelah kiri, pilih Real User Monitoring > Application List, lalu pilih wilayah Anda di bilah navigasi atas.

  3. Klik nama aplikasi Anda, lalu klik Application Settings.

  4. Pada bagian Request Management, konfigurasikan domain layanan Anda.

    Penting

    Jangan menambahkan domain layanan pihak ketiga sebagai milik Anda sendiri. Jika tidak, propagasi jejak dapat gagal.

    Tambahkan domain layanan Anda, aktifkan sakelar Trace Propagation, dan pilih protokol propagasi yang sesuai dengan layanan backend Anda.

    Catatan

    Pastikan aplikasi backend Anda sudah diinstrumentasi untuk pelacakan di ARMS. Untuk informasi lebih lanjut, lihat Panduan integrasi.

    Nama format

    Format

    sw8 (Skywalking v3)

    sw8: {sample}-{trace-id}-{segment-id}-{0}-{service}-{instance}-{endpoint}-{peer}

    tracecontext

    traceparent : {version}-{trace-id}-{parent-id}-{trace-flags}

    tracestate: rum={version}&{appType}&{pid}&{sessionId}

  5. Klik Confirm. Konfigurasi propagasi jejak secara otomatis didorong ke aplikasi mobile Anda.

    Penting
    • Konfigurasi mungkin memerlukan beberapa menit untuk diterapkan di sisi klien, tergantung pada perilaku pengguna. Secara default, SDK menarik konfigurasi sekali saat aplikasi cold-started. SDK juga menarik konfigurasi lagi jika aplikasi dibuka ulang setelah berjalan di latar belakang selama lebih dari 30 detik.

    • Meskipun aplikasi mobile tidak tunduk pada kebijakan cross-origin resource sharing (CORS) aplikasi web, gerbang server-side Anda harus mendukung propagasi header permintaan untuk setiap protokol. Jika tidak, layanan backend tidak dapat menerima header tersebut, dan koneksi antara RUM dan jejak backend akan gagal.

Verifikasi konfigurasi

Bagian ini menggunakan protokol propagasi SkyWalking v3 sebagai contoh untuk memverifikasi konfigurasi.

Android

Gunakan tool App Inspection di Android Studio untuk memeriksa informasi protokol sw8 di header permintaan jaringan. Kehadiran informasi ini mengonfirmasi konfigurasi berhasil.

iOS

Gunakan tool Xcode Profile untuk memeriksa informasi protokol sw8 di header permintaan jaringan. Untuk melakukannya, di bilah alat Xcode, pilih Product > Profile > Network.

Di antarmuka Instruments, pilih track HTTP Traffic. Dari daftar drop-down di pojok kiri bawah, beralihlah ke tampilan List: HTTP Transactions. Pilih permintaan target dan periksa header sw8 yang disisipkan di bagian Request Headers pada panel detail di sebelah kanan.

Konfigurasi korelasi jejak backend

Untuk membangun jejak end-to-end yang lengkap, Anda juga harus mengonfigurasi aplikasi backend Anda. Jenis aplikasi backend yang didukung dan metode instrumentasinya adalah sebagai berikut:

Aplikasi Java

Agen Pemantauan Aplikasi

Agen ARMS Application Monitoring memiliki dukungan bawaan untuk protokol OpenTelemetry. Oleh karena itu, Anda dapat mengorelasikan jejak dengan RUM tanpa konfigurasi tambahan. Namun, pastikan hal berikut:

  • Agen Pemantauan Aplikasi harus versi 2.x, 3.x, atau 4.x. Untuk pengalaman terbaik, kami merekomendasikan peningkatan ke versi 4.x.

  • Harus menggunakan container web utama, seperti Tomcat, Jetty, WebLogic, atau Undertow, serta framework yang didukung, seperti SpringBoot atau SpringMVC. Untuk daftar lengkap komponen dan framework yang didukung, lihat Komponen dan framework Java yang didukung oleh Pemantauan Aplikasi.

Untuk petunjuk cara menginstal agen Pemantauan Aplikasi, lihat Monitor aplikasi Java.

OpenTelemetry

Anda dapat menginstrumentasi aplikasi Anda dengan OpenTelemetry dan melaporkan data ke ARMS (Managed Service for OpenTelemetry). Tersedia dua metode: auto-instrumentation dan manual instrumentation.

  • Auto-instrumentation tidak memerlukan konfigurasi tambahan untuk mengorelasikan jejak dengan RUM karena OpenTelemetry mendukung sebagian besar framework utama.

    Catatan

    Untuk informasi tentang framework Java yang didukung OpenTelemetry, lihat Laporkan data aplikasi Java menggunakan OpenTelemetry.

  • Dengan manual instrumentation, Anda harus menggunakan mekanisme ekstensi SDK OpenTelemetry untuk mengorelasikan jejak. Proses ini melibatkan penguraian konteks jejak dari header traceparent dan tracestate permintaan antarmuka depan. Kode berikut memberikan contoh untuk aplikasi SpringBoot:

    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. Tambahkan propagator W3C selama inisialisasi OpenTelemetry.

      Resource resource = Resource.getDefault()
              .merge(Resource.create(Attributes.of(
                      ResourceAttributes.SERVICE_NAME, "otel-demo",
                      ResourceAttributes.HOST_NAME, "xxxx"
      )));
      
      SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
              .addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
                      .setEndpoint("Your Endpoint")
                      .addHeader("Authentication", "Your Token")
                      .build()).build())
              .setResource(resource)
              .build();
      
      openTelemetry = OpenTelemetrySdk.builder()
              .setTracerProvider(sdkTracerProvider)
              // Tambahkan propagator W3C di sini.
              .setPropagators(ContextPropagators.create(
                      TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(), W3CBaggagePropagator.getInstance()))
               ).buildAndRegisterGlobal();
      // Diperlukan Tracer yang diperluas di sini.
      tracer = ExtendedTracer.create(openTelemetry.getTracer("com.example.tracer", "1.0.0"));
    3. Di antarmuka bisnis, tambahkan parameter header, uraikan konteks jejak dari header permintaan, dan atur parent.

      // Tambahkan parameter header permintaan di Controller untuk mengurai konteks jejak.
      @RequestMapping("/test")
      public String test(@RequestHeader Map<String, String> headers) {
          Span span = OpenTelemetrySupport.getTracer()
                  .spanBuilder("/test")
                  // Uraikan span parent dari header.
                  .setParentFrom(OpenTelemetrySupport.getContextPropagators(), headers)
                  .setSpanKind(SpanKind.SERVER)
                  .startSpan();
          try (Scope scope = span.makeCurrent()) {
              // lakukan sesuatu
          } catch (Throwable t) {
              span.setStatus(StatusCode.ERROR, "handle parent span error");
          } finally {
              span.end();
          }
          return "success";
      }

SkyWalking

Untuk prosedur instrumentasi lengkap, lihat Plugin Java Agent.

SkyWalking saat ini hanya menyediakan Java Agent untuk instrumentasi. Anda hanya perlu mengikuti petunjuk dalam dokumen tertaut untuk mengorelasikan RUM dan jejak backend.

Pencocokan protokol: Protokol sw8 (v3) yang dikonfigurasi di sisi RUM sesuai dengan agen SkyWalking 8.x.

Aplikasi Go

OpenTelemetry

Untuk prosedur instrumentasi lengkap, lihat Laporkan data aplikasi Go menggunakan OpenTelemetry.

Ikuti dokumentasi untuk menginstrumentasi aplikasi Anda. Kemudian, hasilkan rentang dari konteks permintaan di penanganan permintaan HTTP untuk mengorelasikannya dengan jejak RUM.

// Inisialisasi tracer.
tracer := otel.Tracer(common.TraceInstrumentationName)
// Hasilkan rentang dari konteks permintaan.
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    ctx := req.Context()
    span := trace.SpanFromContext(ctx)
    // lakukan sesuatu
    w.Write([]byte("Hello World"))
})

SkyWalking

Untuk prosedur instrumentasi lengkap, lihat Laporkan data aplikasi Go menggunakan SkyWalking.

Ikuti dokumentasi untuk menginstrumentasi aplikasi Anda. Kami merekomendasikan menggunakan metode skywalking-go, yang mendukung framework web utama seperti Gin, go-restful, http, go-kratos v2, go-micro, dan go-resty. Hal ini memungkinkan Anda mengorelasikan jejak RUM tanpa modifikasi kode.

Untuk mengurai konteks jejak secara manual dari header permintaan HTTP, gunakan kode berikut:

// 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
})

Aplikasi Python

OpenTelemetry

Untuk prosedur instrumentasi lengkap, lihat Laporkan data aplikasi Python menggunakan OpenTelemetry.

Ikuti dokumentasi untuk menginstrumentasi aplikasi Anda. Kemudian, uraikan konteks rentang dari header permintaan HTTP untuk mengorelasikan dengan jejak RUM. Berikut adalah contoh kodenya:

# 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 dari header.
    carrier ={'traceparent': headers['Traceparent'], 'tracestate': headers['Tracestate']}
    ctx = TraceContextTextMapPropagator().extract(carrier=carrier)

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

SkyWalking

Untuk prosedur instrumentasi lengkap, lihat Laporkan data aplikasi Python menggunakan SkyWalking.

Ikuti dokumentasi untuk menginstrumentasi aplikasi Anda. Kemudian, uraikan konteks rentang dari header permintaan HTTP untuk mengorelasikan dengan jejak RUM. Berikut adalah contoh kodenya:

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

# Konfigurasi SkyWalking. Sesuaikan parameter sesuai kebutuhan.
config.init(agent_collector_backend_services='<endpoint>',
            agent_authentication='<auth-token>')

agent.start()

# Contoh penanganan permintaan HTTP yang memerlukan header permintaan HTTP.
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 baru untuk memproses permintaan.
    with get_context().new_entry_span(op='operation_name') as span:
        # Proses permintaan di sini. Rentang secara otomatis dikirimkan saat selesai.
        ...

# Simulasikan header permintaan HTTP yang diterima yang mencakup sw8.
incoming_headers = {
    'sw8': '1-My40LjU=-MTY1MTcwNDI5OTk5OA==-xxxx-xx-x-x==',  # Nilai contoh. Gunakan nilai aktual dari permintaan.
    # Header lainnya...
}

# Panggil fungsi untuk memproses permintaan.
handle_request(incoming_headers)

Lihat data jejak end-to-end

Setelah Anda menghubungkan jejak antarmuka depan dan backend, Anda dapat melihat rantai panggilan untuk permintaan antarmuka depan di Konsol ARMS RUM.

Klik View Call Chain untuk melihat rantai panggilan lengkap dan topologi aplikasi untuk permintaan tersebut. Anda kemudian dapat mendiagnosis permintaan lambat atau error dengan menggabungkan detail permintaan dari RUM dengan data jejak backend.

Rentang tingkat atas merepresentasikan rentang entri dari RUM. Rentang entri dikategorikan berdasarkan jenis instrumentasi sisi klien sebagai berikut:

  • Web & H5: Nama aplikasi adalah rum-browser, awalan nama rentang adalah "browser.request:".

  • Program mini: Nama aplikasi adalah rum-miniapp, awalan nama rentang adalah "miniapp.request:".

  • Android: Nama aplikasi adalah rum-android, awalan nama rentang adalah "android.request:".

  • iOS: Nama aplikasi adalah rum-ios, awalan nama rentang adalah "ios.request:".

Anda juga dapat menggunakan graf topologi untuk memvisualisasikan layanan hulu dan hilir untuk seluruh permintaan.