İçeriğe geç
mcpd
daemon yok
Kaynak

İletme

mcpd, OTLP'yi iki yönde de konuşur. Buraya gelen hiçbir şey burada mahsur kalmaz.

Tek bir çıkış protokolü, on bir exporter değil

mcpd OTLP alır ve OTLP yayabilir. Bu tek özellik, sağlayıcı başına bir exporter kümesinin yaptığı işin çoğunun yerine geçer: Langfuse, Datadog, Honeycomb, Grafana ve adı anılmaya değer her hedef, HTTP üzerinden OTLP kabul eder. Dolayısıyla iletme on bir değil tek bir uygulamadır ve bir sağlayıcının SDK sürümünün gerisinde kalamaz.

Bu aynı zamanda mcpd'yi benimsemenin geri alınabilir olduğu anlamına gelir. Onu daha önce kullandığınız şeye yöneltin, ikisini iki hafta birlikte çalıştırın ve geri alamayacağınız bir geçiş üzerinden değil, önünüzdeki veriyle karar verin.

Açmak

yerelde sakla, ileriye kopyala

mcpd serve --forward-endpoint https://otlp.example.com

Yol sona eklenir, bu yüzden /v1/traces değil temel adresi verin. Kimlik bilgisi isteyen bir hedef için başlık ekleyin:

bir yetkilendirme başlığıyla

mcpd serve \ --forward-endpoint https://otlp.example.com \ --forward-header 'Authorization: Bearer $TOKEN'

Aynı ayarlar yapılandırma dosyasında forward altında durur; orada batch_size ve enabled de vardır. Seçenek dosyayı yener, yani paylaşılan bir ConfigMap düzenlenmeden tek bir örnek başka bir yere yöneltilebilir.

{
  "forward": {
    "endpoint": "https://otlp.example.com",
    "headers": [["Authorization", "Bearer sk-..."]],
    "batch_size": 256,
    "enabled": true
  }
}
Ingest pipeline
  1. Decode

    OTLP or native, gzip or plain

  2. Sample

    Decided once, at the root

  3. Redact

    Before anything is written

  4. Price

    From the configured price book

  5. Store

    One transaction per batch

Redaction is stage three, not a cleanup job. A value that a rule matches never reaches storage at all.

Yerel depolama önce olur

Bir span, herhangi bir şey iletilmeden önce mcpd'nin kendi deposuna yazılır; iletme ise sonrasında kendi görevinde çalışır. Bunun iki sonucu var ve ikisi de bilinçlidir.

Yavaş bir hedef, kendi gecikmesini span'i üreten isteğe hiçbir zaman eklemez. Ajanınız başkasının collector'ını beklemez.

Çalışmayan bir hedef hiçbir zaman reddedilmiş bir alıma dönüşmez. mcpd çalışmayı sürdürür ve iletmeyi kendi görevinde yeniden dener. Alternatifinde başka bir şirketin kesintisi, telemetrinizin hiç tutulmaması demek olurdu. Bu tasarım tam da bunu önlemek için var.

Her yığının üç denemesi vardır. Bir 429, bir 5xx ya da başarısız bir bağlantı 250 ms sonra yeniden denenir ve bekleme her denemeden sonra iki katına çıkar. Saniye olarak verilen bir Retry-After, en fazla 30 saniyeye kadar beklemenin yerini alır. Başka her 4xx ilk yanıtta kesindir, çünkü yığın o hedef için bozuk kalacaktır. Daemon dururken kalan denemeleri hemen yapar. Kesin olarak reddedilen ya da son denemeden sonra hâlâ teslim edilmemiş bir yığın loglanır ve span'leri mcpd_forward_dropped_spans_total sayacına eklenir; böylece kopyanın ne kadarının eksik olduğunu görürsünüz.

Bağlantıyı kabul edip hiç yanıt vermeyen bir hedef de daemon'un belleğini ele geçiremez. Aynı anda hedefi en fazla 64 alım isteğinin kopyası bekler. Bu kadarı beklerken yeni bir kopya hemen bırakılır ve mcpd_forward_dropped_spans_total içinde sayılır; yerel yazma etkilenmez.

Kalıcı bir giden kuyruk yoktur. Bir yığın yeniden denenirken bellekte bekler; iletme kuyruğu doluysa yeni bir yığın düşürülür ve span'leri aynı metrikte sayılır. Kalıcı bir kuyruk başka bir üründür ve saatlerce geride kalan sessiz bir kuyruk, görünür bir boşluktan daha kötüdür. Teslim güvencesi gerekiyorsa mcpd ile hedef arasına gerçek bir collector koyun; o iş için yapılmıştır.

Maskeleme, dışarı çıkana da uygulanır

İletme, herhangi bir şey yazılmadan önce yerinde maskeleme yapan alım hattından sonra gerçekleşir. mcpd'ye gizlemesi söylenen ne varsa bir sonraki durağa da ulaşmaz. Deponuzu koruyup çıkışınızı korumayan bir kural, bir gizlilik denetimi olmazdı.

Ne iletilir

Span'ler. Loglar, metrikler, puanlar, geri bildirimler ve yön notları mcpd'de kalır, çünkü insanların ilettiği hedefler izleme arka uçlarıdır ve geri kalanı ya düşürür ya da özniteliklere sıkıştırır.

Span'ler, bir alıcının beklediği biçim olan resourceSpans içinde servise göre gruplanır; span başına bir kaynak biçiminde değil, ki bu da geçerlidir ama sonraki her sistemin yeniden gruplamasına yol açar.

mcpd'den mcpd'ye iletme

İki uç da aynı protokolü konuştuğu için yerel bir mcpd, paylaşılan bir mcpd'ye iletebilir. Geliştiriciler kendi makinelerinde tam payload'larla hızlı bir depo tutar; ekibin örneği de aynı çalıştırmaları, kendi saklama süresi ve varışta uygulanan kendi maskeleme kurallarıyla alır.

Sonraki