İçeriğe Atla
Rehberler · 9 dk okuma · görüntülenme
100%

OpenTelemetry Collector'da Tail Sampling Tasarımı

Yüksek hacimli trace verisinde maliyeti düşürürken kritik akışları korumak için tail sampling kurgusunu anlatan rehber.

Tail sampling tabanlı trace hattını gösteren kapak görseli

Trace verisi büyüdükçe ekipler iki uç arasında sıkışır: her span’i saklamak pahalıdır, ama fazla agresif örnekleme incident anında körlük yaratır. Head sampling bu sorunu erken ve ucuz biçimde azaltır; fakat karar daha isteğin sonucu bilinmeden verildiği için kritik hata zincirlerini kaçırabilir. Tail sampling ise isteğin tamamı görüldükten sonra karar verdiği için özellikle kurumsal sistemlerde çok daha anlamlıdır. Bedeli ise daha dikkatli kuyruk ve bellek tasarımıdır.

Tail sampling tabanlı trace hattını gösteren teknik şema
Tail sampling, trace’in sonunu bekleyerek karar verdiği için hata ve gecikme örneklerini daha iyi korur.

Tail sampling ne zaman gerekli olur?

Şu sinyaller varsa genelde zamanı gelmiştir:

  • İstek hacmi yüksek ama anlamlı hata oranı düşüktür
  • Health check ve düşük değerli trafik trace depolamasını şişirir
  • Incident sonrası “tam o isteğin trace’i yok” cümlesi sık duyulur
  • Maliyet düşürme baskısı instrumentation kalitesini tehdit etmeye başlar

Bu durumda amaç tüm veriyi kesmek değil, yüksek tanısal değeri koruyan seçici bir akış kurmaktır.

Temel tasarım prensibi nedir?

Ben tail sampling için üç katman öneriyorum:

  1. Hata veya yüksek gecikme içeren trace’leri öncelikli tut
  2. Kritik servisler için minimum örnekleme tabanı bırak
  3. Başarılı ve düşük etkili trafiği düşük oranda örnekle

Bu model, yalnızca teknik maliyet değil operasyon önceliği üzerinden de okunabilir. Önemli olan sampling kuralını backend fiyatına göre değil, hangi soruları cevaplamak istediğinize göre kurmaktır.

Örnek Collector akışı

Aşağıdaki örnek, tail sampling’i bellek güvenliği ve temel sınıflandırma ile birlikte başlatmak için sade bir çerçeve verir:

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  memory_limiter:
    check_interval: 1s
    limit_mib: 512
    spike_limit_mib: 128

  batch:
    timeout: 5s
    send_batch_size: 1024

  tail_sampling:
    decision_wait: 15s
    num_traces: 50000
    expected_new_traces_per_sec: 1500
    policies:
      - name: keep-errors
        type: status_code
        status_code:
          status_codes: [ERROR]
      - name: keep-slow-checkout
        type: latency
        latency:
          threshold_ms: 1500
      - name: keep-critical-services
        type: string_attribute
        string_attribute:
          key: service.name
          values: [erp-api, payment-gateway, identity-broker]
      - name: sample-background
        type: probabilistic
        probabilistic:
          sampling_percentage: 8

exporters:
  otlphttp:
    endpoint: https://traces.internal/v1/traces

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, tail_sampling, batch]
      exporters: [otlphttp]

Bu örnekte decision_wait ve num_traces değerleri kritik parametrelerdir. Çok düşük ayar, geç biten trace’leri eksik toplar; çok yüksek ayar ise collector belleğini gereksiz büyütür.

Politika sırası neden önemli?

Tail sampling yalnızca “yüzde kaç kalsın” problemi değildir. Politika mantığını şu sırayla düşünmek daha sağlıklı olur:

  • Önce kesin tutulacak sınıflar
  • Sonra iş açısından kritik ama teknik olarak başarılı istekler
  • En sonda arka plan ve düşük değerli trafik

Böylece düşük oranlı genel örnekleme, kritik hata trace’lerini gölgede bırakmaz.

Operasyon tarafında hangi metrikler izlenmeli?

En az şu alanları dashboard’a bağlamak gerekir:

  • Collector bellek tüketimi
  • Sampling sonrası trace kabul oranı
  • Politika bazında tutulan trace sayısı
  • Karar bekleme süresi ve düşen trace miktarı

Bu metrikler olmadan tail sampling çoğu ekipte “maliyet düştü sanıyoruz” şeklinde kör uygulanır. Oysa yanlış ayarlı akış, sessiz veri kaybı üretir.

Yaygın hata nedir?

Tek collector havuzunda tüm servisleri aynı policy setiyle yönetmek. ERP, kimlik ve batch iş akışları aynı tanısal değere sahip değildir. İdeal durumda en azından servis sınıfına göre ayrı policy kümeleri ya da ayrı collector havuzları düşünülmelidir.

Sonuç

OpenTelemetry Collector’da tail sampling tasarımı, trace hacmini azaltma hilesi değil gözlemlenebilirlik önceliklerini kodlama işidir. Hata, gecikme ve kritik servis trafiği korunurken düşük değerli akışlar kontrollü azaltıldığında hem maliyet hem de tanı kalitesi birlikte iyileşir. Güçlü sonuç almak için sampling oranından önce karar bekleme süresi, bellek sınırı ve politika görünürlüğü doğru kurulmalıdır.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

Yeni yazılardan haberdar olun

Haftada bir yeni içerikler ve kaynaklar doğrudan e-postanıza gelsin.

Spam yok. Yalnızca yeni ve önemli içerikler için e-posta gönderilir.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar