Distributed Tracing: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234
Distributed Tracing: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Distributed Tracing merupakan salah satu teknologi penting dalam observability yang digunakan untuk memantau perjalanan sebuah request ketika melewati banyak service dalam arsitektur distributed system dan microservices.
Distributed Tracing: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Distributed Tracing merupakan salah satu teknologi penting dalam observability yang digunakan untuk memantau perjalanan sebuah request ketika melewati banyak service dalam arsitektur distributed system dan microservices.
Pada aplikasi modern, satu request dari pengguna biasanya tidak hanya diproses oleh satu aplikasi Dewa234. Sebuah request dapat melewati API Gateway, authentication service, user service, order service, payment service, database, hingga service eksternal lainnya.
Semakin banyak service yang terlibat, semakin sulit mengetahui di mana sebuah request mengalami latency, error, atau kegagalan. Log dari setiap service memang dapat membantu, tetapi menghubungkan log tersebut secara manual sering kali membutuhkan waktu.
Distributed Tracing hadir untuk mengatasi permasalahan tersebut dengan mengikuti perjalanan request secara end-to-end dari service awal hingga service terakhir yang terlibat dalam pemrosesan request.
Apa Itu Distributed Tracing?
Distributed Tracing adalah metode observability yang digunakan untuk melacak perjalanan sebuah request melalui berbagai service dalam sistem terdistribusi.
Distributed Tracing memberikan gambaran mengenai bagaimana sebuah request diproses, service apa saja yang dilewati, berapa lama setiap proses berlangsung, serta bagian mana yang mengalami error atau latency tinggi.
User | v API Gateway | v User Service | v Order Service | v Payment Service | v Database
Dengan Distributed Tracing, seluruh perjalanan request tersebut dapat direpresentasikan sebagai satu rangkaian trace yang terdiri dari beberapa span.
Mengapa Distributed Tracing Dibutuhkan?
Pada aplikasi monolithic, troubleshooting relatif lebih sederhana karena sebagian besar proses berada di dalam satu aplikasi. Namun, pada microservices, sebuah request dapat melewati banyak service yang berbeda.
Request | +---- Service A | +---- Service B | +---- Service C | +---- Service D | +---- Service E
Jika request membutuhkan waktu 5 detik, administrator perlu mengetahui service mana yang menyebabkan keterlambatan tersebut.
Tanpa Distributed Tracing, proses pencarian penyebab latency dapat dilakukan dengan membandingkan timestamp dari log berbagai service. Pendekatan tersebut dapat menjadi sulit ketika jumlah service semakin banyak.
Distributed Tracing menyatukan informasi perjalanan request sehingga proses analisis menjadi lebih terstruktur.
Konsep Trace dan Span
Dua konsep utama dalam Distributed Tracing adalah trace dan span.
Apa Itu Trace?
Trace adalah representasi lengkap dari perjalanan sebuah request dari awal hingga akhir.
Trace | +-- API Gateway | +-- User Service | +-- Order Service | +-- Payment Service | +-- Database
Satu trace dapat terdiri dari banyak span yang mewakili operasi individual pada masing-masing service.
Apa Itu Span?
Span adalah unit pekerjaan atau operasi tertentu yang menjadi bagian dari sebuah trace.
Trace | +-- Span: API Gateway | +-- Span: User Service | +-- Span: Order Service | +-- Span: Payment Service | +-- Span: Database
Setiap span biasanya memiliki informasi seperti nama operasi, waktu mulai, waktu selesai, durasi, status, atribut, serta hubungan dengan span lainnya.
Hubungan Trace dan Span
Trace dapat dianggap sebagai sebuah perjalanan lengkap, sedangkan span adalah bagian-bagian yang membentuk perjalanan tersebut.
TRACE
|
+--------------+--------------+
| | |
v v v
Span A Span B Span C
| | |
v v v
Service A Service B Service C
Dengan hubungan tersebut, administrator dapat mengetahui bagaimana sebuah request berpindah dari satu service menuju service lainnya.
Cara Kerja Distributed Tracing
Distributed Tracing bekerja dengan memberikan identitas tertentu kepada request yang kemudian diteruskan sepanjang perjalanan request tersebut.
Client | | Request + Trace Context v Service A | | Trace Context v Service B | | Trace Context v Service C | v Service D
Setiap service membuat span untuk operasi yang dilakukannya. Span-span tersebut kemudian dikumpulkan oleh sistem observability sehingga membentuk satu trace.
Trace Context
Agar informasi tracing dapat diteruskan dari satu service ke service berikutnya, diperlukan mekanisme untuk membawa konteks trace.
Trace context biasanya berisi informasi yang memungkinkan sistem mengetahui bahwa beberapa operasi tersebut merupakan bagian dari request yang sama.
Service A
Trace Context
|
v
Service B
|
v
Service C
|
v
Service D
Propagation trace context merupakan bagian penting dari Distributed Tracing karena tanpa propagation, trace dapat terputus ketika request berpindah service.
Arsitektur Distributed Tracing
Arsitektur Distributed Tracing umumnya terdiri dari aplikasi atau proxy yang menghasilkan telemetry, collector yang menerima data telemetry, backend tracing untuk menyimpan data, serta interface yang digunakan untuk melihat trace.
Application
|
v
Telemetry / Instrumentation
|
v
Collector
|
v
Tracing Backend
|
v
Tracing UI
Pada lingkungan service mesh, proxy juga dapat menjadi sumber data tracing sehingga aplikasi tidak selalu harus menangani seluruh proses observability secara langsung.
Komponen Distributed Tracing
| Komponen | Fungsi |
|---|---|
| Trace | Merepresentasikan perjalanan request secara keseluruhan. |
| Span | Merepresentasikan operasi individual. |
| Trace Context | Membawa identitas trace antar-service. |
| Instrumentation | Menghasilkan data tracing dari aplikasi atau proxy. |
| Collector | Menerima dan meneruskan data telemetry. |
| Tracing Backend | Menyimpan dan memproses data trace. |
| Tracing UI | Menampilkan trace untuk dianalisis. |
Distributed Tracing pada Microservices
Distributed Tracing sangat berguna pada arsitektur microservices karena satu request dapat melibatkan banyak service.
User | v API Gateway | v Order Service | +---- User Service | +---- Inventory Service | +---- Payment Service | +---- Notification Service
Tanpa tracing, administrator mungkin harus membuka log dari setiap service untuk mengetahui perjalanan request.
Dengan tracing, seluruh perjalanan request dapat dilihat dalam satu trace.
Contoh Trace pada Sistem E-Commerce
Misalnya pengguna melakukan checkout. Request tersebut dapat melewati beberapa service.
Checkout Request
|
v
API Gateway
|
v
Order Service
|
+---- Inventory Service
|
+---- Payment Service
|
+---- Shipping Service
|
v
Order Completed
Jika proses checkout membutuhkan waktu terlalu lama, Distributed Tracing dapat membantu menemukan service yang menyebabkan latency.
Misalnya hasil tracing menunjukkan bahwa API Gateway membutuhkan 50 ms, Order Service 100 ms, Inventory Service 80 ms, tetapi Payment Service membutuhkan 3 detik.
Dari informasi tersebut, administrator dapat langsung memfokuskan investigasi pada Payment Service.
Distributed Tracing dan Latency
Salah satu manfaat utama Distributed Tracing adalah kemampuan menganalisis latency pada setiap bagian request.
Total Request: 3500 ms
API Gateway 50 ms
|
Order Service 100 ms
|
Inventory 80 ms
|
Payment 3200 ms
|
Database 70 ms
Contoh tersebut menunjukkan bahwa sebagian besar latency berasal dari Payment Service.
Informasi seperti ini sangat membantu dalam performance optimization.
Distributed Tracing dan Error Tracking
Distributed Tracing juga dapat membantu menemukan lokasi error dalam rangkaian request.
Request | v Service A OK | v Service B OK | v Service C ERROR | X Service D
Administrator dapat melihat span yang mengalami error dan memeriksa atribut atau informasi terkait untuk mengetahui penyebab kegagalan.
Distributed Tracing pada Service Mesh
Service Mesh dan Distributed Tracing memiliki hubungan yang sangat erat. Service Mesh menyediakan infrastructure layer yang dapat mengamati komunikasi antar-service.
Service A | v Envoy Proxy | | Trace v Envoy Proxy | v Service B
Proxy dapat menghasilkan informasi telemetry dari traffic yang melewatinya. Informasi tersebut dapat diteruskan ke sistem tracing.
Dengan demikian, administrator dapat memperoleh visibility terhadap komunikasi service-to-service tanpa harus menambahkan seluruh logic observability ke setiap aplikasi.
Distributed Tracing pada Istio
Dalam ekosistem Istio, tracing merupakan bagian dari kemampuan observability yang dapat digunakan untuk memahami komunikasi antar-service.
Istio
|
+--------+--------+
| |
v v
Service A Service B
| |
Envoy Envoy
| |
+--------+--------+
|
v
Trace Data
|
v
Tracing Backend
Istio dapat digunakan bersama sistem tracing untuk memberikan informasi mengenai perjalanan request pada service mesh.
Distributed Tracing dan Telemetry
Distributed Tracing merupakan salah satu bagian dari observability. Observability secara umum mencakup metrics, logs, dan traces.
| Jenis | Fokus |
|---|---|
| Metrics | Data numerik mengenai kondisi sistem. |
| Logs | Catatan kejadian yang terjadi pada sistem. |
| Traces | Perjalanan request melalui sistem. |
Ketiganya dapat digunakan bersama untuk memperoleh gambaran sistem yang lebih lengkap.
Distributed Tracing dan OpenTelemetry
OpenTelemetry merupakan framework dan toolkit observability yang dapat digunakan untuk menghasilkan dan mengirimkan telemetry, termasuk traces.
Application
|
v
OpenTelemetry
|
+---- Metrics
|
+---- Logs
|
+---- Traces
|
v
Collector
|
v
Backend
OpenTelemetry dapat digunakan sebagai bagian dari arsitektur observability modern untuk mengumpulkan data tracing dari berbagai service dan sistem.
Sampling pada Distributed Tracing
Pada sistem dengan traffic sangat besar, menyimpan seluruh trace dapat menghasilkan volume data yang sangat tinggi. Karena itu, sistem tracing biasanya dapat menggunakan mekanisme sampling.
100.000 Requests
|
v
Sampling
|
v
10.000 Traces
|
v
Tracing Backend
Sampling dapat membantu mengurangi penggunaan storage dan resource observability.
Namun, strategi sampling harus dirancang dengan baik agar trace penting tetap dapat diperoleh.
Parent Span dan Child Span
Span dapat memiliki hubungan parent-child. Parent span merepresentasikan operasi yang lebih besar, sedangkan child span merepresentasikan operasi yang dilakukan di dalamnya.
Parent Span
|
+---- Child Span A
|
+---- Child Span B
|
+---- Child Span C
Struktur tersebut membantu menggambarkan hubungan antar operasi dalam satu trace.
Trace Visualization
Salah satu keunggulan Distributed Tracing adalah kemampuan menampilkan request dalam bentuk visual timeline.
Timeline Gateway |----| Order |------| Inventory |---| Payment |-----------| Database |---|
Dari visualisasi tersebut administrator dapat melihat operasi mana yang berjalan paralel, mana yang menunggu, serta bagian mana yang membutuhkan waktu paling lama.
Fungsi Distributed Tracing
- Melacak perjalanan request antar-service.
- Mengidentifikasi sumber latency.
- Mendeteksi lokasi error.
- Membantu troubleshooting microservices.
- Menganalisis dependency antar-service.
- Menganalisis performance aplikasi.
- Mendukung observability.
- Membantu memahami alur komunikasi distributed system.
- Mendukung monitoring service-to-service communication.
Manfaat Distributed Tracing
- Mempercepat proses troubleshooting.
- Membantu menemukan bottleneck.
- Meningkatkan visibility terhadap microservices.
- Membantu menganalisis dependency.
- Mendukung performance optimization.
- Membantu menemukan root cause error.
- Menyediakan gambaran end-to-end request.
- Membantu tim memahami arsitektur distributed system.
Kelebihan Distributed Tracing
- Memberikan visibility end-to-end.
- Mudah digunakan untuk menganalisis request kompleks.
- Membantu menemukan service yang bermasalah.
- Membantu analisis latency.
- Sangat berguna untuk arsitektur microservices.
- Dapat dikombinasikan dengan Service Mesh.
- Dapat diintegrasikan dengan platform observability.
Kekurangan Distributed Tracing
- Menghasilkan volume data yang besar.
- Membutuhkan storage dan processing tambahan.
- Konfigurasi tracing dapat menjadi kompleks.
- Sampling perlu dirancang dengan baik.
- Trace context harus diteruskan dengan benar.
- Tidak menggantikan metrics dan logs.
- Memerlukan sistem backend untuk menyimpan dan menampilkan trace.
Best Practice Distributed Tracing
- Gunakan trace context propagation secara konsisten.
- Gunakan naming span yang jelas.
- Jangan memasukkan data sensitif ke dalam atribut trace.
- Gunakan sampling untuk sistem dengan traffic tinggi.
- Integrasikan tracing dengan metrics dan logs.
- Gunakan trace ID untuk membantu korelasi dengan log.
- Pantau penggunaan storage tracing.
- Dokumentasikan arsitektur observability.
- Uji tracing pada staging sebelum production.
- Pastikan sistem tracing memiliki mekanisme retention yang sesuai.
Troubleshooting Distributed Tracing
1. Trace Tidak Lengkap
Jika trace tidak menunjukkan seluruh service, periksa propagation trace context dan konfigurasi instrumentation.
Service A | | Trace Context X Service B | X Service C
Trace context yang terputus dapat menyebabkan satu request terlihat sebagai beberapa trace terpisah.
2. Span Tidak Muncul
Periksa instrumentation pada service yang bersangkutan dan pastikan telemetry dapat dikirim menuju collector atau backend yang digunakan.
3. Data Tracing Terlalu Banyak
Jika volume trace terlalu besar, periksa konfigurasi sampling dan retention.
4. Tracing Menambah Overhead
Instrumentation dan pengiriman telemetry dapat menggunakan resource tambahan. Gunakan konfigurasi sampling dan collection yang sesuai dengan kebutuhan sistem.
Contoh Arsitektur Distributed Tracing pada Kubernetes
Kubernetes Cluster
|
+------------+------------+
| |
v v
Service A Service B
| |
Proxy / Proxy /
Instrumentation Instrumentation
| |
+------------+------------+
|
v
Collector
|
v
Tracing Backend
|
v
Tracing UI
Arsitektur tersebut memungkinkan data tracing dari berbagai workload dikumpulkan dan dianalisis secara terpusat.
Implementasi Distributed Tracing
Implementasi Distributed Tracing biasanya dimulai dengan menentukan service yang akan dipantau, memilih mekanisme instrumentation atau telemetry, menentukan collector, kemudian menentukan backend untuk menyimpan dan menampilkan trace.
Tentukan Service
|
v
Instrumentation
|
v
Trace Context
|
v
Collector
|
v
Tracing Backend
|
v
Visualization
Pada lingkungan Service Mesh, proxy dapat menjadi bagian penting dalam pengumpulan telemetry, sedangkan aplikasi dapat menggunakan instrumentation apabila diperlukan untuk mendapatkan informasi tracing yang lebih detail.
Distributed Tracing dan Root Cause Analysis
Salah satu penggunaan paling penting Distributed Tracing adalah membantu proses Root Cause Analysis.
User Error | v API Gateway | v Order Service | v Payment Service | X Database Timeout
Dari trace tersebut, tim dapat melihat bahwa error yang dirasakan pengguna sebenarnya berasal dari database atau service tertentu yang berada jauh di dalam rantai request.
Hal tersebut membuat proses investigasi menjadi lebih cepat dibandingkan hanya mengandalkan log dari gateway.
Distributed Tracing vs Logging
| Aspek | Distributed Tracing | Logging |
|---|---|---|
| Fokus | Perjalanan request. | Kejadian atau event. |
| Microservices | Sangat berguna. | Berguna. |
| Latency | Sangat baik untuk analisis. | Memerlukan korelasi timestamp. |
| Dependency | Dapat divisualisasikan. | Tidak selalu terlihat langsung. |
Distributed Tracing dan logging sebaiknya digunakan bersama karena keduanya memberikan informasi yang berbeda tetapi saling melengkapi.
Distributed Tracing vs Metrics
Metrics memberikan gambaran kondisi sistem dalam bentuk angka, sedangkan tracing memberikan detail perjalanan request tertentu.
Metrics | +---- CPU +---- Memory +---- Request Rate +---- Error Rate +---- Latency Tracing | +---- Request A +---- Request B +---- Request C
Metrics dapat digunakan untuk mendeteksi bahwa latency meningkat, kemudian Distributed Tracing digunakan untuk mencari request dan service yang menyebabkan peningkatan tersebut.
FAQ Distributed Tracing
Apa itu Distributed Tracing?
Distributed Tracing adalah metode observability untuk melacak perjalanan request melalui berbagai service dalam sistem terdistribusi.
Apa itu trace?
Trace adalah representasi lengkap dari perjalanan sebuah request dari awal hingga akhir.
Apa itu span?
Span adalah unit operasi individual yang menjadi bagian dari sebuah trace.
Mengapa Distributed Tracing penting untuk microservices?
Karena satu request pada microservices dapat melewati banyak service sehingga dibutuhkan cara untuk melihat perjalanan request secara end-to-end.
Apa hubungan Distributed Tracing dengan Service Mesh?
Service Mesh dapat membantu menghasilkan telemetry dari komunikasi antar-service melalui proxy, sehingga informasi tersebut dapat digunakan untuk Distributed Tracing.
Apakah Distributed Tracing menggantikan logging?
Tidak. Distributed Tracing dan logging memiliki fungsi berbeda dan sebaiknya digunakan secara bersamaan.
Apakah Distributed Tracing menggantikan metrics?
Tidak. Metrics memberikan informasi agregat mengenai kondisi sistem, sedangkan tracing memberikan detail perjalanan request.
Apa itu trace context?
Trace context adalah informasi yang digunakan untuk menghubungkan operasi dari berbagai service sebagai bagian dari satu trace.
Apa fungsi sampling?
Sampling digunakan untuk menentukan sebagian trace yang dikumpulkan sehingga volume telemetry dapat dikendalikan.
Apakah Distributed Tracing membutuhkan collector?
Collector umum digunakan sebagai komponen untuk menerima, memproses, dan meneruskan data telemetry menuju backend observability.
Apa manfaat Distributed Tracing untuk troubleshooting?
Distributed Tracing membantu menunjukkan service yang menyebabkan error, latency, atau bottleneck sehingga proses root cause analysis menjadi lebih mudah.
Apakah Distributed Tracing cocok untuk Kubernetes?
Ya. Distributed Tracing sangat berguna pada Kubernetes karena workload sering terdiri dari banyak microservices yang saling berkomunikasi.
Baca Juga
- Service Mesh
- Istio Telemetry API
- Istio Authorization Policy
- Istio RequestAuthentication
- Istio PeerAuthentication
- Mutual TLS (mTLS) Istio
- Istio Traffic Management
- Waypoint Proxy
- Ambient Mesh
Artikel Selanjutnya
Setelah memahami Distributed Tracing, pembahasan berikutnya dalam urutan artikel adalah Istio Telemetry. Topik tersebut akan memperdalam bagaimana metrics, logs, dan traces dapat dikonfigurasi serta dikelola dalam ekosistem Istio.
Service Mesh
|
v
Distributed Tracing
|
v
Telemetry Istio
|
v
Authorization Policy
|
v
RequestAuthentication
|
v
PeerAuthentication
Kesimpulan
Distributed Tracing merupakan bagian penting dari observability pada aplikasi modern, khususnya pada arsitektur microservices dan distributed system. Teknologi ini memungkinkan tim melihat perjalanan sebuah request dari service awal hingga service terakhir yang terlibat.
Konsep utama Distributed Tracing terdiri dari trace, span, dan trace context. Trace menggambarkan keseluruhan perjalanan request, sedangkan span menggambarkan operasi individual yang terjadi selama request tersebut diproses.
Dengan Distributed Tracing, administrator dapat mengetahui service mana yang menyebabkan latency, menemukan lokasi error, memahami dependency antar-service, serta melakukan root cause analysis dengan lebih cepat.
Distributed Tracing juga memiliki hubungan yang erat dengan Service Mesh. Proxy yang berada di dalam Service Mesh dapat membantu menghasilkan telemetry dari komunikasi antar-service sehingga visibility terhadap distributed application menjadi lebih baik.
Namun, Distributed Tracing bukan pengganti metrics maupun logging. Ketiganya memiliki fungsi berbeda dan akan memberikan hasil observability yang lebih lengkap apabila digunakan secara bersama-sama.
Dalam lingkungan Kubernetes dan microservices, penerapan Distributed Tracing dapat membantu tim memahami perilaku aplikasi secara end-to-end. Dengan dukungan instrumentation, trace context propagation, collector, tracing backend, dan visualization, proses monitoring serta troubleshooting dapat dilakukan secara lebih efektif.
Pada akhirnya, Distributed Tracing menjadi salah satu fondasi penting dalam membangun sistem cloud-native yang mudah diamati, dianalisis, dan dipelihara.