Belajar Observability dengan LGTM Stack - Scaling Tempo for Production
Episode 24 of 36

Belajar Observability dengan LGTM Stack - Scaling Tempo for Production

Tempo menghadapi tantangan unik: trace identik hanya bisa ditemukan dengan TraceID. Episode ini membahas deployment single binary dan microservices, strategi ingestion, optimasi query dengan bloom filter dan caching, sampling, serta metrik turunan dari trace.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Trace berbeda dari metrik dan log: setiap TraceID unik, dan menemukan trace tanpa TraceID menuntut pencarian yang mahal. Tantangan inilah yang membuat scaling Tempo membutuhkan strategi tersendiri — mulai dari deployment hingga sampling.

Episode ini membahas deployment Tempo, strategi ingestion, optimasi query dengan bloom filter dan caching, sampling strategy, serta metrik turunan dari trace lewat metrics-generator.

Deployment Tempo

Single Binary vs Microservices

  • Single binary: semua komponen dalam satu proses — cukup untuk skala kecil dan menengah.
  • Microservices: distributor, ingester, querier, dan lainnya terpisah — untuk skala besar.
Jalur deployment Tempo
single binary -> microservices

Pola single binary -> microservices mengikuti pola yang sama seperti Loki — mulai sederhana, naik sesuai kebutuhan.

Storage dan Retention

  • Backend storage selection: pilih S3, GCS, atau Azure Blob sesuai environment.
  • Retention configuration: atur berapa lama trace disimpan — pertimbangkan biaya dan kepatuhan.
Konfigurasi storage Tempo
storage:
  trace:
    backend: s3
    s3:
      bucket: tempo-blocks
    block:
      blocklist_poll: 5m

Blok backend: s3 memindahkan penyimpanan trace ke object storage — pola yang sama dengan Mimir di episode 22.

Strategi Ingestion

Rate Limiting dan Backpressure

  • Rate limiting: batasi volume trace per tenant agar cluster tetap sehat.
  • Load balancing: distribusikan beban ingestion ke banyak distributor.
  • Batching strategies: kirim trace dalam batch dari Collector.
  • Backpressure handling: beri sinyal ke collector saat ingester sibuk.
Konsep limit ingestion Tempo
overrides:
  per_tenant_override_config:
    ingester:
      max_local_traces_per_user: 100000

Nilai max_local_traces_per_user: 100000 membatasi trace per tenant di ingester — pelindung dasar saat trafik melonjak.

Optimasi Query

  • TraceID lookup: akses langsung berdasarkan TraceID — cepat, memakai index bloom.
  • Search performance: pencarian TraceQL membutuhkan bloom filter yang sehat.
  • Caching configuration: cache hasil pencarian untuk query yang berulang.
  • Bloom filters: struktur data yang mempercepat pencarian span dalam blok.
Konsep bloom filter
storage:
  trace:
    block:
      bloom_filter_false_positive: 0.05
      index_downsample_bytes: 1048576

Nilai bloom_filter_false_positive: 0.05 menyeimbangkan kecepatan pencarian dengan ukuran index.

Sampling Strategy

Empat Pendekatan Utama

  • Probabilistic sampling: memilih secara acak berdasarkan probabilitas — paling sederhana.
  • Rate limiting sampling: membatasi jumlah trace per detik.
  • Tail-based sampling: memutuskan setelah trace selesai, memungkinkan aturan cerdas.
  • Adaptive sampling: menyesuaikan berdasarkan trafik dan prioritas.
Sampling di Collector
tail_sampling:
  policies:
    - name: keep-errors
      type: status_code
      status_code:
        status_codes:
          - ERROR

Kebijakan tail_sampling memastikan trace dengan error selalu disimpan meskipun trafik tinggi — nilai penting saat debugging.

Trade-Off Sampling

Sampling menekan biaya tapi mengurangi cakupan. Aturan umum: simpan semua trace error, sampling dengan rasio untuk trace normal, dan pertimbangkan prioritas layanan.

Metrik dari Trace

Metrics-Generator

Komponen metrics-generator menurunkan metrik dari trace yang lewat:

  • Span metrics generator: membuat metrik RED per service.
  • Service graphs: memetakan relasi antar service.
  • RED metrics from traces: rate, errors, dan duration dari data trace.
  • Exemplar generation: menghasilkan exemplar yang menghubungkan metrik ke trace.
Alur metrik dari trace
trace -> metrics-generator -> metrik RED -> Mimir -> dashboard

Pola trace -> metrics-generator -> metrik RED menjelaskan bagaimana service yang tidak diinstrumentasi metrik tetap menghasilkan metrik melalui data trace.

Info

Service graphs dan span metrics sangat berguna untuk layanan lama yang belum diinstrumentasi. Aktifkan metrics-generator di Tempo dan kalian mendapat gambaran trafik lintas service tanpa mengubah satu baris kode aplikasi.

Penutup

Di episode 24 ini kalian memahami deployment Tempo dari single binary ke microservices, strategi ingestion dengan rate limiting dan backpressure, optimasi query dengan bloom filter dan caching, empat pendekatan sampling, serta metrik turunan dari trace.

Inti yang harus dibawa pulang:

  • Trace tanpa TraceID mahal dicari, gunakan bloom filter.
  • Sampling menekan biaya; simpan semua trace error.
  • Rate limiting melindungi ingester dari lonjakan.
  • Metrics-generator menurunkan metrik RED dari trace.
  • Service graphs memetakan relasi antar service.

Di episode 25 selanjutnya kita akan membahas multi-tenancy dan access control — model tenancy, multi-tenancy di Mimir, Loki, dan Tempo, RBAC di Grafana, serta metode autentikasi dari basic auth hingga SAML. Saat banyak tim memakai satu stack, isolasi dan kontrol akses menjadi penentu keamanan.

Belajar Observability dengan LGTM Stack - Scaling Tempo for Production | Belajar Observability dengan LGTM Stack