Tracing adalah metode pengamatan aliran permintaan melalui sistem terdistribusi, di mana setiap langkah pemrosesan dicatat sebagai peristiwa terpisah dengan stempel waktu. Menurut data OpenTelemetry, 2025, trace menggabungkan jalur lengkap permintaan dari titik masuk hingga respons akhir, melewati semua mikrolayanan dan panggilan eksternal. Ini memungkinkan pengembang untuk mengidentifikasi hambatan, keterlambatan, dan kegagalan dalam arsitektur backend mobile yang kompleks.
Poin Utama
Tracing adalah metode observasi terdistribusi di mana setiap permintaan yang masuk dilacak melalui semua layanan dan komponen sistem. Berbeda dengan metrik, yang menunjukkan nilai agregat (waktu respons rata-rata, jumlah kesalahan), tracing mempertahankan konteks lengkap dari satu permintaan tertentu.
Setiap langkah pemrosesan — panggilan basis data, permintaan HTTP ke mikrolayanan lain, eksekusi tugas latar belakang — dicatat sebagai unit terpisah dengan stempel waktu, status, dan atribut. Menurut data Google Dapper (publikasi asli tahun 2010), tracing memungkinkan lokalisasi keterlambatan dalam sistem terdistribusi dengan akurasi hingga satu panggilan.
Tracing sangat penting untuk aplikasi mobile, di mana backend terdiri dari puluhan mikrolayanan. Tindakan pengguna — misalnya, masuk ke akun — dapat melalui API Gateway, layanan autentikasi, basis data, dan layanan Push. Tanpa trace, hampir tidak mungkin untuk menentukan komponen mana yang memperlambat respons.
Unit dasar tracing adalah span. Setiap span mewakili satu operasi logis: permintaan HTTP, kueri SQL, panggilan gRPC, serialisasi JSON. Span berisi pengidentifikasi unik, pengidentifikasi induk, nama operasi, waktu mulai, durasi, status, dan serangkaian atribut.
Semua span yang terkait dengan satu permintaan akar bergabung dalam trace. Span akar (root span) mewakili titik masuk — permintaan HTTP dari klien mobile ke API. Span anak membentuk pohon di mana setiap span merujuk ke induknya melalui bidang parent_span_id.
Durasi trace sama dengan jumlah durasi segmen waktu unik dari semua span. Jika dua span anak dijalankan secara paralel, waktu mereka tidak dijumlahkan — ini sangat penting untuk analisis yang benar atas keterlambatan yang disebabkan oleh panggilan paralel mikrolayanan.
Setiap span dapat berisi atribut — pasangan kunci-nilai dengan meta-informasi: URL permintaan, ID pengguna, versi API, nama host. Atribut digunakan untuk memfilter dan mengelompokkan trace. Selain atribut, span mendukung peristiwa — stempel waktu dengan deskripsi teks, misalnya “cache miss” atau “percobaan koneksi ulang”.
Distributed tracing memecahkan masalah menghubungkan span yang dibuat dalam proses berbeda dan di mesin berbeda. Mekanismenya didasarkan pada transmisi konteks: saat memanggil layanan B dari layanan A, sebuah header dengan pengidentifikasi trace saat ini dan span induk ditambahkan ke permintaan keluar.
Protokol standar untuk transmisi konteks — W3C Trace Context (header traceparent dan tracestate) dan Zipkin B3 (header X-B3-TraceId, X-B3-SpanId). W3C Trace Context diadopsi sebagai standar oleh konsorsium W3C pada tahun 2021 dan didukung oleh semua penyedia telemetri utama.
Saat menerima permintaan, layanan B mengekstrak trace_id dari header dan membuat span anak dengan trace_id ini. Dengan demikian, setelah permintaan selesai, semua span dari berbagai layanan bergabung menjadi satu trace di sisi kolektor. Untuk ini, setiap layanan harus diinstrumentasi dengan pustaka tracing yang sama.
Dalam pengembangan mobile, transmisi konteks mencakup tidak hanya backend, tetapi juga interaksi klien-server. Aplikasi mobile dapat mengirim trace_id di header setiap permintaan API, memungkinkan koneksi tindakan klien dengan pemrosesan server. OpenTelemetry SDK untuk iOS dan Android mendukung pembuatan dan transmisi konteks trace secara otomatis melalui klien HTTP.
import io.opentelemetry.api.trace.Span
import io.opentelemetry.api.trace.Tracer
import io.opentelemetry.context.Context
class TracingInterceptor : Interceptor {
private val tracer: Tracer = OpenTelemetry.getTracer("mobile-app")
override fun intercept(chain: Interceptor.Chain): Response {
val span = tracer.spanBuilder("HTTP POST /api/login")
.setParent(Context.current())
.startSpan()
return chain.proceed(chain.request())
.also { span.end() }
}
}
Interceptor yang disajikan di Kotlin membuat span untuk setiap permintaan HTTP ke server. Konteks induk ditransmisikan dari kode pemanggil melalui Context.current(), yang memungkinkan penautan trace sisi klien dengan trace sisi server.
OpenTelemetry — standar de facto untuk pengumpulan data trace. Ini menyediakan API terpadu untuk menghasilkan span, instrumentasi otomatis pustaka populer, dan mekanisme ekspor data yang fleksibel ke berbagai backend: Jaeger, Zipkin, Grafana Tempo, Datadog, New Relic.
OpenTelemetry mendukung pembuatan span otomatis untuk framework populer: Spring Boot, Ktor, Flask, Express, gRPC. Pengembang hanya perlu menambahkan ketergantungan ke proyek, dan pustaka secara mandiri mencegat permintaan masuk dan keluar. Auto-instrumentation untuk Java menggunakan javaagent, yang memodifikasi bytecode dengan cepat tanpa mengubah sumber.
Untuk platform mobile, OpenTelemetry menyediakan Swift SDK dan Kotlin SDK. Mereka secara otomatis membuat span untuk permintaan jaringan (URLSession, OkHttp), bekerja dengan basis data (CoreData, Room), dan tugas latar belakang. Pengembang dapat menambahkan span kustom untuk logika bisnis.
Span yang terkumpul dikirim ke kolektor melalui protokol OTLP (OpenTelemetry Protocol). Kolektor dapat mem-buffer, memfilter, dan mengarahkan data ke satu atau beberapa sistem penyimpanan. Menurut dokumentasi OpenTelemetry, keterlambatan tipikal dari pembuatan span hingga tampilannya di dashboard adalah 2–5 detik saat menggunakan ekspor gRPC.
import OpenTelemetryApi
import OpenTelemetrySdk
import URLSessionInstrumentation
let instrumentation = URLSessionInstrumentation()
instrumentation.enable()
let tracer = OpenTelemetry.instance.tracerFactory
.get("mobile-monitoring")
let span = tracer.spanBuilder("fetch-user-profile")
.setAttribute(key: "user.id", value: userId)
.startSpan()
span.end()
Kode di Swift mengaktifkan instrumentasi otomatis lapisan jaringan dan membuat span kustom untuk operasi pengambilan profil pengguna. Atribut user.id memungkinkan penyaringan trace nanti berdasarkan pengguna tertentu.
Dalam sistem dengan beban tinggi, tracing setiap permintaan tidak mungkin dilakukan — ini akan menciptakan beban yang tidak dapat diterima pada penyimpanan dan jaringan. Sampling memecahkan masalah ini dengan hanya menyimpan sebagian trace. Pemilihan strategi secara langsung memengaruhi kelengkapan data dan biaya infrastruktur.
Keputusan untuk menyimpan trace dibuat pada saat pembuatannya — di span akar. Pendekatan paling sederhana dan paling umum: persentase tetap permintaan (misalnya, 5%) disimpan, sisanya dibuang. Kekurangannya — tidak dapat dijamin bahwa kesalahan langka akan ditangkap. Probability sampler di OpenTelemetry mendukung pengaturan probabilitas dari 0.0 hingga 1.0.
Keputusan ditunda sampai semua span trace selesai. Analisator mengevaluasi apakah trace berisi kesalahan, pelampauan waktu, atau atribut menarik, dan baru kemudian menyimpannya. Pendekatan ini memerlukan buffering semua span di kolektor, yang meningkatkan konsumsi memori. Menurut data Grafana Labs, tail-based sampling 40–60% lebih efisien dalam hal rasio “harga untuk data yang berguna” di sistem dengan kesalahan langka namun kritis.
| Strategi | Kelebihan | Kekurangan |
|---|---|---|
| Fixed probability | Kesederhanaan, beban yang dapat diprediksi | Melewatkan peristiwa langka |
| Rate limiting | Volume data terjamin | Cakupan tidak merata |
| Tail-based | Menangkap semua kesalahan | Konsumsi memori tinggi |
| Adaptive | Keseimbangan biaya dan cakupan | Kompleksitas konfigurasi |
Logging mencatat peristiwa terpisah dengan tingkat kepentingan (info, warn, error), tetapi tidak menghubungkannya dalam konteks satu permintaan. Tracing, sebaliknya, menciptakan pohon operasi terstruktur yang termasuk dalam satu permintaan ujung-ke-ujung. Dalam praktiknya, kedua pendekatan ini tidak saling eksklusif, melainkan saling melengkapi.
Log efektif untuk analisis terperinci dari kesalahan tertentu: pengembang melihat pesan yang tepat, stack trace, nilai variabel. Tracing menjawab pertanyaan “mengapa permintaan membutuhkan waktu 5 detik” — menunjukkan mikrolayanan atau panggilan mana yang menghabiskan waktu paling banyak. Menurut data Honeycomb (2024), tim yang menggunakan tracing bersama dengan logging menemukan akar penyebab insiden 2,3 kali lebih cepat.
Pendekatan modern — observability — menggabungkan trace, metrik, dan log ke dalam satu sistem. OpenTelemetry mendukung korelasi antara ketiga sinyal ini: setiap span dapat berisi referensi ke log terkait, dan metrik dapat ditandai dengan trace_id untuk navigasi ke trace tertentu.
Pertanyaan yang Sering Diajukan
Monitoring menunjukkan metrik agregat sistem — waktu respons rata-rata, jumlah kesalahan per menit, beban CPU. Tracing menunjukkan jalur satu permintaan tertentu melalui semua komponen. Monitoring menjawab pertanyaan “apa yang terjadi”, tracing — “mengapa ini terjadi”.
Untuk sistem produksi, 1–5% permintaan dengan head-based sampling sudah cukup. Jika sistem jarang menghasilkan kesalahan, disarankan tail-based sampling dengan fokus pada penangkapan semua trace yang salah. Untuk lingkungan staging, tracing 100% permintaan tanpa batasan diperbolehkan.
Alat utama: Jaeger (solusi dari Uber, open source), Grafana Tempo (penyimpanan trace yang skalabel), Datadog APM, New Relic Distributed Tracing, AWS X-Ray dan Honeycomb. Semuanya mendukung standar OpenTelemetry untuk penerimaan data.
Ya, tracing lokal berfungsi di dalam satu proses. OpenTelemetry SDK untuk iOS dan Android membuat span untuk operasi lokal: membaca dari basis data, pemrosesan gambar, permintaan jaringan. Trace semacam itu tidak terdistribusi, tetapi berguna untuk diagnosis kinerja sisi klien.
Pustaka tracing modern menambahkan kurang dari 1% overhead dengan head-based sampling. OpenTelemetry menggunakan ekspor data asinkron yang tidak memblokir thread utama. Untuk perangkat mobile, disarankan untuk membatasi frekuensi pembuatan span dan menggunakan strategi sampling adaptif.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga