GH GambleHub

Dağıtılmış İzler

Dağıtılmış İzler

1) Neden ve ne olduğu

Dağıtılmış izleme, tüm istek yolu boyunca işlemleri birbirine bağlamanın bir yoludur: ön? API ağ geçidi? Mikro hizmetler? Veritabanları/önbellekler? Broker? Jabs/pipelines.
Sonuç, her bir yayılma alanının bileşenin çalışmasını nitelikler, olaylar ve durumla yakaladığı yayılma alanlarından (span) bir izdir. Bu, RCA'yı hızlandırır, SLO'ların korunmasına yardımcı olur ve MTTR'yi azaltır.

Temel hedefler:
  • Kritik yol ve darboğazların görünürlüğü.
  • Semptomların (metrikler) nedenlerle (spanslar) ve ayrıntılarla (günlükler) korelasyonu.
  • Retray analizleri, kuyruklar, DLQ, fan çıkışları, gecikme "testereleri".

2) Trace veri modeli

Trace - 'trace _ id'ile çağrı grafiği.
Span - операция: 'name', 'kind' (SERVER/CLIENT/PRODUCER/CONSUMER/INTERNAL), 'start/end', 'status', 'attributes', 'events', 'links []'.
Nitelikler - değer anahtarı (rota, db. Sistem, mesajlaşma. Sistem, bulut. bölge, vb.).
Olaylar - yayılma alanı içindeki anlık etiketler (örneğin, 'retry', 'cache _ miss').
Span Bağlantıları - "ebeveyn-çocuk" dışındaki bağlantılar (batchi, retrai, fan-in/out).
Kaynak - süreç/hizmet meta verileri ('hizmeti. Name ', version, environment).

3) Bağlam ve tolere edilebilirlik

3. 1 W3C İzleme Bağlamı

Başlıklar:
  • 'traceparent': 'version-traceid-spanid-flags' (bayraklar örnekleme içerir).
  • 'tracestate': satıcıya özel durum (minimum).
  • Bagaj - iş bağlamı için anahtarlar (sınırlı, PII/sır yok).

3. 2 Atma bağlamı

HTTP: 'traceparent'/' tracestate'; gRPC: meta veriler; WebSocket: yükseltme yaparken ve mesajlarda;

Mesajlar: başlıklarda (Kafka/NATS/RabbitMQ) - orijinal bağlamı PRODUCER ile kaydedin ve CONSUMER ile aktarın.
Tabanlar: bağlamı "taşımayın" - biz span (sorgu, satırlar, db. Sistem), ama değerler değil.

4) Örnekleme: Nasıl kırılmayacak

Kafa örneklemesi: olasılıksal/kurallara göre (rota, kiracı, uç nokta).
Kuyruk örneklemesi (toplayıcı üzerinde): "ilginç" izleri kaydedin - hatalar, uzun p95/p99, nadir yollar.
Örnekler: Histogram metrikleri belirli 'trace _ id' referanslarını saklar.
Öneri: birleştirmek - kafa 5-20 % + kuyruk kuralları 100 %5xx/timeout/p99 için.

5) Nitelikler ve taksonomi (minimum gerekli)

Genel:
  • hizmet. İsim ',' hizmeti. Sürüm ',' dağıtım. Çevre ',' bulut. Bölge ',' http. Rota ',' http. Yöntem ',' http. status_code', 'db. Sistem ',' db. '(kısaltılmış/veri olmadan)' ifadesi, mesajlaşma. sistem ',' mesajlaşma. Operasyon ', akran. Servis ',' net. akran. İsim ',' kiracı. id ',' isteği. id '.

İşletme etiketleri: temiz, PII'siz. Örnek: 'Sipariş. Bölüm ',' plan. kademe.

6) Eşzamansız komut dosyaları, kuyruklar ve gruplar

PRODUCER> CONSUMER: context ile span PRODUCER oluşturun; Mesajda - başlıkları (traceparent, bagaj). CONSUMER, SERVER/CONSUMER-span'ı PRODUCER bağlantısından başlatır (eğer katı bir hiyerarşi yoksa).
Fan çıkışı: bir giriş - birçok çıkış - çocuk açıklıkları veya bağlantılar.
Batch: CONSUMER, N mesajlarının bir patlamasını okur - her iletiId için 'events' veya N ayrı bağlamlar için 'links'ile bir span.
DLQ: ayrı span 'mesajı. Dlq. sebep saymak yayınla.
Retrai: 'event: retry' + 'retry. count 'niteliği; Denemek için tercihen yeni bir CHILD span.

