Layanan sub Real User Monitoring (RUM) dari Application Real-Time Monitoring Service (ARMS) memutar ulang sesi pengguna untuk melacak kesalahan, penundaan, dan pengecualian yang terjadi selama interaksi pengguna. Selain itu, RUM mengimplementasikan pelacakan ujung-ke-ujung bersama dengan Pemantauan Aplikasi. Topik ini menjelaskan cara mengaktifkan pelacakan ujung-ke-ujung untuk aplikasi Android atau iOS.
Prasyarat
Frontend dipantau di RUM. Untuk informasi lebih lanjut, lihat Pantau aplikasi Android.
CatatanVersi SDK RUM adalah 0.2.0 atau lebih baru.
Backend dipantau di Pemantauan Aplikasi atau Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Pusat Integrasi.
Backend menyediakan layanan web berbasis HTTP untuk penguraian header dan propagasi konteks jejak.
Protokol pelacakan yang didukung
sw8 (Agen SkyWalking V8.x)
W3C (OpenTelemetry)
Prosedur
Tambahkan nama domain layanan Anda dan aktifkan pelacakan
Masuk ke Konsol ARMS.
Di bilah navigasi sisi kiri, pilih . Di bilah navigasi atas, pilih wilayah tempat aplikasi berada.
Temukan aplikasi dan Pilih Lainnya > Konfigurasi Lainnya di kolom Tindakan. Di halaman detail aplikasi, klik tab Pengaturan Aplikasi.
Klik tab Manajemen Permintaan dan tambahkan nama domain layanan Anda.
PentingJangan tambahkan nama domain layanan pihak ketiga. Jika tidak, pelacakan mungkin tidak akan berfungsi.
Klik Tambah layanan sendiri. Dalam kotak dialog Tambah layanan sendiri, aktifkan Tautan terbuka dan pilih protokol pelacakan untuk backend.
CatatanUntuk informasi lebih lanjut tentang cara mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry, lihat Integrasikan layanan atau komponen.
Protokol
Format
sw8: {sample}-{trace-id}-{segment-id}-{0}-{service}-{instance}-{endpoint}-{peer}
traceparent : {version}-{trace-id}-{parent-id}-{trace-flags}
tracestate: rum={version}&{appType}&{pid}&{sessionId}
Klik OK. Kemudian, konfigurasi pelacakan secara otomatis didorong ke aplikasi.
PentingKonfigurasi mungkin memerlukan beberapa menit untuk diterapkan di aplikasi, tergantung pada perilaku pengguna. Secara default, SDK RUM menarik konfigurasi pertama kali saat startup dingin dan kemudian saat memulai aplikasi lagi setelah berjalan di latar belakang selama lebih dari 30 detik.
Bahkan jika Berbagi Sumber Daya Lintas Domain (CORS) tidak berlaku untuk aplikasi, protokol yang digunakan oleh gateway server harus dapat menyebarkan header permintaan. Jika tidak, server backend tidak dapat menerima header atau mengimplementasikan pelacakan.
Verifikasi konfigurasi pelacakan frontend
Dalam contoh ini, Protokol Propagasi Proses Lintas SkyWalking versi 3 (sw8) digunakan untuk memverifikasi konfigurasi pelacakan.
Android
Gunakan App Inspection bawaan di Android Studio untuk memeriksa apakah permintaan berisi informasi sw8. Jika ya, konfigurasinya berhasil.
iOS
Pilih di bilah navigasi atas Xcode untuk memulai Xcode Profile. Periksa apakah permintaan berisi informasi sw8. Jika ya, konfigurasinya berhasil.

Aktifkan pelacakan untuk backend
Untuk mengaktifkan pelacakan ujung-ke-ujung, Anda harus mengonfigurasi pelacakan untuk backend. Bagian berikut menjelaskan metode untuk mengaktifkan pelacakan backend berdasarkan bahasa.
Java
Gunakan agen ARMS
Secara default, agen ARMS mendukung protokol OpenTelemetry. Oleh karena itu, pelacakan diimplementasikan untuk aplikasi yang dipantau dalam Pemantauan Aplikasi tanpa konfigurasi tambahan. Namun, pastikan kondisi berikut terpenuhi:
Versi agen ARMS adalah V2.x, V3.x, atau V4.x. Kami merekomendasikan menggunakan V4.x untuk pengalaman pengguna yang lebih baik.
Web container utama, seperti Apache Tomcat, Jetty, WebLogic, atau Undertow, dan framework yang didukung, seperti Spring Boot atau Spring Web MVC, digunakan. Untuk informasi lebih lanjut tentang komponen dan framework yang didukung oleh ARMS, lihat Komponen dan framework Java yang didukung oleh ARMS.
Untuk informasi tentang cara menginstal agen ARMS untuk aplikasi, lihat Pantau aplikasi Java.
Gunakan OpenTelemetry
Anda dapat mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry melalui OpenTelemetry dan secara otomatis atau manual instrumentasi aplikasi.
Jika Anda secara otomatis melakukan instrumentasi aplikasi, pelacakan dapat diimplementasikan tanpa konfigurasi tambahan karena OpenTelemetry mendukung sebagian besar framework utama.
CatatanUntuk informasi tentang framework Java yang didukung oleh OpenTelemetry, lihat Gunakan OpenTelemetry untuk melaporkan data jejak aplikasi Java.
Jika Anda secara manual melakukan instrumentasi aplikasi, Anda perlu menggunakan SDK OpenTelemetry untuk mengaktifkan pelacakan dengan mengurai konteks jejak dari header permintaan frontend traceparent dan tracestate. Contoh kode berikut menunjukkan cara secara manual melakukan instrumentasi aplikasi Spring Boot dan mengaktifkan pelacakan.
Impor 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>Konfigurasikan propagasi 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) // Add W3C propagation settings. .setPropagators(ContextPropagators.create( TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(), W3CBaggagePropagator.getInstance())) ).buildAndRegisterGlobal(); // Configure a tracer. tracer = ExtendedTracer.create(openTelemetry.getTracer("com.example.tracer", "1.0.0"));Peroleh informasi header, uraikan konteks jejak, dan konfigurasikan rentang induk.
// Obtain header information in @Controller to parse the trace context. @RequestMapping("/test") public String test(@RequestHeader Map<String, String> headers) { Span span = OpenTelemetrySupport.getTracer() .spanBuilder("/test") // Parse the parent span from the headers. .setParentFrom(OpenTelemetrySupport.getContextPropagators(), headers) .setSpanKind(SpanKind.SERVER) .startSpan(); try (Scope scope = span.makeCurrent()) { // do something } catch (Throwable t) { span.setStatus(StatusCode.ERROR, "handle parent span error"); } finally { span.end(); } return "success"; }
Gunakan SkyWalking
Anda dapat menggunakan agen SkyWalking untuk Java untuk mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Gunakan SkyWalking untuk melaporkan data aplikasi Java.
Kemudian, Anda dapat mengaktifkan pelacakan untuk backend.
Jika Anda menggunakan agen SkyWalking untuk Java V8.x, sw8 harus digunakan.
Go
Gunakan OpenTelemetry
Anda dapat menggunakan OpenTelemetry untuk mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Gunakan OpenTelemetry untuk mengirimkan data jejak aplikasi Go.
Kemudian, gunakan handler permintaan HTTP untuk menghasilkan rentang dari konteks permintaan dan mengaktifkan pelacakan. Contoh kode:
// Initialize the tracer.
tracer := otel.Tracer(common.TraceInstrumentationName)
// Generate a span from the request context.
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
ctx := req.Context()
span := trace.SpanFromContext(ctx)
// do something
w.Write([]byte("Hello World"))
})Gunakan SkyWalking
Anda dapat menggunakan SkyWalking untuk mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Gunakan SkyWalking untuk melaporkan data aplikasi Go.
Kami merekomendasikan Anda menggunakan agen SkyWalking untuk Go, yang mendukung framework web utama, seperti Gin, go-restful, http, Kratos v2, Go Micro, dan Go Resty. Kemudian, pelacakan dapat diimplementasikan tanpa memodifikasi kode.
Anda juga dapat secara manual mengurai konteks jejak dari header permintaan HTTP. Contoh kode:
//Extract context from HTTP request header `sw8`
span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/test", func(key string) (string, error) {
return r.Header.Get(key), nil
})Python
Gunakan OpenTelemetry
Anda dapat menggunakan OpenTelemetry untuk mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Gunakan OpenTelemetry untuk melaporkan data jejak aplikasi Python.
Kemudian, uraikan konteks rentang dari header permintaan HTTP untuk mengaktifkan pelacakan. Contoh kode:
// Initialize the 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)
// Parse the trace context from the request headers.
carrier ={'traceparent': headers['Traceparent'], 'tracestate': headers['Tracestate']}
ctx = TraceContextTextMapPropagator().extract(carrier=carrier)
with tracer.start_span("test", context=ctx):
// do something
return "success"Gunakan SkyWalking
Anda dapat menggunakan SkyWalking untuk mengintegrasikan aplikasi ke dalam Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Gunakan SkyWalking untuk melaporkan data aplikasi Python.
Kemudian, uraikan konteks rentang dari header permintaan HTTP untuk mengaktifkan pelacakan. Contoh kode:
from skywalking import config, agent
from skywalking.trace.context import SpanContext, get_context
from skywalking.trace.carrier import CarrierItem
# Configure SkyWalking and adjust the parameters as needed.
config.init(agent_collector_backend_services='<endpoint>',
agent_authentication='<auth-token>')
agent.start()
# Use the function to process the HTTP request headers.
def handle_request(headers):
# Obtain the trace information from the request headers.
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)
# Obtain the trace context from the carrier.
context = get_context().extract(carrier)
# Create a span.
with get_context().new_entry_span(op='operation_name') as span:
# Process the request and automatically submit the span upon processing completion.
...
# Use a dictionary with SkyWalking segment IDs to simulate the HTTP request headers.
incoming_headers = {
'sw8': '1-My40LjU=-MTY1MTcwNDI5OTk5OA==-xxxx-xx-x-x==', # Specify the value.
# Other headers...
}
# Call the function to process the request.
handle_request(incoming_headers)Lihat data jejak lengkap
Setelah pelacakan ujung-ke-ujung diaktifkan, Anda dapat melihat data jejak permintaan frontend di modul RUM Konsol ARMS.
Klik Lihat Rantai Panggilan untuk melihat data jejak lengkap dari sebuah permintaan dan topologi. Anda dapat menganalisis masalah seperti permintaan lambat atau abnormal berdasarkan detail permintaan dan data jejak backend.
Rentang di bagian atas adalah rentang root. Nama rentang dan nama aplikasi bervariasi berdasarkan jenis aplikasi:
Aplikasi Web atau HTML5: Nama aplikasi adalah rum-browser dan nama rentang diawali dengan
browser.request:.Program mini: Nama program mini adalah rum-miniapp dan nama rentang diawali dengan
miniapp.request:.Aplikasi Android: Nama aplikasi adalah rum-android dan nama rentang diawali dengan
android.request:.Aplikasi iOS: Nama aplikasi adalah rum-ios dan nama rentang diawali dengan
ios.request:.
Anda juga dapat melihat layanan hulu dan hilir yang terlibat dalam permintaan berdasarkan topologi.