Span birleştirme
Orphan span'leri yeniden bağlayan async-stitching motorunu ayarlayın — zamanlayıcı periyodu, aday pencereleri, güven eşiği ve üç skorlayıcı ağırlığı. Ayrıca motoru kapatmanın iki ayrı yolu ve hangisini ne zaman kullanacağınız.
OpenTelemetry SDK'sı trace bağlamını doğrudan çağrılarda otomatik taşır, ancak kuyruk tabanlı sıçramalarda bu bağlam kaybolur: bir Kafka/SQS/RabbitMQ/Redis-Streams mesajı servis sınırını geçer ve tüketici, parent'ı olmayan yepyeni bir trace başlatır. Sonuç bir orphan span — ve trace şelalesinde üretici→tüketici bağlantısının olması gereken yerde bir boşluk.
Span birleştirme bu boşluğu ingest'ten sonra kapatır. Bir arka plan işi yakın zamanlı orphan'ları gezer, her birini en olası üretici span'ine mesaj-kimliği parmak izi + zamanlama ile eşleştirir ve — eşleşme bir güven eşiğini aştığında — çıkarsanan parent'ı bir companion tabloya yazar. Trace görünümü o zaman güven yüzdesiyle birlikte kesik çizgili, birleştirilmiş bir kenar çizer; böylece yeniden kurulmuş bir bağlantı, gerçekte taşınmış olandan her zaman görsel olarak ayrılır. Aynı yeniden kurma, servis haritasındaki eksik kenarları da dolduran şeydir.
Bunların tümünü Admin → Span birleştirme ekranında yapılandırırsınız. Her parametre canlıdır: kaydedilen bir değişiklik motorun bir sonraki tick'inde alınır ve periyodun kendisi de yeniden başlatma olmadan yeniden zamanlanır.
Kapatmanın iki yolu — ve ikisi aynı şey değil
Bu, en sık karışıklık yaşanan nokta, o yüzden bir şeye dokunmadan önce okuyun.
| Kontrol | Yer | Etki | Yeniden başlatma gerekir mi? |
|---|---|---|---|
ORBTRACE_STITCHING_ENABLED=false | .env (açılış) | Motor hiç başlamaz — arka plan thread'i yok, kilit yok, tarama yok, sıfır yük. | Evet |
| Stitching enabled kutucuğu | Admin → Span birleştirme | Yumuşak duraklatma. Motor ayakta kalır ama kapalıyken her tick'i atlar. | Hayır |
Hangisini kullanmalıyım?
Env var = motor kurulu mu. Kutucuk = şu an çalışıyor mu. Stitching'i altyapı-as-code ile tamamen kapalı göndermek için env var'ı kullanın (ör. buna ihtiyacı olmayan minimal 4 GB bir makine). Bir olay veya ayar denemesi sırasında duraklatıp devam ettirmek için kutucuğu kullanın. Kutucuğun bir etkisi ancak env var varsayılanında (açık) bırakıldığında olur — motor açılışta kapatıldıysa admin ekranı bunu söyler ve toggle'ı devre dışı bırakır.
Zamanlayıcı — ne sıklıkta ve ne kadar geriye
Motorun ne sıklıkta uyandığı ve her geçişin ne kadar geçmişi taradığı.
| Parametre | Varsayılan | Ne yapar |
|---|---|---|
| Tick interval | 30s | Motorun yeni orphan'lara bakmak için ne sıklıkta uyandığı. Düşük = birleştirilmiş kenarlar daha erken görünür, daha sık tarama pahasına. Zamanlayıcının boşa dönmesini engellemek için 1s ile sınırlanır. |
| Look-back window | 5dk | Her tick'in orphan için ne kadar geçmişe baktığı. tick + ingestion gecikmeniz'den rahatça büyük olmalı, yoksa iki tick arasına düşen bir orphan pencereden kaçıp hiç birleştirilmeyebilir. Span'ler depolamaya geç ulaşıyorsa tick'i kısaltmak yerine bunu genişletin. |
| Orphan scan limit / tick | 5000 | Bir tick'in işleyeceği orphan sayısına güvenlik tavanı; tek geçişin maliyetini sınırlar. Sürekli bu tavana çarpıyorsanız orphan'lar temizlenenden hızlı geliyordur — limiti yükseltin veya tick'i kısaltın ki birikim look-back penceresinden eskiyip düşmesin. |
Aday eşleştirme — hangi span'ler değerlendirilir
Her orphan için, hangi üretici span'lerinin parent olmaya uygun olduğu.
| Parametre | Varsayılan | Ne yapar |
|---|---|---|
| Candidate window ± | 5s | Olası parent'ların çekildiği, orphan'ın başlangıcı etrafındaki zaman aralığı. Yavaş async sıçramaları (saniyelerce kuyrukta bekleyen bir iş) yakalamak için genişletin; ama ne kadar geniş olursa o kadar çok aday skorlanır — daha çok maliyet ve tesadüfi eşleşmeye daha çok alan. |
| Candidate limit / orphan | 200 | Tek bir orphan için skorlanacak aday sayısına kesin tavan; yoğun bir pencere binlerce span tuttuğunda worst-case'i sınırlar. Yüksek-trafikli bir servisin bağlantıları kaçırılıyor gibi görünüyorsa, geniş bir pencere ile bu tavanın birleşimi gerçek parent'ı eleme dışına itiyor olabilir — önce pencereyi daraltın, sonra tavanı yükseltin. |
Güven & skorlayıcı — eşleşme neye denir
| Parametre | Varsayılan | Ne yapar |
|---|---|---|
| Confidence floor | 0.5 | Motorun birleştirmeyi yazmadan önce bir adayın ulaşması gereken minimum bileşik skor. Yüksek = daha az ama daha güvenilir bağlantı; düşük = daha çok kapsama, yanlış parent riski daha çok. |
| Clock-skew tolerance | 2s | Host saat farklarını ve ingestion sapmasını soğurmak için zamansal pencereye eklenen pay; saati biraz kaymış bir parent yanlışlıkla elenmesin diye. Üretici ve tüketicileri sıkı NTP-senkronize etmediğiniz host'larda çalıştırıyorsanız yükseltin. |
| Max overshoot | 5s | Zamansal skor sıfıra düşmeden önce parent span'in bitişi ile orphan'ın başlangıcı arasında izin verilen en büyük boşluk. Sade haliyle: async sıçrama makul olarak ne kadar sürebilir? Kuyruk bekleme sürenizin gerçekçi üst sınırına ayarlayın. |
Devreye alırken
Güven eşiğini 0.3 civarında başlatın, async sıçraması olması gereken birkaç trace açın ve birleştirilmiş kenarları ile güven rozetlerini gözle inceleyin. Eşleşmelere güvendikten sonra gürültüyü kesmek için eşiği yükseltin. Gerçek trace'lere bakarak ayar yapmak, yalnızca rakamlarla ayar yapmaktan iyidir.
Sinyal ağırlıkları — güven skoru nasıl kurulur
Bileşik güven, üç sinyalin ağırlıklı ortalamasıdır. Üç ağırlık toplamı 1.0 olmalıdır — bir ortalama oldukları için, başka bir toplam skoru, eşiğin karşılaştırdığı 0–1 aralığının dışına iter (form, dengelenene kadar kaydı engeller).
| Sinyal | Varsayılan | Anlamı | Ne zaman yükselt |
|---|---|---|---|
| Temporal | 0.50 | Zamanlamanın ne kadar tuttuğu: parent biter, çocuk hemen sonra, overshoot sınırı içinde başlar. | Zamanlamanın tek başına net olduğu düşük-trafikli sistemler. |
| Fingerprint | 0.35 | Mesaj kimliği eşleşmesi — mesaj ID'leri, anahtarlar ve taşınan header'lar. En güçlü "tam olarak aynı mesaj" sinyali. | Taşıyıcınız mesaj ID/header'larını güvenilir taşıdığında. |
| Content | 0.15 | Span şeklinden yumuşak teyit: kind eşleşmesi (PRODUCER→CONSUMER), isimler, attribute tutarlılığı. Bir eşitlik bozucu. | Nadiren ana kaldıraç; küçük tutun. |
Değişiklik sonrası ne izlenir
Motor Micrometer sayaçları yayar (metrik backend'inizde görünür ve Orbtrace'in kendisine de dogfood edilir):
orbtrace.stitching.stitches— başarıyla yazılan bağlantılar. Eşiği düşürdükten veya pencereleri genişlettikten sonra artmalı.orbtrace.stitching.rejects— eşiğin altında skorlanan aday çiftleri. Az stitch yanında yüksek reject oranı, eşiğin ağırlıklarınız için fazla katı olduğu ya da pencerelerin gerçek parent'a ulaşamayacak kadar dar olduğu anlamına gelir.orbtrace.stitching.orphans— tick başına bulunan orphan'lar. Bu, tarama limitini takip ediyorsa tavandasınız demektir.
Ama belirleyici kontrol her zaman trace'lerin kendisidir: async sıçraması olması gereken birkaçını açın ve kesik çizgili birleştirilmiş kenarın makul bir güven yüzdesiyle göründüğünü doğrulayın.
Bağlantılar nerede tutulur
Birleştirilmiş parent'lar bir span_stitch companion tablosuna yazılır ve okuma anında trace ağacına join edilir — orijinal span'ler asla değiştirilmez. Birleştirilmiş bir kenarın her zaman çıkarsanmış olarak işaretlenmesinin ve stitching'i kapatmanın (ya da yapılandırmasını geri almanın) ham telemetrinizi asla bozmamasının nedeni budur.
Sıradaki: Admin sayfaları.