7) Günlükler ve metriklerle entegrasyon

'Trace _ id'/' span _ id'ile JSON günlükleri yazıyoruz - açıklıktan tıklayarak günlüklere gidiyoruz.
KIRMIZI/KULLANIM metrikleri örnekler içerir - p99 zirvelerinden "kötü" açıklıklara gideriz.
İzler, olaylar aracılığıyla teknik sinyaller (bağımlılık hataları) ve iş sinyalleri (dönüşüm) üretir.

8) Performans ve maliyet

Olay örnekleme ve azaltma.
Niteliklerin kardinalite azaltımı (no 'user _ id'/' session _ id' as label!).
İhracatçı tarafından sıkıştırma/kasaplama; Zaman aşımı sınırlarını dışa aktar.
Depolama: Sıcak 1-7 gün, sonra - birimler/sadece "sorun" yollar.
Harcama kategorileri: toplayıcılar, endeksler, depolama, çıkış.

9) Güvenlik ve gizlilik

Geçiş sırasında: TLS 1. 3/mTLS kollektor↔agenty; Rest'te: şifreleme, özel anahtarlar (bkz. "Encryption In Transit/At Rest").
PII ve sırlar: niteliklerde/olaylarda yazmayın; tokenization/masking on the producer. - Üretici üzerinde tokenizasyon/maskeleme.
Çoklu kiracılık: 'kiracı. id'bir kaynak etiketi ve alanların izolasyonu, okuma politikaları olarak; İzleme erişimini denetleme (bkz. Denetim ve değiştirilmemiş günlükler).

10) Uygulama şemaları (referans)

10. 1 OpenTelemetry SDK (sözde kod)

python from opentelemetry import trace from opentelemetry. sdk. trace import TracerProvider from opentelemetry. sdk. resources import Resource from opentelemetry. sdk. trace. export import BatchSpanProcessor from opentelemetry. exporter. otlp. proto. grpc. trace_exporter import OTLPSpanExporter

provider = TracerProvider(resource=Resource. create({
"service. name":"checkout","service. version":"1. 12. 0","deployment. environment":"prod"
}))
provider. add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector:4317", insecure=True)))
trace. set_tracer_provider(provider)
tr = trace. get_tracer("checkout")

with tr. start_as_current_span("POST /pay", attributes={
"http. route":"/pay","http. method":"POST","tenant. id":"t-42"
}):
business logic, external API call and pass DB

10. 2 OTel Toplayıcı - kuyruk örnekleme (parça)

yaml processors:
tailsampling:
decision_wait: 2s policies:
- type: status_code status_codes: [ERROR]
- type: latency threshold_ms: 900
- type: probabilistic sampling_percentage: 10 exporters:
otlphttp: { endpoint: http://trace-backend:4318 }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tailsampling]
exporters: [otlphttp]

10. 3 Kafka - Bağlam Transferi (Konsept)

PRODUCER: "traceparent", "bagaj" başlıklarını ekleyin.
CONSUMER: mesaj yeni bir akış başlatırsa - bağlantıdan başlıklara kadar yeni bir SERVER/CONSUMER aralığı.

11) Veri/ETL и ML

Toplu boru hatları için: 'dataset ile toplu/bölümleme üzerine yayılma. urn ',' koş. id ',' satırları. Giriş/çıkış ', tazelik. lag '.
ML için: eğitim/çıkarım alanları, model sürümü, gecikme, özellik deposu.
Lineage'a bağlantı: 'çalıştır. id 'и' veri kümesi. urn ', izden veri kaynağı grafiğine atlamanıza izin verir.

12) İzleme Platformu SLO

Kullanılabilirlik yutma: ≥ 99. 9%

İndekslemeye gecikme: ≤ 60 s p95

Kafa örneği kapsamı: Önemli rotaların ≥ %5-10'u

"Kritik yollar" dizinine göre durum HATASı ve gecikme> eşiği ile izlerin %100 kaydedilmesi

Platform uyarıları: damlaların büyümesi, ihracat zaman aşımları, indeksleyici gecikmesi, kardinalite aşırı ısınması.

13) Test ve doğrulama

