İçeriğe geç
mcpd
daemon yok
Kaynak

Örnekleme

Trace'lerin bir kısmını tutmak, her birinin bir kısmını tutmadan.

Karar bir kez, kökte verilir

Bir trace bütün olarak tutulur veya bütün olarak düşürülür. Karar, kök span başladığında verilir ve her alt span tarafından devralınır, yani bir çalıştırma hiçbir zaman yarım kaydedilmez.

Geri kalan her şey bu kuraldan çıkar. Span'lerinin rastgele %30'u eksik olan bir trace, örneklenmiş bir trace gibi okunmaz. Gözlemlediğiniz sistemdeki bir hata gibi okunur: hiç olmamış görünen bir araç çağrısı, ebeveyni olmayan bir model çağrısı, geri getirmenin olması gereken yerde bir boşluk. Boşluğun ajanınız değil gözlemlenebilirlik aracınız olduğunu anlayana kadar bir öğleden sonranızı buna verirsiniz.

Varsayılan her şeyi tutar

Örnekleme yapılandırılmadığında politika always olur ve hacim aksini söyleyene kadar doğru varsayılan budur. Örnekleme, okumak isteyeceğiniz çalıştırmayı gözden çıkarır. Bunu yalnızca depolama veya bant genişliği sizi zorladığında ödeyin.

Beş strateji

StratejiDavranış
always Her şeyi tutar. Varsayılan.
never Hiçbir şey tutmaz.
ratio Sabit bir kesir tutar; kesir, trace başına bir kez kökte rastgele çekilir.
deterministic Sabit bir kesir tutar; karar trace kimliği özetlenerek verilir. Her collector, başka hiçbiriyle konuşmadan aynı yanıta ulaşır.
tail Kararı trace bitene kadar erteler, sonra oran ne derse desin her hatayı ve her yavaş çalıştırmayı tutar.

Oran ayarlamak

--sample veya MCPD_SAMPLE, 0.0 ile 1.0 arasında bir kesir alır ve deterministik stratejiyi yapılandırır. Bu aralığın dışındaki bir değer, ne verdiğinizi adlandıran bir iletiyle daemon'u açılışta durdurur. Değeri aralığa kırpmaz, çünkü sessizce 1.0'a dönüşen yanlış yazılmış bir oran bir ay sonra depolama faturasından fark edilir.

on trace'ten birini tut

mcpd --sample 0.1

Her SDK aynı kesri okur: istemci yapılandırmasında sample, ortamda MCPD_SAMPLE. İstemcide örneklemek daha ucuzdur: örneklenmemiş bir span hiç kuyruğa alınmaz ve hiç dışa aktarılmaz, yani hiç bant genişliği harcamaz. Daemon'da örneklemek size gidiş dönüşe mal olur ama oranı tek bir yerde tutar; bir düzine servis tek bir örneğe rapor verdiğinde istediğiniz şey budur.

Beş stratejiden daemon always ve deterministic stratejilerine ulaşır: --sample ve yapılandırma dosyasındaki bir projenin sample değeri, ikisi de deterministic stratejiyi ayarlar. never, ratio ve tail politika türünde uygulanmıştır, ama bu yapıda ne bir seçenekten ne de yapılandırma dosyasından erişilebilir.

Özetleme bir filoyu neden anlaştırır

Bir yük dengeleyicinin arkasında birkaç mcpd örneği çalıştırın; tek bir trace'in span'lerinin hepsi aynı örneğe ulaşmaz. Örnek başına ya da span başına yazı tura atan bir örnekleyici, bir trace'in bir kısmını tutar, geri kalanını düşürür; ilk kural tam olarak bu başarısızlığı önlemek için vardır.

Deterministik strateji, trace kimliğini 64 bitlik aralığın tamamına eşler ve bu değer oranın gerektirdiği eşiğin altına düştüğünde trace'i tutar. Her örnek, aynı kimlikten aynı sayıyı hesaplar, yani hepsi anlaşır: paylaşılan durum yok, eşgüdüm protokolü yok, senkronu bozulacak bir şey yok. Aynı kimlik bir yeniden denemede de aynı yanıtı verir, yani yeniden oynatılan bir yığın yarım ulaşamaz.

Bu eşlemeyi dürüst kılan iki ayrıntı var. Kimliğin sondaki on altı onaltılık karakterini okur: OpenTelemetry trace kimliklerinin rastgele olmasını ister, ama bazı üreticiler baştaki baytları bir zaman damgasından türetir ve onları okuyan bir örnekleyici örneklemek yerine günün saatiyle ilişkilenir. Kimlik hiç onaltılık değilse, her şeyi tutmaya indirgenmek yerine sonlandırıcı bir karıştırma içeren gerçek bir özete iner, yani gerçekleşen oran istediğiniz orana yakın kalır.

SDK'larda yukarıdan gelen karar kazanır

Bir SDK gelen bir W3C traceparent üzerinden bir trace'i sürdürdüğünde, örneklendi bayrağını kimliklerle birlikte devralır ve kendi oranını uygulamaz. Bu iki yönde de geçerlidir: bayrak açıksa trace yerel oran ne olursa olsun tutulur, kapalıysa yerel oran ne olursa olsun düşürülür.

Bu sürümde daemon bunu yapmaz. OTLP üzerinden gelen bir span'in trace-flags baytını daemon mcpd.otlp.flags özniteliğinde saklar, ama daemon'un örnekleyicisi onu okumaz. Oran ayarlanmış bir daemon, bayrak ne derse desin bu oranı her trace'e uygular.

Alternatifi kulağa geldiğinden daha kötüdür. Her servis kendi oranını uygulasaydı, dört servisten geçen bir trace ikisi tarafından tutulur ikisi tarafından düşürülürdü ve sonunda elinizdeki şey dağıtık bir trace olmazdı. Bir trace biçiminde bir delikler kümesi olurdu.

Kuyruk örneklemesi okunmaya değer çalıştırmaları tutar

Baş örnekleyici hiçbir şey bilmeden karar verir. Ucuzdur ve kördür: onda bir oranda hataların da onda birini tutar. Gerçekte açtığınız trace'ler seyrek olanlardır ve bir oran örnekleyicisinin en kötü olduğu şey tam olarak seyrekliktir.

A strip chart recording model latency over the last hour: a baseline near 420 milliseconds with five occasional excursions towards 800 milliseconds.

Bir gecikme kaydı böyle görünür: düz bir taban çizgisi ve birkaç sapma. Hacim taban çizgisindedir, yanıtlar sapmalardadır. Kuyruk örneklemesi trace'i bitene kadar tutar, sonra içinde bir şey hata verdiyse saklar, ayarladığınız eşikten uzun sürdüyse saklar, aksi hâlde önceki deterministik özetin aynısını uygular. Hataları tutmak varsayılan olarak açıktır, çünkü en çok ihtiyaç duyduğunuz trace'ler seyrek olanlardır ve bir oran örnekleyicisi de en çok onları atar.

Bedeli tamponlamadır. Bir kuyruk örnekleyicisi, karar verebilene kadar bitmemiş her trace'i bellekte tutmalıdır; varsayılan değil de bilinçli bir seçim olmasının nedeni budur. Yukarıdaki gibi, kuyruk stratejisi politika türünde uygulanmıştır ve bu yapıda ne bir seçenekten ne de yapılandırma dosyasından erişilebilir; daemon'un alım yolu baş kararını uygular.

Neyin düşürüldüğünü bilmek

Örnekleyicinin attığı her span mcpd_traces_sampled_out_total sayacını artırır; bu sayaç /metrics altında Prometheus metin biçiminde dışa aktarılır. Oranı ekibinizin okuduğu bir yere yazın. Belgelenmiş bir örnekleme oranıyla eksik bir trace bir açıklamadır; açıklaması olmayan eksik bir trace bir destek kaydıdır ve onu açan kişi genellikle sizsinizdir.

Sonraki