CI'da trace contract: anahtar uç noktalarda açıklıkların varlığı, zorunlu nitelikler, doğru 'traceparent' ağ geçidi/proxy üzerinden uçar.
Sentetik/rom örnekleri: dışarıdan izleri toplamak.
Kaos/olaylar: bağımlılıkları devre dışı bırakmak, kuyruk örnekleyicinin hataları "aldığını" kontrol etmek.
Satışlarda duman: Serbest bırakıldıktan sonra - "herhangi bir açıklık var mı've örnek - iz.

14) Kontrol listeleri

Satmadan önce

  • W3C Trace Context her yere atılır; Mesajlar için - başlıklar.
  • Temel kafa örneklemesi etkinleştirildi; 5xx/p99 için kuyruk kuralları yapılandırılmıştır.
  • Zorunlu nitelikler rota, yöntem, durum, hizmettir. versiyon, kiracı. id.
  • JSON, 'trace _ id'/' span _ id'ile günlükler, örneklerle metrikler.
  • PII dezenfektanları; Hareket halindeyken/durgun erişim politikalarında şifreleme.
  • Panolar: "kritik yol", "bağımlılık hataları", "retras/zaman aşımları".

Operasyon

  • Niteliklerin kardinalitesinin aylık olarak gözden geçirilmesi; kotalar.
  • SLO ile ayar kuyruğu örneklemesi (daha az gürültü, tüm "sıcak" - örnekte).
  • Geçiş metriği ile RCAs Eğitimi - örnek - iz - günlükleri.
  • Kuyruklar, DLQ'lar, ETL işleri için kapakların kontrol edilmesi.

15) Runbook'и

RCA: p99 artış/ödeme

1. KIRMIZI panoyu açın; Bin p99 itibaren iz için örnek gitmek.
2. "Dar'bir CLIENT-span bulun (örneğin, 'ağ geçidi. Call '), check' retry. Count ', zaman aşımları.
3. Servis sürümlerini/bağımlılıklarını, bölgeyi/bölgeyi karşılaştırın.
4. Bozulmayı etkinleştirin (önbellekleme yanıtı/RPS sınırı), bağımlılık sahiplerini bilgilendirin.
5. Düzeltmeden sonra - RCA ve optimizasyon biletleri.

DLQ dalgalanması

1. Filtreyi 'iletme'ye göre izleme. Dlq. yayınla '.
2. Nedenleri (olayları) kontrol edin, serbest bırakma ile ilişkilendirin.
3. Yeniden işleme başlayın, CONSUMER için zaman aşımını geçici olarak artırın, aşağı akış sahiplerini bilgilendirin.

16) Sık hatalar

Ağ geçitleri/brokerler aracılığıyla bağlam tahmini yoktur. Çözüm: ara katman/kesişiciler, tek kütüphaneler.
Tüm yollar %100. Pahalı ve anlamsız - kuyruk örnekleme kullanın.
'Trace _ id' olmayan günlükler. Korelasyon - MTTR ↑ kaybolur.
Niteliklerde PII. Maske/tokenize; Sadece teknik bağlamı koruyun.
"Sessiz" arka plan jabları. Toplu/bölümleme ve 'run'a yayılma alanı ekleyin. id '.
İsim uyuşmazlığı. Bir yayılma alanı ve nitelik anahtarları sözlüğü girin.

17) SSS

S: Baş veya kuyruk örneklemesi daha mı iyi?
A: Kombinasyon. Kafa taban katmanını verir, kuyruk anomalilerin/hataların korunmasını garanti eder.

S: Kafka'yı katı bir hiyerarşi olmadan nasıl izleyebilirim?
C: PRODUCER ve CONSUMER arasındaki span bağlantılarını kullanın; bağlam - başlıklarda.

S: Hassas SQL ile ne yapmalı?
A: 'db. 'ifadesi kısaltılmış/normalleştirilmiş (değer yok) veya' db. İşlem '+ boyutlar/zaman.

S: İş metrikleriyle nasıl bir ilişkiniz var?
C: Etki alanının niteliklerini PII (plan/segment) olmadan ekleyin, yayılma alanındaki "iş aşamaları" olaylarını kullanın ve dönüşüm metriklerinden örnekleme gidin.

İlgili malzemeler:
  • "Gözlemlenebilirlik: günlükler, metrikler, izler"
  • "Denetim ve değişmez günlükler"
  • "Transit/Dinlenme Şifrelemesinde"
  • "Veri Kökeni (Lineage)"
  • "Tasarıma Göre Gizlilik (GDPR)"
  • "Gizli yönetim"
Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.